线程通信、ActivityThread及Thread类是理解Android线程管理的关键。 线程,作为CPU调度资源的基本单位,在Android等针对嵌入式设备的操作系统中,有着非常重要和基础的作用。本小节主要从以下三个方面进行分析: 《Andr ...
线程通信、ActivityThread及Thread类是理解Android线程管理的关键。
线程,作为CPU调度资源的基本单位,在Android等针对嵌入式设备的操作系统中,有着非常重要和基础的作用。本小节主要从以下三个方面进行分析:
- 《Android线程管理——线程通信》
- 《Android线程管理——ActivityThread》
- 《Android线程管理——Thread》
一、Handler、MessageQueue、Message及Looper四者的关系
在开发Android多线程应用时,Handler、MessageQueue、Message及Looper是老生常谈的话题。但想彻底理清它们之间的关系,却需要深入的研究下它们各自的实现才行。首先,给出一张它们之间的关系图:
- Looper依赖于MessageQueue和Thread,因为每个Thread只对应一个Looper,每个Looper只对应一个MessageQueue。
- MessageQueue依赖于Message,每个MessageQueue对应多个Message。即Message被压入MessageQueue中,形成一个Message集合。
- Message依赖于Handler进行处理,且每个Message最多指定一个Handler来处理。Handler依赖于MessageQueue、Looper及Callback。
从运行机制来看,Handler将Message压入MessageQueue,Looper不断从MessageQueue中取出Message(当MessageQueue为空时,进入休眠状态),其target handler则进行消息处理。因此,要彻底弄清Android的线程通信机制,需要了解以下三个问题:
- Handler的消息分发、处理流程
- MessageQueue的属性及操作
- Looper的工作原理
1.1 Handler的消息分发、处理流程
Handler主要完成Message的入队(MessageQueue)和处理,下面将通过Handler的源码分析其消息分发、处理流程。首先,来看下Handler类的方法列表:
从上图中可以看出,Handler类核心的方法包括:1)构造器;2)分发消息;3)处理消息;4)post发送消息;5)send发送消息;6)remove消息和回调。
首先,从构造方法来看,构造器的多态最终通过调用如下方法实现,即将实参赋值给Handler类的内部域。
final MessageQueue mQueue;final Looper mLooper;final Callback mCallback;final boolean mAsynchronous;public Handler(Looper looper, Callback callback, boolean async) { mLooper = looper; mQueue = looper.mQueue; mCallback = callback; mAsynchronous = async;}
原标题:Android线程管理线程通信
关键词:Android
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。