歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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. }  
Copyright © Linux教程網 All Rights Reserved