【面试官问你】说说你对Binder的理解吧

Binder是Android中基于C/S结构的一种面向对象的进程间通信的机制。

包含:Client,Server,Binder驱动和ServiceManager四大组成部分。

对于Client,Binder是Server本地对象的一个引用,这个引用实际上是一个代理对象,Client通过这个代理对象来间接访问到Server中的本地对象。

对于Server,Binder是提供具体实现的本地对象,需要向ServiceManager注册。

对于Binder驱动,它是连接Client和Server的桥梁,负责将代理对象转换为本地对象,将Server中的执行结果返回给Client。

对于ServiceManager,它保存了Server,Binder的字符名称和Binder的引用映射,Client通过它来找到Server的Binder引用。

为什么要用Binder呢?

(1)从性能的角度 
数据拷贝次数:传统的IPC机制需要拷贝两次内存,而Binder借助内存映射的方法,在内存空间和接受方用户空间的数据缓存之间做了一层内存映射,这样一来,从发送方内存空间拷贝到内核空间缓存区的数据,就相当于直接拷贝到了接收方的用户空间的数据缓存区,从而减少了一次数据拷贝,而管道、消息队列、Socket都需要2次,但共享内存方式一次内存拷贝都不需要;从性能角度看,Binder性能仅次于共享内存。

2)从稳定性的角度 
Binder是基于C/S架构的,架构清晰明朗,Server端与Client端相对独立,稳定性较好;而共享内存实现方式复杂,没有客户与服务端之别, 需要充分考虑到访问临界资源的并发同步问题,否则可能会出现死锁等问题;从这稳定性角度看,Binder架构优越于共享内存。

3)从安全角度

Android为每个安装好的应用程序分配了自己的UID,故进程的UID是鉴别进程身份的重要标志,前面提到C/S架构,Android系统中对外只暴露Client端,Client端将任务发送给Server端,Server端会根据权限控制策略,判断UID/PID是否满足访问权限,目前权限控制很多时候是通过弹出权限询问对话框,让用户选择是否运行,可靠的身份标记只有由IPC机制本身在内核中添加。其次传统IPC访问接入点是开放的,无法建立私有通道。从安全角度,Binder的安全性更高。
 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值