服务端
服务端注意细节
- 不支持short数据类型
- 支持的数据类型有:int、long、char、boolean、float、double、String、CharSequence、List、Map
- 除了基本类型外,自定的类型需要我们通过实现Parcelable来序列化
- 自定义的数据类型所在的包必须与aidl下文件拥有相同的包名
- 除基本类型外,自定的类型必须标注in、out、inout标示数据的方向。基本类型默认方向为in。(通常报错就处于此条)
AIDL文件
package com.android.server;
import android.os.Parcel;
import android.os.Parcelable;
/**
* 自定义数据类型
*/
public class Rectangular implements Parcelable{
public int left;
public int right;
public int top;
public int bottom;
public Rectangular(){
}
public Rectangular(Parcel in){
readFromParcel(in);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(left);
dest.writeInt(right);
dest.writeInt(top);
dest.writeInt(bottom);
}
public void readFromParcel(Parcel in){
left = in.readInt();
right = in.readInt();
top = in.readInt();
bottom = in.readInt();
}
public static final Parcelable.Creator<Rectangular> CREATOR = new Parcelable.Creator<Rectangular>(){
@Override
public Rectangular createFromParcel(Parcel source) {
return new Rectangular(source);
}
@Override
public Rectangular[] newArray(int size) {
return new Rectangular[size];
}
};
}
Rectangular.aidl
package com.android.server;
parcelable Rectangular;
IRemoteService.aidl
package com.android.server;
import com.android.server.Rectangular;
interface IRemoteService {
void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
double aDouble, String aString);
int getArea(in Rectangular rect);
}
客户端
客户端注意细节
- aidl文件必须与服务端一致,包括包名
服务端每次修改aidl文件之后,必须更新客户端的aidl文件,负责会服务绑定到服务端的服务。