SDK - (3) - Binder
一、Linux的IPC方式
1、管道(Pipe)及有名管道(named pipe)
2、信号(Signal)
3、报文(Message)队列(消息队列)
4、共享内存
5、信号量(semaphore)
6、套接字(Socket)
二、Binder
Android独有的跨进程通信方式,具备传输效率较高、安全性更高、稳定性更好等特点。
1、传输效率较高 -> 传输过程数据只copy一次(通过共享内存实现),传统的pipe socket等copy2次。
数据从发送方的缓存区拷贝到内核的缓存区,而接收方的缓存区与内核的缓存区是映射到同一块物理地址的,节省了一次数据拷贝的过程。
2、安全性高 -> 通过UID建立私有通道。传统的进程通信方式对于通信双方的身份并没有做出严格的验证,比如Socket通信ip地址是客户端手动填入,很容易进行伪造,而Binder机制从协议本身就支持对通信双方做身份校检,因而大大提升了安全性。(通信双方需先去注册)
3、稳定性好 -> Binder基于C/S架构 ,Server端与Client端相对独立,稳定性较好。
原理:
Binder的通信模型有4个角色:Client、 Server、ServiceManager、Binder Driver(Binder驱动),其中 Client、Server、Service Manager 运行在用户空间,Binder 驱动运行在内核空间。
1、Server&Client:服务器&客户端。在Binder驱动和Service Manager提供的基础设施上,进行Client-Server之间的通信。
2、ServiceManager(如同DNS域名服务器)服务的管理者,将Binder名字转换为Client中对该Binder的引用,使得Client可以通过Binder名字获得Server中Binder实体的引用。
3、Binder驱动(如同路由器):负责进程之间binder通信的建立,计数管理以及数据的传递交互等底层支持。
通信流程:
负责进程之间binder通信的建立,计数管理以及数据的传递交互等底层支持
参考:
https://www.jianshu.com/p/57ba91db3705
http://www.360doc.com/content/19/0211/14/15700426_814240466.shtml