1.AIDL文本解释
在软件工程中,接口定义语言(IDL)已经成为通用术语,是用来描述软件组件接口的特定语言。在Android中,该IDL被称为Android接口定义语言(AIDL),它是纯文本文件,使用Java类似语法编写。但是,编写Java接口的编写AIDL文件还有有些不同的。
首先,对所有的非原始类型参数,需要指定如下三种类型方向指示符之一:in,out,inout。in类型方向指示符只用于输入,客户端不会看到Service对对象的修改。out类型表明输入对象不包含相关的数据,但会由Service生成相关的数据。inout类型是上面两种类型的结合。切记只使用需要的类型,因为每种类型都有相应的消耗。
另一个需要记住的是,所有用于通信的自定义类都需要创建一个AIDL文件,是用来声明该类实现了Parcelable接口。
2.Parcel
Binder事务通常会传递事务数据。这种数据被称为parcel(包裹)。Android提供了相应的API。允许开发者为大多数Java对象创建parcel。
Android中的parcel和JAVA SE中的序列化对象类似。不同之处在于,开发者需要使用parcelable实现对象的编解码工作。该接口定义了两个编写Parcel对象的方法,以及一个静态的不可被复写的Creator对象,该对象用来从Parcel中读取相应的对象。如下所示:
public class CustomData implements Parcelable {
public static final Creator<CustomData> CREATOR=new Creator<CustomData>(){
@Override
public CustomData createFromParcel(Parcel source) {
CustomData customData=new CustomData();
customData.mName=source.readString();
customData.mReferences=new ArrayList<>();
source.readStringList(customData.mReferences);
customData.mCreated=new Date(source.readLong());
return customData;
}
@Override
public CustomData[] newArray(int size) {
return new CustomData[size];
}
};
private String mName;
private List<String> mReferences;
private Date mCreated;
public CustomData(){
this.mName="";//默认为空字符串
this.mReferences=new ArrayList<String>();
this.mCreated=new Date();//默认为当前时间
}
public Date getmCreated() {
return mCreated;
}
public List<String> getmReferences() {
return mReferences;
}
public String getmName() {
return mName