掌握 Android 系统架构,看这一篇就够了!( 三 )

  • zygote:用于孵化进程,system_server创建进程是通过socket向zygote进程发起请求;
  • installd:用于安装App的守护进程,上层PackageManagerService很多实现最终都是交给它来完成;
  • lmkd:lowmemorykiller的守护进程,Java层的LowMemoryKiller最终都是由lmkd来完成;
  • adbd:这个也不用说,用于服务adb;
  • logcatd:这个不用说,用于服务logcat;
  • vold:即volume Daemon,是存储类的守护进程,用于负责如USB、Sdcard等存储设备的事件处理 。
  • 等等还有很多,这里不一一列举,Socket方式更多的用于Android framework层与native层之间的通信 。Socket通信方式相对于binder比较简单,这里省略 。
    3.3 Handler
    Binder/Socket用于进程间通信,而Handler消息机制用于同进程的线程间通信,Handler消息机制是由一组MessageQueue、Message、Looper、Handler共同组成的,为了方便且称之为Handler消息机制 。
    有人可能会疑惑,为何Binder/Socket用于进程间通信,能否用于线程间通信呢?答案是肯定,对于两个具有独立地址空间的进程通信都可以,当然也能用于共享内存空间的两个线程间通信,这就好比杀鸡用牛刀 。接着可能还有人会疑惑,那handler消息机制能否用于进程间通信?答案是不能,Handler只能用于共享内存地址空间的两个线程间通信,即同进程的两个线程间通信 。很多时候,Handler是工作线程向UI主线程发送消息,即App应用中只有主线程能更新UI,其他工作线程往往是完成相应工作后,通过Handler告知主线程需要做出相应地UI更新操作,Handler分发相应的消息给UI主线程去完成,如下图:
    掌握 Android 系统架构,看这一篇就够了!

    文章插图
     
    由于工作线程与主线程共享地址空间,即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/)
    要理解framework层源码,掌握这3种基本的进程/线程间通信方式是非常有必要,当然Linux还有不少其他的IPC机制,比如共享内存、信号、信号量,在源码中也有体现,如果想全面彻底地掌握Android系统,还是需要对每一种IPC机制都有所了解 。
    核心提纲
    博主对于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系统的核心知识点概览:
    掌握 Android 系统架构,看这一篇就够了!

    文章插图
     
    4.1 系统启动系列
    掌握 Android 系统架构,看这一篇就够了!

    文章插图
     
    Android系统启动-概述:


    推荐阅读