理解Binder还是需要从AIDL入手,Aidl其实就是个封装好的Binder。
Binder 具体的流程:
- 首先通过asInterface() 拿到代理对象Proxy,
- 然后调用Proxy的add() 方法,add方法内部会调用BindProxy的 transact 方法,这个方法内部是c/c++代码,处理完毕后会回调本地对象Stub的onTranscat方法,在这个方法内部,会根据被调用方法来执行相应的逻辑,这里是this.add().并将结果作为reply返回。
类比:
Binder理解之ActivityManagerService
- ActivityManagerNative 继承自Binder,实现IActivityManager接口,所以它其实是一个Binder本地对象。
- ActivityManagerService 继承自ActivityManagerNative,他实现具体的方法。
- ActivityManagerProxy 是一个代理类,因此它相当于是一个Binder代理对象。
- ActivityManager 只是一个管理类,客户端通过它来进行相应的操作。它内部持有一个ActivityManagerProxy代理对象,因此可以通过这个代理对象完成跨进行通信。