1、概念
IPC:Inter-Process Communication,即跨进程通信。
进程空间:分用户空间(数据不可共享)和内核空间(数据可共享)。(进程内的用户空间跟内核空间需通过系统调用)
由于有可共享的内核空间,所以才能够做跨进程通信。
Binder机制:是Android系统的跨进程通信(IPC)主要的通信方式。
Linux的跨进程通信方式有
- 传统IPC:匿名管道(PIPE)、信号(signal)、有名管道(FIFO)
- AT&T Unix:共享内存,信号量,消息队列
- BSD Unix:Socket
但这些跨进程通信方式不适合在Android系统,涉及性能和安全等方面(如Socket建立连接、断开连接消耗比较大;消息队列和管道采用"存储-转发"方式,涉及多次拷贝过程。安全性方面,Android是开放系统,传统IPC没有任何安全措施,完全依赖上层协议管理,容易被恶意进程访问),所以在Android系统没有大规模使用。
基于以上原因,Android需要建立一套新的IPC机制来满足系统对通信方式传输性能和安全的要求,所以就有了Binder。
Binder基于Client/Server通信模式,传输过程只需要一次拷贝(使用内存映射)
Binder核心是Binder驱动,运行在内核态
1)注册服务
Server
进程向Binder
驱动发起服务注册请求;- Binder驱动将注册请求转发给
Service Manager
进程; - Service Manager进程添加该Server进程,即完成注册服务,同时Service Manager进程拥有Server进程信息;
2)获取服务
- Client进程向Binder驱动发起获取服务的请求,传递要获取的服务名称;
- Binder驱动将该请求转发给ServiceManager进程;
- ServiceManager进程查找Client所需的Server信息;
- ServiceManager进程通过Binder驱动将Server信息返回给Client进程,此时Client进程与Server进程建立上了连接。
3)使用服务
Client
进程 根据获取到的 Service
信息(Binder
代理