理解Android binder机制的关键

本文解析了Android系统中Binder机制的工作原理,重点介绍了BBinder与BpBinder的角色及其交互过程。通过理解Binder驱动如何管理服务句柄,揭示了客户端如何通过BpBinder代理远程调用服务。

理解binder机制的关键在于BBinder和BpBinder,前者表示本地IBinder接口,后者表示远程IBinder接口。BBinder用于为服务进程提供接口,而BpBinder是BBinder的代理,客户端可以通过它获得服务。

那么为什么BpBinder能够作为代理获得BBinder提供的服务呢?这就是binder设备驱动的作用了。

如果某个服务希望能够对外提供一个BBinder接口,则它必须告知binder设备驱动。为此它向设备驱动程序提供了:服务名、BBinder对象的地址等信息。设备驱动必须能标识这个服务,但BBinder对象的地址是个用户空间的地址,这就意味着其他的BBinder对象地址可能和这个地址相同。而通过服务名进行标识,似乎效率不高。因此设备驱动生成并管理了和BBinder对象一一对应的handle。BpBinder正是通过这个handle,向驱动发出请求(驱动可以据此找到处理这个请求的服务进程),达到类似远程调用的效果的。因为驱动要求尽量简单,因此它把这些和服务对应的handle的管理交给了Service Manager的进程维护,客户端可以向Service Manager进程获得handle,然后用这个handle生成BpBinder代理。

 

理解了BBinder和BpBinder后,再去看相关的代码就容易懂了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值