理解Android的异步消息处理机制
16lz
2021-01-26
在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.handleMessageandroid.os.Handler.dispatchMessageandroid.os.Looper.loop android.app.ActivityThread.mainjava.lang.reflect.Method.invoke(Native Method) java.lang.reflect.Method.invokecom.android.internal.os.ZygoteInit$MethodAndArgsCaller.runcom.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)
更多相关文章
- SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
- Android(安卓)UI设计总结
- DialogFragment的使用
- 使用ContentProvider(内容提供者)共享数据
- Android以太网卡配置启动流程和双网卡同时支持的实现
- Preference 使用详解
- IPC 机制(上)
- android根目录获取
- 关于android双屏异显的一些总结和卡死的一些解决方法