Handler处理长时间事件

来源:互联网 发布:网络用语word哥 编辑:程序博客网 时间:2024/05/01 17:22

当我们在处理一些比较长时间的事件时候,比如读取网络或者数据库的数据时候,就要用到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的这个方法@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.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() {@Overridepublic 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(){@Overridepublic void run() {Log.i("tag", "run()-->"+Thread.currentThread().getName());//在新线程里执行长耗时方法longTimeMethod();//执行完毕后给handler发送一个空消息handler.sendEmptyMessage(0);}}.start();}//模拟下载文件的长耗时方法protected void longTimeMethod() {// TODO Auto-generated method stubtry {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>
最后运行图片如下:




原创粉丝点击