AIDL内部实现详解 (一)
AIDL的作用是实现跨进程通讯使用方法也非常的简单,他的设计模式是典型的C/S架构。使用AIDL只要在Client端和Server端的项目根目录下面创建一个aidl的文件夹,在aidl文件夹的下面用java代码编写一个后缀名为.aidl的接口文件然后重新编译一下就会在gen目录下生成相对应的java文件。这里主要研究aidl的运作流程以及原理。
aidl结构
首先我在Server端去实现了一个aidl的接口文件代码如下:
//IMyAidl.aidl
interface IMyAidl {
int add(int arg1, int aarg2);
}
重新编译(rebuild)就会在generated目录下面生成相应的IMyAidl.java的文件代码如下:
public interface IMyAidl extends android.os.IInterface {
/**
* Local-side IPC implementation stub class.
*/
public static abstract class Stub extends android.os.Binder implements com.coder_f.aidlserver.IMyAidl {
private static final java.lang.String DESCRIPTOR = "com.coder_f.aidlserver.IMyAidl";
/**
* Construct the stub at attach it to the interface.
*/
public Stub() {
this.attachInterface(this, DESCRIPTOR);
}
/**
* Cast an IBinder object into an com.coder_f.aidlserver.IMyAidl interface,
* generating a proxy if needed.
*/
public static com.coder_f.aidlserver.IMyAidl asInterface(android.os.IBinder obj) {
if ((obj == null)) {
return null;
}
android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR);
if (((iin != null) && (iin instanceof com.coder_f.aidlserver.IMyAidl))) {
return ((com.coder_f.aidlserver.IMyAidl) iin);
}
return new com.coder_f.aidlserver.IMyAidl.Stub.Proxy(obj);
}
@Override
public android.os.IBinder asBinder() {
return this;
}
@Override
public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException {