在Android里,Looper
将一个普通的线程变成一个Looper
线程,所谓Looper
线程就是一个不停运行在一个死循环(loop)里的线程。Android Framework实现了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)