Android音视频开发
上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)