这一个过程在《android框架解密》中有细致的讲解。
binder中设计到的类如下图所示。
Binder服务中的类结构图
可以看到从RefBase中派生下来重要有三类,
- IBinder系,是Android中binder抽象数据结构,负责接收rpc数据和代码,生成binder节点。
-ProcessState系,是一些支持binder通信的类和数据结构。
- Interface接口,将服务转化程binder类型,具体的转化是由BpIngerface(转化代理类)和BnInterface(转化服务)来执行的。
binder与Interface之间的转换
服务接口->binder 是通过IInterface 的asBinder函数。
binder->服务接口 是通过服务接口的asInterface函数。
一个重要的概念
bpBinder和bnBinder是成对存在的,在ipc传输数据过程中,BpBinder的transAct()方法被调用,对应BnBinder的transact()方法也会调用。BnBinder在taransact()之后又会调用onTransact()方法,分析ipc数据,然后执行stub函数。
代理bpBinder如何生成的?
源头是从ServiceManager中获取得到服务binder。然后一步一步反向初始化,变成remote(代理服务)。
IPCThreadState主要是打开binder操作,传递,转化ipc数据。