3.3 Handler
Binder/Socket用于进程间通信,而Handler消息机制用于同进程的线程间通信,Handler消息机制是由一组MessageQueue、Message、Looper、Handler共同组成的,为了方便且称之为Handler消息机制 。
有人可能会疑惑,为何Binder/Socket用于进程间通信,能否用于线程间通信呢?答案是肯定,对于两个具有独立地址空间的进程通信都可以,当然也能用于共享内存空间的两个线程间通信,这就好比杀鸡用牛刀 。接着可能还有人会疑惑,那handler消息机制能否用于进程间通信?答案是不能,Handler只能用于共享内存地址空间的两个线程间通信,即同进程的两个线程间通信 。很多时候,Handler是工作线程向UI主线程发送消息,即App应用中只有主线程能更新UI,其他工作线程往往是完成相应工作后,通过Handler告知主线程需要做出相应地UI更新操作,Handler分发相应的消息给UI主线程去完成,如下图:

文章插图
由于工作线程与主线程共享地址空间,即Handler实例对象mHandler位于线程间共享的内存堆上,工作线程与主线程都能直接使用该对象,只需要注意多线程的同步问题 。工作线程通过mHandler向其成员变量MessageQueue中添加新Message,主线程一直处于loop()方法内,当收到新的Message时按照一定规则分发给相应的handleMessage()方法来处理 。所以说,Handler消息机制用于同进程的线程间通信,其核心是线程间共享内存空间,而不同进程拥有不同的地址空间,也就不能用handler来实现进程间通信 。
上图只是Handler消息机制的一种处理流程,是不是只能工作线程向UI主线程发消息呢,其实不然,可以是UI线程向工作线程发送消息,也可以是多个工作线程之间通过handler发送消息 。更多关于Handler消息机制文章:
- Android消息机制-Handler(framework篇)(http://gityuan.com/2015/12/26/handler-message-framework/)
- Android消息机制-Handler(native篇)(http://gityuan.com/2015/12/27/handler-message-native/)
- Android消息机制3-Handler(实战)(http://gityuan.com/2016/01/01/handler-message-usage/)
核心提纲
博主对于Android从系统底层一路到上层都有自己的理解和沉淀,通过前面对系统启动的介绍,相信大家对Android系统有了一个整体观 。接下来需抓核心、理思路,争取各个击破 。后续将持续更新和完善整个大纲,不限于进程、内存、IO、系统服务架构以及分析实战等文章 。
当然本站有一些文章没来得及进一步加工,有时间根据大家的反馈,不断修正和完善所有文章,争取给文章,再进一步精简非核心代码,增加可视化图表以及文字的结论性分析 。基于Android 6.0的源码,专注于分享Android系统原理、架构分析的原创文章 。
建议阅读群体: 适合于正从事或者有兴趣研究Android系统的工程师或者技术爱好者,也适合Android App高级工程师;对于尚未入门或者刚入门的App工程师阅读可能会有点困难,建议先阅读更基础的资料,再来阅读本站博客 。
看到Android整个系统架构是如此庞大的, 该问如何学习Android系统, 以下是我自己的Android的学习和研究论,仅供参考如何自学Android(http://gityuan.com/2016/04/24/how-to-study-android/) 。
从整理上来列举一下Android系统的核心知识点概览:

文章插图
4.1 系统启动系列

文章插图
Android系统启动-概述:
推荐阅读
- 探索 Linux 上的 /run
- Java扫码点餐小程序源码 智慧点餐系统源码 点餐小程序 外卖订餐
- Mac如何重装系统?
- 秋季护唇“大作战”,掌握这几招才能美美哒
- 掌握这3个买基金小技巧 买卖基金就这几招
- 掌握这6个冲泡法则让红茶更好喝
- 掌握这5个诀窍,红茶这样泡怎能不好喝
- 怎么冲泡出红茶独有的桂圆味,掌握这七大点即可
- 系统维护中by西西特 系统崩溃中
- 最实用的20个 Python系统运维常用库,学Python要认真
