【消息通信】Android消息驱动机制
来源:互联网 发布:飞跃 推荐 知乎 编辑:程序博客网 时间:2024/05/23 20:13
消息驱动机制
Android扩展了线程的退出机制,在启动线程时,可以首先在线程内部创建一个消息队列,然后让线程进入一个无限循环中,在这个无限循环中,线程会不断检查消息队列中是否有消息。如果需要线程执行某个任务,便向线程的消息队列中发送对应任务的消息,线程在无限循环中检查到消息队列中有消息到来,便会获取该消息,进而执行该消息对应的处理流程。如果线程的消息队列中没有消息,线程便进入等待状态,等待消息的到来。通过消息控制线程的执行。
涉及的概念:
1.消息:用于表示一个可执行任务。通常在消息内部会封装消息的标识、执行时间、数据等。
2.消息队列:消息创建完毕后,通过消息处理器将其发送到线程的消息队列中,消息队列维护当前可执行消息的列表。
3.消息循环:当前线程进入消息循环中遍历消息队列获取消息,然后根据消息标识通知消息处理器及执行对应的函数。
4.消息处理器。
Looper线程
为了实现消息驱动机制,Android基于Java标准线程模型开发了Looper线程。
Looper线程与标准线程的区别:
1.Looper线程的run方法执行后并不会立即退出,而是进入一个loop消息循环中等待消息的到来,然后根据消息类型分别作出不同的处理,好处是避免了频繁创建/销毁线程所带来的开销。
class LooperThread extends Thread{ public Handler mHandler; public void run(){ Looper.prepare(); mHandler = new Handler(){ public void handleMessage(Message msg){} }} Looper.loop();}
Handler:handler是Lopper线程的消息处理器,创建并初始化Handler是Looper线程运行过程中的关键步骤之一。Hnadler承担了消息驱动机制的发送消息和处理消息两部分工作。
在Handler对象的创建中,其所作的工作是将之前在本线程中创建的Looper和MessageQueue关联到其成员变量中,这样,Lopper、MessageQueue和Handler就连接到一起了。其中Handler的成员变量mMessenger用于跨进程发送消息。//TODO(Handler的代码)
通过Handler post和send方法发送的消息,最终会存入MessageQueue内部的消息队列mMessage中,mMessage是Message类型的对象,其内部的next成员变量引用了下一条Message。Message在消息队列中是按照执行时间(when)排列的,因此消息入列前有两大类的处理情况:1.立即处理的;2.新加入消息的处理时间要晚于消息队列头部消息的处理时间,需要遍历消息队列,找到新消息的插入位置。
Message:消息的载体。
- 【消息通信】Android消息驱动机制
- 深入浅出Android消息通信机制
- Android - 消息机制与线程通信
- Android中线程间通信:消息机制
- Android通信组件_消息机制_消息传送
- 进程通信-消息机制 .
- 消息通信机制NSNotificationCenter
- 消息通信机制NSNotificationCenter
- 消息通信机制NSNotificationCenter
- 消息通信机制NSNotificationCenter
- 消息通信机制NSNotificationCenter
- 消息通信机制NSNotificationCenter
- NSNotification消息通信机制
- 消息通信机制
- windows消息驱动机制
- 时间消息驱动机制
- 消息驱动机制
- Android进程间通信--消息机制及IPC机制实现
- xargs的简单使用
- <jsp:include> 和<c:import>
- android:persistent="true"相关--保证不被系统kill掉
- MATLAB学习笔记(五):符号计算(符号矩阵+代数方程组求解)
- CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\web
- 【消息通信】Android消息驱动机制
- 装上ubuntu之后新手装什么
- 项目一--输出链表中是否有值为X的结点
- HTTP错误 404.17 - Not Found" IIS 7.5 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理
- 国际C语言混乱代码大赛所有得奖源码 1984----研究分析
- 通知
- 职场中各职位英文缩写
- VolleyLog-学习Google封装的Log
- UVA 11437 || Triangle Fun