Handler处理长时间事件

当我们在处理一些比较长时间的事件时候,比如读取网络或者数据库的数据时候,就要用到Handler,有时候为了不影响用户操作应用的流畅还要开多一个线程来区别UI线程,在新的线程里面处理长时间的操作。开发的时候遇到数据处理都可以这样用handler,灵活修改一下就可以做各种效果了。

第一步:ProgressDialog弹出旋转框来提示长时间操作。

第二步:开多一个线程处理长时间操作,这里让线程睡觉10秒。

第三部:长时间操作结束后给handler发送一个消息,可以是一个整数,如果这个Activity有多个handler,可以定义多个整数成员变量来区别不同的消息。

第四步:在定义Handler的handlerMessage方法里面把ProgressDialog对象dismiss()掉,把弹出框消灭表示操作完成。

代码如下:

public class Android_HandlerActivity extends Activity {
    /** Called when the activity is first created. */
	//声明变量
	private Button b1;
	private ProgressDialog pd;
	//定义handler对象
	private Handler handler = new Handler(){
		//当有消息发送出来的时候就执行Handler的这个方法
		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			super.handleMessage(msg);
			//只要执行到这里就关闭对话框
			pd.dismiss();
		}
		
	};
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //Resources res = this.getResources();
        
      //查看UI组件所在的线程名
      Log.i("tag", "onCreate()-->"+Thread.currentThread().getName());


      //定义UI组件
      b1= (Button)findViewById(R.id.Button01);
      
      //给按钮绑定单击事件监听器
      b1.setOnClickListener(new View.OnClickListener() {
		
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			//点击按钮后去处理长耗时操作
			processThread();
		}
      });
    }
	protected void processThread() {
		// TODO Auto-generated method stub
		//构建一个下载进度条
		pd= ProgressDialog.show(Android_HandlerActivity.this, "下载文件", "正在下载……");
		Log.i("tag", "processThread()-->"+Thread.currentThread().getName());
		new Thread(){


			@Override
			public void run() {
				Log.i("tag", "run()-->"+Thread.currentThread().getName());


				//在新线程里执行长耗时方法
				longTimeMethod();


				//执行完毕后给handler发送一个空消息
				handler.sendEmptyMessage(0);
			}
			
		}.start();
	}
	//模拟下载文件的长耗时方法
	protected void longTimeMethod() {
		// TODO Auto-generated method stub
		try {


			Log.i("tag", "longTimeMethod-->"+Thread.currentThread().getName());


			Thread.sleep(10000);


			} catch (InterruptedException e) {


			e.printStackTrace();


			}
	}
}
main.xml只是一个简单的Button:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/Button01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

</LinearLayout>
最后运行图片如下:

Handler处理长时间事件_第1张图片


你可能感兴趣的:(Handler处理长时间事件)