上次简单的介绍了handler的消息机制, handler将message发送给messageQueue, looper不停的在messageQueue中取出message并执行相应的操作!
这次我们从码Android的底层源分析Handler的消息机制!
首先, 我们先讲Handler和Message之间的联系,Message是传递消息的载体, Handler是发送消息的工具, 创建Message和Handler的方式有很多, 关联关系很是巧妙, 读者可以查看下文对Android源码的解读可知!
我们知道, Handler是将message发送到messageQueue中的, 然后Looper会一直循环处理messageQueue中的message中的.那么Looper和messageQueue是何时创建的呢?
Looper的构造函数是private的, 目的是让我们调用它的prepare方法获取一个Looper的对象, 在prepare方法(读者具体可查看源码)中首先会获取保存在本地线程中的Looper对象, 如果存在会抛出异常不让我们再创建, 如果不存在会创建一个Looper对象并保存在本地线程中, 也就是说: 一个线程中只会有一个Looper
在Looper的构造函数中会创建一个messageQueue, 保存在Looper对象中, 同时也说明了: 一个线程中只会有一个messageQueue
通过一个Looper和一个messageQueue解决了多线程访问共享数据的安全问题了!
创建Handler的时候, Handler内部会去获取存放于本地线程中的Looper, 并且会从Looper中获取messageQueue, 当Handler发送消息是, 就会向这个messageQueue中发送消息了!
1 | /** |
注:文章中可能有很多错误,也有可能出现无法使用的情况,因为此技术博文是我的学习笔记,我只是记载一些看到或者想到东西,所以我不推荐你来按照该博文的内容进行直接使用。谢谢~~