Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android學習筆記(38):Handler消息傳遞處理機制

Android學習筆記(38):Handler消息傳遞處理機制

編輯:關於Android編程

先說為什麼需要Handler:

Android的主線程又叫UI線程,用於處理與UI相關的時間。Android只允許在主線程中修改UI組件,當我們在其他線程中需要修改UI界面時,就需要發送消息到主線程,再由主線程來處理UI的修改事件。

在UI線程中執行耗時操作或網絡操作,否則會拋出ANR (“Application Not Responding”)異常或NetworkOnMainThreadExceptionwill異常。

在這些時候,我們用Handler來進行消息的傳遞和處理。

下面來介紹Handler類:

(1)兩個主要功能:

1.在非主線程中發送消息。

2.在主線程中獲取、處理消息。

(2)一起工作的幾個組件

Message:Handler接收和處理的消息對象

Looper:每個線程有一個Looper,負責管理MessageQueue。它的loop方法不斷從MessageQueue中抽取Message交給Handler處理。

MessageQueue:由Looper負責管理的消息隊列,用FIFO的方式管理Message。Looper的構造器中會創建一個MessageQueue對象。

(3)Handler用於發送、處理Message的方法:

void handleMessage(Message msg):處理消息的方法,需要自己重寫。

boolean hasMessages(int what, Object object):檢查消息隊列中是否包含what屬性為指定值且object屬性為指定對象的消息。

boolean hasMessages(int what):檢查消息隊列中是否包含what屬性為指定值的消息。

Message obtainMessage():獲取消息。

boolean sendEmptyMessage(int what):發送空消息。

boolean sendEmptyMessageAtTime(int what, long uptimeMillis):在指定的時間發送空消息。

boolean sendEmptyMessageDelayed(int what, long delayMillis):一段時間後發送空消息。

boolean sendMessage(Message msg):發送消息。

boolean sendMessageAtFrontOfQueue(Message msg):消息加入到消息隊列的最前面。

boolean sendMessageAtTime(Message msg, long uptimeMillis):在指定時間發送消息。

boolean sendMessageDelayed(Message msg, long delayMillis):一段時間後發送消息。

(4)Handler的消息處理機制:

開發者需要重寫Handler類的消息處理方法,但新啟動的線程發送消息時,消息會發送到與之關聯的MessageQueue,Handler不斷從MessageQueue中獲取並處理消息,在此時調用消息處理方法。

(5)利用Handler處理其他線程中需要作出的UI修改:

Android系統在啟動的時候會為Activity創建一個消息隊列和消息循環(Looper)。為了處理非主線程中的UI處理要求,我們首先在新線程中發送消息,然後在主線程中重寫Handler的handleMessage()方法實現UI修改的要求。

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