Android消息机制深度解析:Message、MessageQueue、Looper与Handler
需积分: 15 46 浏览量
更新于2024-09-15
收藏 88KB DOC 举报
"Message, MessageQueue, Looper, 和 Handler 是Android系统中处理线程间通信的核心组件,尤其在UI线程与工作线程的交互中扮演着重要角色。它们一起构建了一个消息传递机制,使得应用程序能够以异步的方式处理事件和更新界面。
1、Message(消息):
Message是信息的载体,它封装了需要传递的数据和执行的操作。Message对象通常通过Message类的静态方法`obtain()`来获取,这个方法会尝试从Message池中复用已存在的Message实例,以节省内存。Message池的存在是为了避免频繁创建和销毁对象导致的性能开销。Message提供了设置目标Handler、携带数据以及设置消息优先级等方法。当不再需要Message时,可以通过Handler的`removeMessages()`方法将其从MessageQueue中移除并放回Message池。
2、MessageQueue(消息队列):
MessageQueue是一个先进先出(FIFO)的数据结构,用于存储待处理的消息。每个线程最多只能有一个MessageQueue,主线程在创建时会默认创建一个与之关联的Looper和MessageQueue。其他线程需要手动调用Looper的`prepare()`方法来创建MessageQueue。MessageQueue的主要任务是管理Message的入队和出队,以及配合Looper进行消息的处理。
3、Looper(循环器):
Looper是MessageQueue的管理者,它负责不断检查MessageQueue是否有新消息到来。每个Looper都与一个线程绑定,并且每个线程只有一个Looper。Looper的`loop()`方法会进入一个无限循环,不断地从MessageQueue中取出Message并分发给对应的Handler进行处理。主线程的Looper会在应用启动时自动初始化,而其他线程需要通过`prepare()`手动初始化,然后通过`loop()`开始消息循环。
4、Handler(处理器):
Handler是Message的接收者和处理器,它与特定的线程(通常是UI线程)相关联。开发者通过Handler发送Message到MessageQueue,Looper会从队列中取出这些Message并交给相应的Handler进行处理。Handler提供了`sendMessage()`和`post()`等方法来发送Message或Runnable对象,以及`handleMessage()`方法来处理接收到的消息。
总结来说,MessageQueue存储消息,Looper负责从队列中取出消息并分发,Handler接收并处理消息。这种机制确保了UI线程的流畅性,因为所有对UI的操作都在同一个线程中进行,避免了线程同步的问题。而在工作线程中处理耗时任务后,通过Message和Handler可以安全地向UI线程发送更新界面的请求,从而实现了异步编程。"
2020-08-27 上传
2021-10-11 上传
2013-11-22 上传
2011-09-26 上传
2021-01-04 上传
2020-09-04 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
xiongzhizong
- 粉丝: 0
- 资源: 7
最新资源
- testParameterApp_C#_
- ApioServer1.0_Alex:新的Apio Server版本通过Cloud Sync,用户,配置和其他功能进行了改进
- SYD8811-UART1-Pass-back-20221121-113247
- CMakeExp:CMake 语言实验
- 11Protues篇.zip电子设计大赛资料下载
- 陶瓷单色自动画线机.zip机械设计毕业设计
- 基于C++和Opencv的传统手势识别.zip
- Aspect-Oriented PHP-开源
- 10完整方案篇.zip电子设计大赛资料下载
- settings.zip
- 高斯求积代码matlab-Bipartite_Continuous_Variable_Quantum_Information_Toolbox:
- nis_comments
- 某海林彬塑料制品有限公司#生产车间钢结构工程施工组织设计-土木工程建造设计.zip
- gs-accessing-data-mysql-master_javamysql_
- 基于Inter Sense技术的一个手势识别控制工具.zip
- 双螺杆挤出机.zip机械设计毕业设计