当我们需要通过Intent,Binder传输数据的时候就会用到Parcelable接口。Parcelable接口是Android中的序列化方式,适合于Android平台上,它的缺点是使用起来稍微有点麻烦,但它的效率高,这是Android推荐的序列化方式。Parcelable主要用于内存序列化上,通过Parcelable将对象序列化到存储设备中或者将对象序列化后通过网络传输也都是可以的,但是这个过程会稍显复杂。
接下来通过一个简单的Book类,来看看Parcelable的实现过程。
/**
*
* 实现了Parcelable的类
* @author DunnLin
*
*/
public class Book implements Parcelable {
public int bookId;
public String bookName;
public boolean isSale;
/**
* 内容描述功能(几乎所有情况下返回但是0,仅当当前对象中存在文件描述时,返回1)
*/
@Override
public int describeContents() {
return 0;
}
/**
* 将当前对象写入序列化结构中,flags标识有两种值:0或者1,为1时,当前对象需要作为返回值返回
* 为0时,不能立即释放资源,几乎所有情况都为0
*/
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeInt(bookId);
out.writeString(bookName);
out.writeInt(isSale ? 1 : 0);
}
/**
* 反序列化
*/
public static final Parcelable.Creator<Book> CREACTOR = new Parcelable.Creator<Book>(){
/**
* 从序列化后的对象中创建原始对象
*/
@Override
public Book createFromParcel(Parcel source) {
return new Book(source);
}
/**
* 创建指定长度的原始对象数组
*/
@Override
public Book[] newArray(int size) {
return new Book[size];
}
};
/**
* 从序列化后的对象中创建原始对象
* @param in
*/
private Book(Parcel in){
bookId = in.readInt();
bookName = in.readString();
isSale = in.readInt() == 1;
}
}