Android入门:Handler


一、Handler介绍

在一个线程中存在一个消息队列,当消息队列中存在消息时,Handler就会处理这些消息;我们考虑一下这种场景:

我们要执行一个耗时很长的业务,执行完后要返回一个结果显示在TextView上,我们在主线程中执行这种业务是否合理呢?

显然是不合理的,因此我们会想到把业务放到子线程中执行,但是Android有个规定:所有更新UI的操作全要在主线程中完成,因此我们要做的就是把子线程执行完的结果传到主线程中并显示,这就需要Handler的帮忙;

比如ProgressBar、TextView的使用都会用到Handler;

当应用5秒内没有响应用户的输入,则会抛出以下错误:

Handler的原理如下:

模板代码:

  1. package org.xiazdong.handler;  
  2.   
  3. public class SampleActivity extends Activity {  
  4.     private Button button;  
  5.     private Handler handler = new Handler(){  
  6.         @Override  
  7.         public void handleMessage(Message msg) {  
  8.             if(msg.what == 1){  
  9.                 //更新UI   
  10.             }  
  11.             if(msg.what == 2){  
  12.                 //更新UI   
  13.             }  
  14.         }  
  15.     };  
  16.     private OnClickListener listener = new OnClickListener() {  
  17.         class ServiceThread extends Thread{  
  18.             private ServiceListener serviceListener = new ServiceListener() {  
  19.                 @Override  
  20.                 public void onService(int current) {//服务监听器   
  21.                     //一边执行,一边发送消息给主线程   
  22.                     handler.sendMessage(msg);  
  23.                 }  
  24.             };  
  25.             @Override  
  26.             public void run() {  
  27.                     //执行业务   
  28.             }  
  29.         }  
  30.         @Override  
  31.         public void onClick(View v) {  
  32.             ServiceThread thread = new ServiceThread(); //子线程执行业务   
  33.             thread.start();  
  34.         }  
  35.     };  
  36.     @Override  
  37.     public void onCreate(Bundle savedInstanceState) {  
  38.         super.onCreate(savedInstanceState);  
  39.         setContentView(R.layout.main);  
  40.         button = (Button)this.findViewById(R.id.button);  
  41.         button.setOnClickListener(listener);  
  42.           
  43.     }  
  44. }  
  • 1
  • 2
  • 下一页

相关内容