1. 程式人生 > >Android Handler 詳解

Android Handler 詳解

Handler適用於執行緒間互動的一種機制。牽扯到四個類:Handler,Looper,MessageQueue,Message。
這四個類關係如下圖所示:
這裡寫圖片描述
這個圖自己畫的,比較簡易,但是很能說明他們的關係
Handler:用於執行緒之間傳送訊息,一般Handler在主執行緒中被建立,而後和UI執行緒繫結。其他子執行緒完成了耗時任務需要使用“sendMessage”傳送訊息到訊息佇列。
MessageQueue:訊息佇列,先進先出原則。
Looper:訊息佇列管理者,不停的迴圈檢查MessageQueue內的訊息,併發送到主執行緒。
Message:訊息物件,存放各種資訊。
PS:
1、Handle在所在的執行緒必須擁有Looper,否則會報異常。一般可以直接在UI執行緒使用,因為UI執行緒有MyLooper 物件,而新的子執行緒卻沒有。
2、每個執行緒可以擁有多個Handler物件,卻只能有一個Looper物件。看下面的原始碼就知道了,如果有了Looper再建立會丟擲異常。
這裡寫圖片描述


3、在其他子執行緒中若想使用需要呼叫Looper的prepare()方法來初始化當前執行緒的Looper,然後執行loop()方法操作訊息佇列,如下圖。
這裡寫圖片描述
4、Looper的loop方法內有一個死迴圈用於檢測訊息佇列,當訊息佇列沒有訊息的時候,looper會進入休眠狀態,當有訊息入隊的時候會被喚醒。