当前位置:操作系统 > 安卓/Android >>

Handler处理长时间事件

当我们在处理一些比较长时间的事件时候,比如读取网络或者数据库的数据时候,就要用到Handler,有时候为了不影响用户操作应用的流畅还要开多一个线程来区别UI线程,在新的线程里面处理长时间的操作。开发的时候遇到数据处理都可以这样用handler,灵活修改一下就可以做各种效果了。
第一步:ProgressDialog弹出旋转框来提示长时间操作。
第二步:开多一个线程处理长时间操作,这里让线程睡觉10秒。
第三部:长时间操作结束后给handler发送一个消息,可以是一个整数,如果这个Activity有多个handler,可以定义多个整数成员变量来区别不同的消息。
第四步:在定义Handler的handlerMessage方法里面把ProgressDialog对象dismiss()掉,把弹出框消灭表示操作完成。
代码如下:
[java]
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:
[html]
<?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> 
最后运行图片如下:


\





摘自 heirenheiren的专栏
补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,