handler机制的原理
andriod提供了Handler 和 Looper 来满足线程间的通信。Handler先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(MessageExchange)。
1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列)。
2)Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到MessageQueue里;或者接收Looper从Message Queue取出)所送来的消息。
3) Message Queue(消息队列):用来存放线程放入的消息。
4)线程:UIthread 通常就是main thread,而Android启动程序时会替它建立一个MessageQueue。
1.Handler创建消息
每一个消息都需要被指定的Handler处理,通过Handler创建消息便可以完成此功能。Android消息机制中引入了消息池。Handler创建 消息时首先查询消息池中是否有消息存在,如果有直接从消息池中取得,如果没有则重新初始化一个消息实例。使用消息池的好处是:消息不被使用时,并不作为垃 圾回收,而是放入消息池,可供下次Handler创建消息时使用。消息池提高了消息对象的复用,减少系统垃圾回收的次数。消息的创建流程如图所示。
2.Handler发送消息
UI主线程初始化第一个Handler时会通过ThreadLocal创建一个Looper,该Looper与UI主线程一一对应。使用 ThreadLocal的目的是保证每一个线程只创建唯一一个Looper。之后其他Handler初始化的时候直接获取第一个Handler创建的 Looper。Looper初始化的时候会创建一个消息队列MessageQueue。至此,主线程、消息循环、消息队列之间的关系是1:1:1。
Handler、Looper、MessageQueue的初始化流程如图所示:
Hander持有对UI主线程消息队列MessageQueue和消息循环Looper的引用,子线程可以通过Handler将消息发送到UI线程的消息队列MessageQueue中。
3.Handler处理消息
UI主线程通过Looper循环查询消息队列UI_MQ,当发现有消息存在时会将消息从消息队列中取出。首先分析消息,通过消息的参数判断该消息对应的Handler,然后将消息分发到指定的Handler进行处理。
子线程通过Handler、Looper与UI主线程通信的流程如图所示。
转自:http://blog.csdn.net/itachi85/article/details/8035333
相关文章
- Java Annotation 及几个常用开源项目注解原理简析
- RIP路由协议及工作原理
- Nestjs模块机制的概念和实现原理
- 高性能Web动画和渲染原理系列(1)——CSS动画和JS动画
- 深入比特币原理(四)——锁定脚本(locking script)与解锁脚本(unlocking script)
- qq安全原理
- JVM加载class文件的原理机制
- 深入理解Redis主键失效原理及实现机制(转)
- JVM加载class文件的原理机制
- Asp.net WebPages框架运行原理浅析{转}
- MyBatis的执行原理详细介绍
- redis主从同步原理---原生以及 基于binlog的主从同步不
- 红黑树原理以及插入、删除算法 附图例说明
- Atitit webdav 原理详细 概念补充 2.WebDAV的优势: 一套自己定义的安全完善的身份验证机制。 穿墙 HTTPS传送数据 使用一个TCP连接传送所有文件 方便的客户端工
- Atitit 异常处理之道 attilax著.docx 1. 概念2 1.1. 异常机制的设计原理2 1.2. Atitit.异常机制的设计原理.docx java2 1.3. JVM看Exc
- Atitit事件代理机制原理 基于css class的事件代理
- Atitit 异常机制与异常处理的原理与概论
- Atitit.软件与编程语言中的锁机制原理attilax总结
- Atitit.病毒木马的快速扩散机制原理nio 内存映射MappedByteBuffer
- Atitit.病毒木马的快速扩散机制原理nio 内存映射MappedByteBuffer
- Atitit.sql ast 表达式 语法树 语法 解析原理与实现 java php c#.net js python
- Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构
- Atitit.异常机制的设计原理
- Angular @Inject 注解的实际应用例子和工作原理浅析
- Android Handler机制原理解析
- Android Handler.post(Runnable r)再一次梳理Android的消息机制(以及handler的内存泄露)
- 【项目实战】SpringAOP入门介绍,原理与使用
- Flutter之Widget 更新机制原理浅析
- 【ChatGPT】《ChatGPT 算法原理与实战》1: 引言:从 CNN、RNN 到 Transformers 架构、自注意力机制(图文+数学公式+代码实例详解)
- Java同步机制之Monitor监视器与syncrhoized实现原理
- Zookeeper一致性协议原理Zab