Android跨进程通信的AIDL生成的文件代码解析,asInterface,Stub,Proxy
一.aidl是什么
Android接口定义语言,目的是帮助binder通信过程,定义一些交互的接口。编码之后生成对应的java文件,通过Android平台工具aidl.exe执行这个aidl文件。
二.asInterface方法
主要是客户端调用,把远程的IBinder实现类对象转换成客户端本地的一个接口引用,这样在客户端就能调用服务端定义好的方法。
做一些判断,有的话就直接返回这个Ibinder对象,没有的话就new一个新的
return new com.example.myapplication.ThridPayCallBack.Stub.Proxy(obj);
Proxy就是本地的一个代理对象,也就是说下面这个对象
asInterface最终返回的是一个Proxy类型的对象。
三.客户端调用远程方法
系统回调onTransact方法
匹配我们对应的要调用的方法
stub是抽象类,意味着我们定义在aidl里面的接口都需要实现,生成的文件源码中并没有去实现我们定义的接口方法
调用远程的方法实际上是调用下面的这个Proxy中的方法
传递参数
boolean _status = mRemote.transact(Stub.TRANSACTION_request, _data, _reply, 0);
在onTransact中,匹配上了TRANSACTION_request这个code就可以执行对应的远程方法
看看mRemote是啥
其实就是远端的IBinder对象
最终调用了远程的boolean _status = mRemote.transact(Stub.TRANSACTION_request, _data, _reply, 0);