AIDL小结

AIDL : Android Interface Define Language(接口定义语言)

Service中跨进程间通信利器。。。。

一般都会有Client端和Server端(Server端提供服务)

  实现步骤

  1、在Server模块 main文件夹下新建一个aidl文件夹,创建AIDL文件接口,并在Client中相同位置建立相同的包,相同的AIDL文件

  2、编译之后会在build-generate-source下生成一个aidl文件夹

  3、编写Service

public class IRemoteService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return binder;
} private IBinder binder=new IMyAidlInterface.Stub(){ @Override
public int plus(int a, int b) throws RemoteException {
return a+b;
}
};
}

  4、在AndroidManifest文件中注册该Service,并设置Exported属性为true,否则无法被调用

  5、Client中调用 

     Intent i=new Intent();
i.setComponent(new ComponentName("com.alger.lu_yy.myaidl","com.alger.lu_yy.myaidl.IRemoteService"));//包名及类名
bindService(i, new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
iMyAidlInterface=IMyAidlInterface.Stub.asInterface(service); //将IBinder转成Aidl接口
try {
int count= iMyAidlInterface.plus(10,2);
} catch (RemoteException e) {
e.printStackTrace();
}
} @Override
public void onServiceDisconnected(ComponentName name) {
iMyAidlInterface=null;
}
},BIND_AUTO_CREATE);

   

注意:发现在Aidl文件中是无法引入相关的类的,能传递的类型有:基本数据类型(short除外),List及Map 这些都是无需Import的,当我们需要传递一些自定义的数据类型时?该如何使用呢?

  1、在java文件夹下建立与aidl文件下相同的包,创建相关的类,并实现Parceable接口

public class Person implements Parcelable {
private String name;
private int age; public Person(String name, int age) {
this.name = name;
this.age = age;
} protected Person(Parcel in) {
this.age=in.readInt();
this.name=in.readString();
} public static final Creator<Person> CREATOR = new Creator<Person>() {
@Override
public Person createFromParcel(Parcel in) {
return new Person(in);
} @Override
public Person[] newArray(int size) {
return new Person[size];
}
}; @Override
public int describeContents() {
return 0;
} @Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
}
}

  2、在aidl文件夹下建立相应的Person.aidl文件,里面写入

    parcelable Person;(parceleable必须要小写)

  3、并且在Aidl文件中传递自定义的数据类型时必须在类型前面加入in out 关键词

  4、同样在Client模块中相同位置建立相同的类及Aidl文件

上一篇:AI换脸实战教学(FaceSwap的使用)---------第一步Extration:提取人脸。


下一篇:优化04