Android Binder机制

Binder是基于OpenBinder框架的,是Android系统中进程间通讯(IPC)的一种方式。

为什么要使用Binder?
1.管道:在创建时分配一个page大小的内存,缓存区大小比较有限;
2.消息队列:信息复制两次,额外的CPU消耗;不合适频繁或信息量大的通信;
3.共享内存:无须复制,共享缓冲区直接付附加到进程虚拟地址空间,速度快;但进程间的同步问题操作系统无法实现,必须各进程利用同步工具解决;
4.套接字:作为更通用的接口,传输效率低,主要用于不通机器或跨网络的通信;
5.信号量:常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
6.信号: 不适用于信息交换,更适用于进程中断控制,比如非法内存访问,杀死某个进程等;


Android的内核也是基于Linux内核,为什么开发一种新的叫Binder的进程间通信机制呢?
(1)从性能的角度 数据拷贝次数
在移动设备上(性能受限制的设备,比如要省电),广泛地使用跨进程通信对通信机制的性能有严格的要求,Binder相对出传统的Socket方式,更加高效。Binder数据拷贝只需要一次,而管道、消息队列、Socket都需要2次,共享内存方式一次内存拷贝都不需要,但实现方式又比较复杂。从性能角度看,Binder性能仅次于共享内存。
(2)从稳定性的角度
Binder是基于C/S架构的,简单解释下C/S架构,是指客户端(Client)和服务端(Server)组成的架构,Client端有什么需求,直接发送给Server端去完成。Server端与Client端相对独立,稳定性较好;而共享内存实现方式复杂,没有客户与服务端之别,需要充分考虑到访问临界资源的并发同步问题,否则可能会出现死锁等问题;从这稳定性角度看,Binder架构优越于共享内存。
(3)从安全的角度
传统的进程通信方式对于通信双方的身份并没有做出严格的验证,比如Socket通信ip地址是客户端手动填入,很容易进行伪造,而Binder机制从协议本身就支持对通信双方做身份校检,因而大大提升了安全性。


Android的Binder机制就是一个C/S架构,客户端和服务端直接通过Binder交互数据,打开Binder写入数据,通过Binder读取数据,这样通讯就可以完成。
Binder在framework 层进行了封装,通过 JNI 技术调用 Native(C/C++)层的 Binder 架构。
Binder在Native 层以 ioctl 的方式与 Binder 驱动通讯。


数据的读写是由Binder驱动完成的,除了Binder驱动外,整个机制还包括以下几个组成部分:
(1) Service Manager
Service Manager主要负责管理Android系统中所有的服务,当客户端要与服务端进行通信时,首先会通过Service Manager来查询和取得所需要交互的服务。当然,每个服务也都需要向Service Manager注册自己提供的服务,以便能够供客户端进行查询和获取。
(2) 服务(Server)
这里的服务即上面所说的服务器端,通常也是Android的系统服务,通过Service Manager可以查询和获取某个Server。
(3) 客户端
这里的客户端一般是指Android系统上面的应用程序。它可以请求Server中的服务,比如Activity。
(4) 服务代理
服务代理是指在客户端应用程序中生成的Server代理(proxy)。从应用程序的角度来的看,代理对象和本地对象没有差别,都可以调用其方法,方法都是同步的,并且返回相应的结果。服务代理也是Binder机制的核心模块。


Binder的工作流程:
1)客户端首先获得服务端的代理对象。所谓的代理对象实际上就是在客户端建立一个服务端的“引用”,该代理对象具有服务端的功能,使其在客户端访问服务端的方法就像访问本地方法一样。
2)客户端通过调用服务端代理对象(BpBinder)的方式向服务器端(BBinder)发送请求。
3)服务端代理对象(BpBinder)将用户请求通过Binder驱动发送到服务器进程处理。
4)服务器进程处理用户请求,并通过Binder驱动返回处理结果给客户端的服务器代理对象。

5)客户端从代理对象获取服务器端的返回结果。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值