上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
3.2 相关联的类图
我们知道Binder通信时,需要通过IBinder接口转化具体的实体对象,那么中间会有很多其他的类,下面看看类关系图,如图3-2所示。
图3-2 IPC通信相关联的类关系(1)
从图3-2可以总结为如下几点。
• BnXXX或BpXXX都派生自两个类,具体情况如下。
▪ class BpXXX : public IXXX, public BpRefBase
▪ class BnXXX : public IXXX, public BBinder
• BpXXX和BnXXX都派生自IXXX,那IXXX又是做什么的呢?这里可以理解为定义业务逻辑,我们此前分析IMediaPlayerClient的作用时,也介绍过。但BpXXX与BnXXX中的实现方式不同。
▪ 在BpXXX中,把对应的binder_transaction_data打包之后,通过BpRefBase中的mRemote(BpBinder)发送出去,并等待结果。
▪ 在BnXXX中,实现对应的业务逻辑,通过调用BnXXX派生类中的方法来实现,如MediaPlayerService::Client。
• 从图3-3可以看出,IBinder用于进行进程间通信。
▪ 图3-2中的BpRefBase中有一个remote函数用来与Binder驱动交互使用。
▪ Binder是用来从Binder驱动中接收相关请求并进行相关处理的。
▪ BpBinder和BinderDriver进行互通。
图3-3 IPC通信相关联的类关系(2)