本地系统服务都是使用本地系统服务框架实现的
RPC信息仅包括RPC代码和RPC数据 + 目的信息handle和 binder协议即为 ipc数据
客户端 有服务接口 服务端不仅有服务接口还要服务实现
IPCThreadState位于ipc层
服务使用者->BpFooService.foo()->BpBinder.transact()->IPCThreadState.transact()->talkWithDriver();到驱动
添加handle 添加binder协议
驱动向IPCThreadState.executeCommand()->BBinder.transact()->BBinder.onTransact();->BnFOOService.OnTransact();
含有BR_TRANSACTION协议 RPC代码和数据传入 服务调用非基本函数, 重新定义了OnTransact函数
BBinder类负责接收RPC代码和数据 BpBinder保存者目标服务的handle信息
IInterface类提供类型转换的功能 BnInterface将服务类型转换成IBinder类型 BPInterface将服务代理类转换成IBinder类型
通过binder驱动传递binder对象时,必须实现类型转换 Parcel类负责保存IPC数据
IAudioFlinger 中间介质继承了IInterface 发起IInterface类中asBinder函数用来将服务接口类型转换为IBinder类型
接收的一方asInterface函数将IBinder类型转换为服务接口类型
BnInterface和BpInterface类继承了IAudioFlinger类 所以当调用onAsBinder 子类会被调用
RPC信息仅包括RPC代码和RPC数据 + 目的信息handle和 binder协议即为 ipc数据
客户端 有服务接口 服务端不仅有服务接口还要服务实现
IPCThreadState位于ipc层
服务使用者->BpFooService.foo()->BpBinder.transact()->IPCThreadState.transact()->talkWithDriver();到驱动
添加handle 添加binder协议
驱动向IPCThreadState.executeCommand()->BBinder.transact()->BBinder.onTransact();->BnFOOService.OnTransact();
含有BR_TRANSACTION协议 RPC代码和数据传入 服务调用非基本函数, 重新定义了OnTransact函数
BBinder类负责接收RPC代码和数据 BpBinder保存者目标服务的handle信息
IInterface类提供类型转换的功能 BnInterface将服务类型转换成IBinder类型 BPInterface将服务代理类转换成IBinder类型
通过binder驱动传递binder对象时,必须实现类型转换 Parcel类负责保存IPC数据
IAudioFlinger 中间介质继承了IInterface 发起IInterface类中asBinder函数用来将服务接口类型转换为IBinder类型
接收的一方asInterface函数将IBinder类型转换为服务接口类型
BnInterface和BpInterface类继承了IAudioFlinger类 所以当调用onAsBinder 子类会被调用