AIDL流程整理,不涉及Binder的通信原理
XMind导出文字
1、client通过bindService连接到remoteService
2、service在onBind方法中实例化Stub,并返回这个实例对象iBinder
3、client通过onServiceConnected的参数service,调用Stub.asInterface(service)方法,获取服务端的代理Proxy
4、client具体调用方调用Proxy提供的接口方法。【注意】Proxy中并没有真正实现接口,而是将传参data、返回值reply、方法标识打包,然后调用mRemote的transact方法,从而进入Stub的onTransact方法,这是client进入阻塞状态(同步状态下)
5、service的stub实例在onTransact方法中收到Proxy发送的请求,根据方法标识,决定需要执行的方法
6、从接收参数的data中获取业务参数,执行实例对象iBinder中真正的接口业务方法,将业务方法执行后的结果放入接收参数的reply中,onTransact方法执行完成后,返回staus,service端进入阻塞状态
7、client激活,Proxy接收到mRemote返回的状态status,获取reply中的返回值,将返回值返回给client具体的调用方。【至此跨进程通信完成】
网友评论