一、Binder是什么、能做什么?
Binder是android系统里面的进程间通信机制。androd系统中,不同的app运行在不同的进程中,同一个app的不同组件也可能运行在不同的进程中(androidManifest文件中android:process)。当一个进程想为其它进程提供服务时,就需要通过进程间通信的方式来提供服务。
二、 为什么使用Binder
Android系统是基于Linux系统的,理论上应该使用Linux内置的IPC方式。Linux中的IPC方式有管道、信号量、共享内存、消息队列、Socket,Android使用的Binder机制不属于Linux。Android不继承Linux中原有的IPC方式,而选择使用Binder,说明Binder具有一定的优势。
1、采用C/S的通信模式。而在linux通信机制中,目前只有socket支持C/S的通信模式,但socket有其劣势,
socket:是一个通用接口,导致其传输效率低,开销大;
2、管道和消息队列:因为采用存储转发方式,所以至少需要拷贝2次数据,效率低;
3、共享内存:虽然在传输时没有拷贝数据,但其控制机制复杂(比如跨进程通信时,需获取对方进程的pid,得多种机制协同操作,也不能即时通讯);
4、安全性更高。Linux的IPC机制在本身的实现中,并没有安全措施,得依赖上层协议来进行安全控制。而Binder机制的 UID/PID是由Binder机制本身在内核空间添加身份标识,安全性高;并且Binder可以建立私有通道,这是linux的通信机制所无法实现的 (Linux访问的接入点是开放的)。
综上,Binder是一种基于Client-Server通信模式的通信方式,传输过程只需要一次拷贝,可以为发送方添加UID/PID身份,支持实名Binder和匿名Binder,安全性高。
三、Android系统的启动流程
1、首先Bootloader引导程序启动完Linux内核后,会加载各种驱动和数据结构,当有了驱动以后,开始启动Android系统,同时会加载用户级别的第一个进程init(systemcoreinit.c),该进程会首先加载一个init.rc配置文件,代码如下:

2、进程的启动方式

3、 zygote的作用及启动
(1)zygote的作用:孵化应用进程和启动systemserver
(2) zygote的启动流程



4、systemserver进程的启动流程及作用:
(1)systemserver进程的启动流程:


(2)systemserver进程的作用:
SystemServer进程是Android系统的核心之一,大部分Android提供的服务都在该进程中,SystemServer中运行的进程共有六十多种,主要包括:ActivityManagerService(AMS),WindowManagerService(WMS),PackagManagerService(PMS)等。
5、桌面的启动:
当System Server进程开启的时候,就会初始化ActivityManagerService(AMS),同时,会加载本地系统的服务库,创建系统上下文,创建ActivityThread及开启各种服务等等。而在这之后,就会开启系统的Launcher程序,完成系统界面的加载与显示。srartHomeActivitylcokd()方法启动桌面的activity:launcher,在launcher的concrete方法里创建一个loadertask类,该类会去PackagManagerService服务查询安装的应用,然后显示到桌面。

四、binder机制通信流程
1、binder机制通信流程图

2、servicemanager的启动和作用:
(1)启动进程
(2)启动binder机制
(3)发布自己的服务
(4)等待并相应请求
主要代码分析:
入口函数:

打开binder驱动函数binder_open()和发布自己的服务binder_become_context_manager()

等待并响应请求函数binder_loop():把BC_ENTER_LOOPER指令写入binder驱动,注册为binder线程
3、进程如何启动binder机制,这里以surfaceflinger进程为例说明
surfaceflinger进程入口函数:

defaultServiceManager()函数实现:

addService()函数实现: remote()返回bpBinder,在调到binder驱动的transact方法:

继续看servicemanager端的处理请求函数:

4、一次完整的client端调用server端流程图:

---------------------
作者:仕伟
来源:CSDN
原文:
版权声明:本文为博主原创文章,转载请附上博文链接!





































苏公安网备 32011402010933号