序列化实现的不同
Serializable
继承Serializable接口,定义一个
serialVersionUID
常量:private static final long serialVersionUID = -7060210544600464481L;
Parcelable
继承Parcelable接口,复写三个方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public int describeContents(){
return 0;
}
public void writeToParcel(Parcel out, int flags){
out.writeString(bookName);
...
}
public Book createFromParcel(Parcel in){
return new Book(in);
}
性能差异
Serializable是通过反射机制实现序列化的,在序列化操作的时候会产生大量的临时变量,导致GC频繁调用。
Parcelable是以Ibinder作为信息载体,所有在内存中序列化开销较小。
总结
Serializable使用方便,但系统开销较大;Parcelable实现比较麻烦,但开销较小,但是无法实现数据持久化,因为不同的Android版本中,Parcelable可能会不同(观点存疑)。
参考: