理解Android的异步消息处理机制

在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)

你可能感兴趣的:(理解Android的异步消息处理机制)