Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> android Handler介紹,androidhandler介紹

android Handler介紹,androidhandler介紹

編輯:關於android開發

android Handler介紹,androidhandler介紹


Handler使用介紹:

Handler根據接收的消息,處理UI更新。Thread線程發出消息,通知Handler更新UI。

Handler mHandler = new Handler() { 
  public void handleMessage(Message msg) {  
    switch (msg.what) {  
    case 0x1:  
      view.invalidate(); 
      break;  
    }  
    super.handleMessage(msg);  
  }  
};

class UpdateViewThread implements Runnable {  
  public void run() { 
    while (!Thread.currentThread().isInterrupted()) {    
      Message message = new Message();  
      message.what = 0x1;   
      mHandler.sendMessage(message);  
      try {  
        Thread.sleep(200);   
      } catch (InterruptedException e) {  
        Thread.currentThread().interrupt();  
      }  
    }  
  }  

(1)對於線程中的刷新一個View為基類的界面,可以使用postInvalidate()方法在線程中來處理,其中還提供了一些重寫方法比如postInvalidate(int left,int top,int right,int bottom) 來刷新一個矩形區域,以及延時執行,比如postInvalidateDelayed(long delayMilliseconds)或postInvalidateDelayed(long delayMilliseconds,int left,int top,int right,int bottom) 方法,其中第一個參數為毫秒

(2)可以在一個線程的run方法中調用Handler對象的postMessage或sendMessage方法來實現,Android程序內部維護著一個消息隊列,會進行輪詢處理。

(3)在Android中每一個Thread都跟著一個Looper,Looper可以幫助Thread維護一個消息隊列,但是Looper和Handler沒有什麼關系,從源碼中可以看到Android提供了一個Thread繼承類HanderThread可以幫助我們處理,在HandlerThread對象中可以通過getLooper方法獲取一個Looper對象控制句柄,我們可以將這個Looper對象映射到一個Handler中來實現一個線程同步機制,Looper對象的執行需要進行初始化,可以調用Looper.prepare,使用Looper.release方法釋放資源。

(4)對於Android中Handler可以傳遞一些內容,通過Bundle對象可以封裝String、Integer以及Blob二進制對象,我們通過在線程中使用Handler對象的sendEmptyMessage或sendMessage方法來傳遞一個Bundle對象到Handler處理器。對於Handler類提供了重寫方法handleMessage(Message msg) 來判斷,通過msg.what來區分每條信息。將Bundle解包來實現Handler類更新UI線程中的內容實現控件的刷新操作。相關的Handler對象有關消息發送sendXXX相關方法如下,同時還有postXXX相關方法,一個為發送後直接返回,一個為處理後才返回。

(5)在Android中提供了一種有別於線程的處理方式,就是Task以及AsyncTask,從源碼中可以看到是針對Concurrent的封裝,開發人員可以方便的處理這些異步任務。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved