Message、Handler、Message Queue、Looper之間的關係

在單線程模型下,爲了解決線程通訊問題,Android設計了一個通訊機制。Message Queue(消息隊列), 線程間的通訊能夠經過Message Queue、Handler和Looper進行信息交換。下面將對它們進行逐一介紹:函數

1. Message oop

Message消息,線程間交流的信息,處理數據後臺線程須要更新UI,則發送Message內含一些數據給UI線程。post

2. Handler 線程

Handler處理者,是Message的主要處理者,負責Message的發送,Message內容的執行處理。後臺線程就是經過傳進來的 Handler對象引用來sendMessage(Message)。而使用Handler,須要implement 該類的 handleMessage(Message)方法,它是處理這些Message的操做內容,例如Update UI。一般須要子類化Handler來實現handleMessage方法。設計

3. Message Queue code

Message Queue消息隊列,用來存放經過Handler發佈的消息,按照先進先出執行。對象

每一個message queue都會有一個對應的Handler。Handler會向message queue經過兩種方法發送消息:sendMessage或post。這兩種消息都會插在message queue隊尾並按先進先出執行。但經過這兩種方法發送的消息執行的方式略有不一樣:經過sendMessage發送的是一個message對象,會被 Handler的handleMessage()函數處理;而經過post方法發送的是一個runnable對象,則會本身執行。隊列

4. Looper get

Looper是每條線程裏的Message Queue的管家。Android沒有Global的Message Queue,而Android會自動替主線程(UI線程)創建Message Queue,但在子線程裏並無創建Message Queue。因此調用Looper.getMainLooper()獲得的主線程的Looper不爲NULL,但調用Looper.myLooper() 獲得當前線程的Looper就有可能爲NULL。消息隊列

相關文章
相關標籤/搜索