IPCThreadState

IPCThreadState

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

transact

在这里插入图片描述

其就是调用的IPCThreadState::transact来完成的数据传输工作,其工作可以分为两步:

  1. 发送数据

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

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

  2. 接收数据

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

在这里插入图片描述

writeTransactionData

在这里插入图片描述

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

waitForResponse

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

在这里插入图片描述

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

在这里插入图片描述

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

talkWithDriver

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

在这里插入图片描述

其他

待补充

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值