在Android里纵顾,Looper
將一個普通的線程變成一個Looper
線程,所謂Looper
線程就是一個不停運行在一個死循環(huán)(loop)里的線程栋盹。Android Framework實現(xiàn)了Looper
施逾,是用來建立支持用戶界面的底層機制。
要理解這一機制例获,需要深入框架層源碼理解Looper相關(guān)的Java和C++的類:
android.os.Looper.java
android.os.Handler
android.os.MessageQueue
android.os.Message
我們首先分析一下android.os.Looper.java
這個類汉额,它是Android異步消息處理機制的核心類。
對于Looper.java來說榨汤,關(guān)鍵在于讀懂幾個關(guān)鍵的方法:
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)
這是主線程進行消息處理時在線程的堆棧上建議的方法調(diào)用序列蠕搜。
android.os.Message.java
該類最關(guān)鍵的方法如下:
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)