理解Android binder机制的关键

来源:互联网 发布:王军税务总局调离 知乎 编辑:程序博客网 时间:2024/06/08 06:36

理解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后,再去看相关的代码就容易懂了。

原创粉丝点击