都是序列化接口
Parcelable在android.os包中
Serializable在java.io包中
import android.os.Parcelable;
import java.io.Serializable;
区别
代码使用方式
实现Parcelable接口需要自己定义写入Parcel和从Pacel读取数据的方式。
public static final Creator<Standard> CREATOR = new Creator<Standard>() {
@Override
public Standard createFromParcel(Parcel source) {
return new Standard(source);
}
@Override
public Standard[] newArray(int size) {
return new Standard[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(type);
dest.writeInt(score);
dest.writeString(id);
dest.writeString(name);
dest.writeString(desc);
dest.writeString(tip);
}
public Standard(Parcel source){
this.type = source.readInt();
this.score = source.readInt();
this.id = source.readString();
this.name = source.readString();
this.desc = source.readString();
this.tip = source.readString();
}
Android Studio可以安装插件Android Parcalable code generator

在使用到的类中用快捷键 Alt+insert即可

实现Serializable,其序列化过程都交给底层实现,只需提供一个序列化版本号即可。
id(serialVersionUID)
特点
Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如activity间传输数据,而Serializable可将数据持久化方便保存,所以在需要保存或网络传输数据时选择Serializable,因为android不同版本Parcelable可能不同,所以不推荐使用Parcelable进行数据持久化
读写
Serializable使用I/O读写
Parcelable使用内存读写
其他
Activity之间传递数据时,因为Bundle使用的是Binder机制经行数据传输。能使用的 Binder 的缓冲区是有大小限制的(有些手机是 2 M),而一个进程默认有 16 个 Binder 线程,所以一个线程能占用的缓冲区就更小了( 有人以前做过测试,大约一个线程可以占用 128 KB)。所以可能出现The Binder transaction failed because it was too large 这类 TransactionTooLargeException 异常。
网友评论