Serializable和Parcelable的区别

序列化实现的不同

  • 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
    @Override
    public int describeContents(){
    return 0;
    }

    @Override
    public void writeToParcel(Parcel out, int flags){
    out.writeString(bookName);
    ...
    }

    @Override
    public Book createFromParcel(Parcel in){
    return new Book(in);
    }

性能差异

  • Serializable是通过反射机制实现序列化的,在序列化操作的时候会产生大量的临时变量,导致GC频繁调用。

  • Parcelable是以Ibinder作为信息载体,所有在内存中序列化开销较小。

总结

Serializable使用方便,但系统开销较大;Parcelable实现比较麻烦,但开销较小,但是无法实现数据持久化,因为不同的Android版本中,Parcelable可能会不同(观点存疑)。

参考: