`

子线程控制ProgressDialog的可见性

阅读更多
这个代码让我有点迷惑:
package com.example;

import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

public class Looper_07 extends Activity implements OnClickListener {
	private final int WC = LinearLayout.LayoutParams.WRAP_CONTENT;
	private final int FP = LinearLayout.LayoutParams.FILL_PARENT;
	private ProgressDialog progressDialog = null;
	public TextView tv;
	private Button btn, btn2;
	Thread th1;

	public void onCreate(Bundle icicle) {
		super.onCreate(icicle);
		LinearLayout layout = new LinearLayout(this);
		layout.setOrientation(LinearLayout.VERTICAL);

		btn = new Button(this);
		btn.setId(101);
		btn.setBackgroundResource(R.drawable.icon);
		btn.setText("test looper");
		btn.setOnClickListener(this);
		LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(100, 50);
		param.topMargin = 10;
		layout.addView(btn, param);

		btn2 = new Button(this);
		btn2.setId(102);
		btn2.setBackgroundResource(R.drawable.icon);
		btn2.setText("exit");
		btn2.setOnClickListener(this);
		layout.addView(btn2, param);

		tv = new TextView(this);
		tv.setTextColor(Color.WHITE);
		tv.setText("");
		LinearLayout.LayoutParams param2 = new LinearLayout.LayoutParams(FP, WC);
		param2.topMargin = 10;
		layout.addView(tv, param2);
		setContentView(layout);
		// ------------------------
	}

	public void onClick(View v) {
		switch (v.getId()) {
		case 101:
			progressDialog = ProgressDialog.show(this,
	    			 "please wait…","Loading",true);
	 		th1 = new myThread();
	 		th1.start();
	 		setTitle("mainThread....");
			break;
		case 102:
			finish();
			break;
		}
	}
	class myThread extends Thread {
        @Override
        public void run() {
        	 try{
        		  sleep(3000); //故意延遲
                }
            catch(Exception e)
                {
              	  e.printStackTrace(); 
                }
            // 为什么这里可以控制Dialog的可见性????????????
            //子线程来执行
            progressDialog.dismiss();
          }
   }
}
/*
上述程式又可寫為:
public class ac01 extends Activity 
    implements OnClickListener, Runnable{
	     //………………(省略)
       	public void onClick(View v) {
		switch(v.getId()){
		case 101:
			progressDialog = ProgressDialog.show(this,
	    			 "please wait…","Loading",true);
	 		th1 = new Thread(this);
	 		th1.start();
	 		setTitle("mainThread....");
            break;
		case 102:
	    	finish();
			break;
		}
	}
    public void run() {
         	 try{
         		  Thread.sleep(6000); //故意延遲
                 }
             catch(Exception e)
                 {
               	  e.printStackTrace(); 
                 }
             progressDialog.dismiss();
           }
    }
*/


分享到:
评论

相关推荐

    AsynTask+ProgressDialog子线程下载图片并显示进度然后显示

    总结一下,通过自定义AsynTask,我们可以将耗时的图片下载操作放在子线程进行,同时在主线程中更新ProgressDialog的进度,确保UI的流畅性。在下载完成后,通过onPostExecute()方法将图片显示在ImageView上。这个过程...

    子线程更新主线程数据

    - volatile关键字:保证了多线程环境下的可见性和有序性,但不保证原子性,适用于简单共享变量的场景。 4. 其他跨线程通信方式: - Java中的ExecutorService和Future:创建线程池,提交任务,通过Future获取结果...

    QT子线程更新主线程

    "QT子线程更新主线程"这个主题涉及到如何在后台线程(子线程)执行耗时操作,并将结果安全地传递到用户界面线程(主线程),以避免阻塞UI,保持其流畅性。 Qt库提供了QThread类来支持多线程编程。子线程通常用于...

    如何从子线程更新主线程数据

    在多线程编程中,尤其是使用VC++进行开发时,如何有效地从子线程更新主线程的数据是一个重要的问题。这涉及到线程间通信(Thread Communication)的概念,它确保了不同线程之间的协作和数据同步。在Windows环境中,...

    Visual C++源代码 22 如何从子线程更新主线程数据

    Visual C++源代码 22 如何从子线程更新主线程数据Visual C++源代码 22 如何从子线程更新主线程数据Visual C++源代码 22 如何从子线程更新主线程数据Visual C++源代码 22 如何从子线程更新主线程数据Visual C++源代码...

    c#子线程如何读取及设置主线程ui的值

    c#子线程如何读取及设置主线程ui的值,自己录的一个小视频,方便理解,比较菜鸟的方法,请勿喷!

    java 子线程通过观察者模式通知主线程

    子线程与主线程之间的通信方式有很多种,如使用共享变量、wait/notify机制、Future和Callable接口等。而观察者模式(Observer Pattern)则是一种设计模式,它允许一个对象的状态变化自动通知其他依赖该对象的对象。...

    子线程任务发生异常,主线程事务如何回滚

    子线程任务发生异常,主线程事务如何回滚? 本文将详细探讨当子线程任务发生异常时,如何让主线程捕获到该异常并进行事务的回滚。下面将从多线程编程的基础知识、线程池的使用、异常捕获三个方面进行阐述。 一、多...

    Android两个子线程之间的通信

    本文将深入探讨如何在Android环境中实现两个子线程之间的通信。 首先,理解Android线程模型至关重要。主线程,也称为UI线程,负责处理用户界面的更新和事件响应。为了不阻塞主线程,我们通常会在子线程中执行耗时...

    C#子线程刷新主线程示例源码20121128

    C#子线程刷新主线程示例源码 功能介绍: 使用线程操作 1、实时显示当前时间 2、输入加数和被加数,自动出现结果 技术特点: 使用了多线程实现了子线程刷新主线程 ,使用委托刷新主线程。 注意: 开发环境为...

    C#子线程更新UI控件的方法实例总结

    由于UI界面通常运行在主线程中,为保证用户界面的响应性和避免线程冲突,我们需要遵循特定的规则来安全地更新控件。本文将详细介绍两种在子线程中更新UI控件的常用方法。 **1. 使用控件自身的Invoke/BeginInvoke...

    C# 主线程显示数据,子线程获取数据

    本主题聚焦于如何利用“异步委托”在主线程中显示数据,同时在子线程中获取这些数据,以保证界面的响应性和程序的流畅性。 异步编程是解决UI线程阻塞问题的有效手段,它允许我们执行长时间运行的任务而不会冻结用户...

    子线程操作主线程的示例

    在多线程编程中,子线程与主线程的交互是一个常见的需求,特别是在GUI应用程序中。主线程通常负责用户界面的更新和事件处理,而子线程则用于执行耗时的任务,以避免阻塞UI。本示例将深入探讨如何在Java或C#等支持多...

    C++ thread退出线程 多线程 子线程控制退出主线程 window VS2017 Debug Error! Abort() has been called

    C++ thread退出线程 多线程 子线程控制退出主线程 window VS2017 Debug Error! Abort() has been called. C++ thread退出线程 多线程 子线程控制退出主线程 window VS2017 Debug Error! Abort() has been called.

    安卓UI线程和子线程通讯更新UI实例

    在Android应用开发中,UI线程(也称为主线程)负责处理用户交互和绘制界面,而子线程通常用于执行耗时操作,如网络请求、数据处理等。由于Android系统的安全机制,直接在子线程中修改UI是不允许的,因此我们需要通过...

    Qt子线程更新数据发到主线程显示.rar

    然而,由于GUI(图形用户界面)组件的设计原则,子线程不能直接修改主UI(用户界面)元素,因为这可能导致界面的不稳定性。为了解决这个问题,Qt提供了一种安全的方式来实现子线程与主线程之间的通信,确保UI的正确...

    Handler主线程于子线程,子线程与子线程,主线程到子线程消息传递

    Handler消息传递详解,子线程到子线程,主线程到子线程,子线程到主线程 三种消息,Looper,Handler工作机制详解 https://blog.csdn.net/shoneworn/article/details/80447651

    如何从子线程更新主线程数据实例C#.net源代码编写

    在C#.NET编程中,多线程是提升应用程序性能和响应性的重要手段。然而,当涉及到用户界面(UI)更新时,线程间通信(特别是从子线程到主线程)变得至关重要,因为Windows Forms和WPF等UI框架通常不是线程安全的。本...

    子线程创建界面组件

    在编程领域,尤其是在GUI(图形用户界面)应用开发中,"子线程创建界面组件"是一个重要的主题。这个话题涉及到多线程技术以及如何在非主线程中安全地构建和更新用户界面。以下是对这个主题的详细解释: 1. **线程与...

Global site tag (gtag.js) - Google Analytics