理解Android的異步消息處理機制

在Android里,Looper將一個普通的線程變成一個Looper線程,所謂Looper線程就是一個不停運行在一個死循環(huán)(loop)里的線程。Android Framework實現(xiàn)了Looper,是用來建立支持用戶界面的底層機制。

要理解這一機制,需要深入框架層源碼理解Looper相關的Java和C++的類:
android.os.Looper.java
android.os.Handler
android.os.MessageQueue
android.os.Message

我們首先分析一下android.os.Looper.java這個類,它是Android異步消息處理機制的核心類。
對于Looper.java來說,關鍵在于讀懂幾個關鍵的方法:
public static void prepare();
public static void loop();
public void quit();

這三個方法代表了消息處理線程生命周期的三個階段

public static void loop()

來看一個典型的消息處理:

android.app.ActivityThread$H.handleMessage
android.os.Handler.dispatchMessage
android.os.Looper.loop                                              
android.app.ActivityThread.main
java.lang.reflect.Method.invoke(Native Method) 
java.lang.reflect.Method.invoke
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:705) 

這是主線程進行消息處理時在線程的堆棧上建議的方法調用序列。

android.os.Message.java

該類最關鍵的方法如下:
public static Message obtain()
public void recycle()
public Handler getTarget()

android.os.Handler

Handler重要的方法有:
public boolean sendMessageAtTime(Message msg, long uptimeMillis)

MessageQueue

MessageQueue核心的方法:
final Message next()
final boolean enqueueMessage(Message msg, long when)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容