Android Binder理解

本文的主要通过一些其他资料,跟上binder的代码,形成自己对binder机制的一些理解。

1:类简介:

ProcessState1:单例2:构造函数中打开binder设备,并通过mmap映射到内存。3:拥有设置和获取服务端代理的功能函数getContextObjsetContextObj,其中有个特殊客户端获取servicemanager的代理也是通过这个,只不过传的handler0


BpBinder:1:构造函数中会接受一个handler标示,并且会打开IPCThreadState2:有一个transact方法被BpXXX调用,用来传送客户端向服务端发送的命令请求。

 

BbBinder:1:BpBinder相对应2:有一个transact方法被IPCThreadState中在获取到客户端的请求后调用,该方法里会调用到自己的onTransact方法执行真正的服务端方法调用。

 

IPCThreadState:1:单例 2:拥有ProcessState实例3:初始化mOutmIn4:拥有与binder驱动沟通的函数sendReplywaitForResponsetalkWithDriverwriteTransactionDataexecuteCommand 4:拥有transact,被BpBindertransact调用,用来向binder驱动写入客户端请求并等待接受binder发送的服务端的调用结果。

 

IInterface1IXXX的基类 2:通过模板定义interface_cast函数,通过该函数调用到模板类IXXXasInterface方法将BpBinder转成IXXX 3:定义DECLARE_META_INTERFACE 该宏被IXXX类的头文件里调用 展开宏得到IXXX类的asInterface方法的声明 IXXX类的getInterfaceDescriptor方法的声明 以及IXXX的构造函数和析构函数声明。 4:定义IMPLEMENT_META_INTERFACE宏,该宏被IXXX类源文件调用,展开得到DECLARE_META_INTERFACE宏的声明的函数的实现。

 

IXXX:1:IInterface的子类。2BnInterfaceBpInterface的父类。3:定义服务端对客户端提供的接口。

 

BnInterface1:继承于IXXXBBinder 2:BnXXX的父类

 

BpInterface1:继承于IXXXBpRefBase 2:BpXXX的父类

 

BpXXX:1:BpInterface的子类 2:拥有一个BpBinder的实例3:他是serviceBinder在客户端的代理,实现了IXXX里定义的服务端对客户端提供的接口,实现方式是接受到客户端传过来的参数和请求,通过BpBindertransact方法发送到Binder驱动。

 

BnXXX:1:BnInterface的子类2:他是servciebinder在本地端的代理,是和BpXX对应的和BpXXX打交道的一个类,只要是通过onTransact获取BpXXX发过来的命令,然后执行服务端的接口调用。

 

2binder类图结构:(类图转自网络)

 

 3:以mediaplayer service为例,整个binder的调用流程如下:




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值