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

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. Android(安卓)UI设计总结
  3. DialogFragment的使用
  4. 使用ContentProvider(内容提供者)共享数据
  5. Android以太网卡配置启动流程和双网卡同时支持的实现
  6. Preference 使用详解
  7. IPC 机制(上)
  8. android根目录获取
  9. 关于android双屏异显的一些总结和卡死的一些解决方法

随机推荐

  1. 建模分析之机器学习算法(附python&R代码)
  2. Python新式类和经典类的区别
  3. python--继承--方法的重写---和父类的扩
  4. centos 7 mini版中安装Python3.x
  5. python小练习-对序列分组2
  6. Python csv。读者:我如何返回到文件的顶
  7. 大家好我刚来到请多帮助呀
  8. Python入门:函数加括号和不加括号的区别
  9. 与kubectl exec运行后台进程
  10. 人工智能和机器学习领域开源项目