IPCThreadState

IPCThreadState
在Android中,每个参与Binder通信的线程都会有一个IPCThreadState实例与之关联。我最开始接触到这个类是在BpBinder::transact方法中。

transact

在这里插入图片描述
其就是调用的IPCThreadState::transact来完成的数据传输工作,其工作可以分为两步:

 

发送数据

实际上,writeTransactionData只是将数据转换成binder_transaction_data结构并重新写入到IPCThreadState::mOut中。

并没有真正的将数据发送出去。实际的发送操作是在waitForResponse中完成的。

接收数据

TF_ONE_WAY表示的是单向通信,不需要对端回复。所以这里接收数据就多了几个判断分支。区别就是参数不一样。该函数必定需要被执行的,因为数据要发出去啊。。。

在这里插入图片描述

writeTransactionData

在这里插入图片描述


我们创建一个Service,通过addService注册到ServiceManager时,就涉及到了传输一个IBinder对象的问题。libbinder将IBinder对象转换成一个flat_binder_object结构,虽然将该结构写入到Parcel中,最终在转换成binder_transaction_data。

waitForResponse
waitForResponse实际上又是通过调用IPCThreadState::talkWithDriver方法来完成数据接发工作。随后再处理我们接收到的数据。

在这里插入图片描述

 

我们需要处理如下这些cmd:

在这里插入图片描述

 

处理CMD的函数就是waitForResponse和executeCommand。这里就不贴代码了。

talkWithDriver
很容易理解,我们前面通过writeTransactionData,已经把数据写入到了binder_transaction_data中。talkWithDriver就是调用ioctl(BINDER_WRITE_READ)完成真正的数据接发。

其他
在这里插入图片描述

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值