Binder Native 基本框架图(基于android 12.0/S)

在Android中应用最多的IPC方式应该算是Binder了,Binder 是一种进程间通信机制,基于开源的 OpenBinder 实现;OpenBinder 起初由 Be Inc. 开发,后由 Plam Inc. 接手。Android从众多的跨进程通信方式中选择Binder主要是从性能和稳定性,安全性 以及版权等进行考虑的结果。

对比看,binder在通信中只对于数据进行了一次复制(client发给binder驱动的时候),共享内存无数据复制过程,而socket/管道/消息队列都进行了两次复制。所以从效率上看共享内存和binder获胜。

稳定性上binder是C/S结构,清晰明了,而共享内存在多线程访问上会难以进行管理。

从安全性上看binder隔开了应用层和框架层,通过UID/PID 判断是否有权限继续操作,同时避免了直接交互,进一步防止了应用层的作恶影响到框架层。

版权性,因为Linux的IPC方式都是受开放源代码许可协议GPL保护,Google巧妙地将GPL协议控制在内核空间,将用户空间的协议采用Apache-2.0协议。这样才能将版权问题抓的更牢固。所以在Android 1.0就引入了新的IPC方式--- Binder

原理整理:

因为Linux中的进程的用户空间是不共享的,内核空间是共享的,所以IPC通信是两个用户空间(APP 进程)通过共享的内核空间(Binder驱动)进行数据交互。

整体框架: 

ServiceManager 在android系统中是一个可执行文件,位于/system/bin/servicemanager下面。在开机的时候由init.rc启动。 这里充当了client和server通信的桥梁和管理者,因为client和server的通信是双向的,所以其实Client和Server都同时会用到BC(Command)和BR(response)两种协议。图中是为了方便理解,client可以理解为逻辑上的请求端。

Binder 通信框架: 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值