121°

[日更-2019.5.27] Android系统中的Binder通信机制分析(二)--system_server

声明

  • 其实对于Android系统Binder通信的机制早就有分析的想法,记得去年6、7月份Mr.Deng离职期间约定一起对其进行研究的,但因为我个人问题没能实施这个计划,留下些许遗憾...
  • 最近,刚好在做公司某项目中一个难题就是关于Binder的,于是想借此机会对其进行尽量深入的分析,以算是弥补过去的遗憾吧。而且,一年后我对于Android系统的理解,比去年确实加深了很多;
  • 文中参考了很多前辈们写的书籍及博客内容,可能涉及的比较多先不具体列出来了,等有时间再添加进来;
  • 本文使用的代码是LineageOS的cm-14.1,对应Android 7.1.2,可以参考我的另一篇博客:[如何下载Nexus5的LineageOS14.1(cm-14.1)系统源码并编译、刷机](https://my.oschina.net/XiaoMaPedro/blog/3028748 "如何下载Nexus5的LineageOS14.1(cm-14.1)系统源码并编译、刷机");

0 写在前面的

    上一篇提到过,Android的系统服务运行在system_server进程的上下文中,因为大部分框架服务十分的简单,并不需要一个专门的进程,只需要以线程的形式承载就够了。system_server就被设计为这些线程的宿主进程。

    system_server是个容器进程。在Android中这样做甚至带来了一个更为重要的好处:尽管Dalvik虚拟机己经为共享内存做了大量的优化,但是在由同一个虚拟机可执行文件启动的另一个进程中运行各个服务,更有利于保护各类资源。但有一个风险就是:其中任何一个服务出现错误,都会波及运行在system_server中的其他服务。然而,因为能运行在system_server中的只有Android系统的服务,厂商提供的或者其他什么服务根本进不来,所以只有系统代码稳定就不会出现问题。

1 system_server启动流程

    我之前在写这篇博客:[日更-2019.4.22、23、24] cm-14.1 Android系统启动过程分析(三)-SystemServer进程启动过程时,比较详细地分析了system_server启动流程及其所作的工作。system_server在分别启动引导服务、核心服务、其它服务之后将会进入一个无限循环Loop中,在Loop中不但轮询它的文件描述符(特别是它的Binder句柄)以获取输入消息,这些消息就会被分发给它们各自对应的目标服务处理。

Enjoy it

本文由【Captain_小馬佩德罗】发布于开源中国,原文链接:https://my.oschina.net/XiaoMaPedro/blog/3064626

全部评论: 0

    我有话说: