Android消息机制深度解析:Message、MessageQueue、Looper与Handler
需积分: 15 7 浏览量
更新于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线程发送更新界面的请求,从而实现了异步编程。"
点击了解资源详情
点击了解资源详情
点击了解资源详情
2021-10-11 上传
187 浏览量
348 浏览量
185 浏览量
121 浏览量
333 浏览量
xiongzhizong
- 粉丝: 0
- 资源: 6
最新资源
- 带日历的VB圆形的模拟时钟代码
- apache-maven-3.6.0-bin.rar
- delphi人才信息管理系统.zip
- 涂料、裱煳、刷浆木材表面施涂溶剂型混色涂料施工工艺标准
- react-advance
- personal-rank-implemented-by-CPP
- Onliner.by конвертер цен-crx插件
- 新疆某钢厂钢结构厂房工程施工组织设计
- 粤语报时示例.rar
- linux-sk:-基于ZEN的内核,具有其他功能
- Определение CMS - iTrack-crx插件
- 密码学:国王密码学课程的python游乐场
- github-slideshow:机器人提供动力的培训资料库
- 价格区间滑块
- fsm
- 51单片机驱动12864液晶显示(有字库)程序(汇编)keil工程文件C源文件