前言
Android系统是基于Linux系统的,理论上应该使用Linux内置的IPC方式。Linux中的IPC方式有管道、信号量、共享内存、消息队列、Socket,Android使用的Binder机制不属于Linux。Android不继承Linux中原有的IPC方式,而选择使用Binder,说明Binder具有一定的优势。
什么是Binder
- Android系统进程间通信(IPC---Inter-Process Communication-进程间通信)方式之一
- Linux的驱动/dev/binder (是一个binder文件)
- 是安卓系统系统中的Binder类,实现了IBinder接口
- 从Android Framework角度来说,Binder是ServiceManager连接各种Manager和相应ManagerService的桥梁;
Binder机制具体有两层含义:
- Binder是一种跨进程通信(IPC,Inter-Process Communication)的手段;
- Binder是一种远程过程调用(RPC,Remote Procedure Call)的手段。
使用Binder的原因
- 性能方面:
1.socket: 作为一款通用接口,其传输效率低,开销大,主要用在跨网路的进程间通信和本机上进程间的低速通信。
2.消息队列和管道:采取存储-转发方式,即数据先从发送方缓存区拷贝到内核开辟的缓存区中,然后再从内核缓存区拷贝到接收方缓存区,至少有两次拷贝的过程。
3.共享内存:虽然无需拷贝,但控制复杂,难以使用。
4.Binder:只需要一次数据拷贝,性能上仅次于共享内存。
-稳定性方面
- Binder基于C/S架构,客户端(Client)有什么需求就丢给服务端(Service)去完成,架构清晰,职责明确又相互独立,自然稳定性好。
- 共享内存:虽然无需拷贝,但是控制复杂,难以使用。
- 从稳定的角度讲,Binder机制是优于内存共享的。
-安全方面
- 传统的IPC没有任何安全措施,完全依赖上层协议来确保。
- 传统的IPC接收方无法获得对方可靠的进程用户ID/进程ID(UID/PID),从而无法鉴别对方身份。