Parcelable 对比 Serializable

Parcelable和Serializable有什么用,它们有什么差别?

ParcelableSerializable 经常用于序列化反序列化 java 对象。它们两个的不同经常围绕着实现方式和性能结果被提出。它们的差别在于:

  • 在 Parcelable 中,开发者为了序列化反序列化,自己实现代码,所以相比于 Serializable 很少产生垃圾对象。Parcelable 相比与 Serializable 性能有很大的提升(大概快两倍),因为是自定义实现的。
  • Serializable 是一种标记实现,这种实现意味着用户不能根据他们的需求序列化数据。在 Serializable 中,序列化操作在 java 虚拟机(JVM)里使用反射的 API 实现的。这样不仅有助于识别 java 对象的成员和方法,而且最终也创建了很多垃圾。由于这些,Serializable 过程相比 Parcelable 过程要慢。

自定义一个类让其实现Parcelable,大致流程是什么?

要想一个类实现 Parcelable 大约分三步(😓这话好像在哪里听过):

  • 第一步,把冰箱门(我可能知道我从哪里听过这句话了)不是,是把一个类实现 Parcelable
    1
    public class User implements Parcelable

此时,需要实现两个方法 describeContents()(用于描述内容)和public void writeToParcel(Parcel dest, int flags)(用于序列化)

  • 第二步,实现反序列化代码,代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    protected User(Parcel in) {
    name = in.readString();
    age = in.readInt();
    }
    public static final Creator<User> CREATOR = new Creator<User>() {
    @Override
    public User createFromParcel(Parcel in) {
    return new User(in);
    }
    @Override
    public User[] newArray(int size) {
    return new User[size];
    }
    };
  • 第三步,把冰箱门(😓又回来了)嗯,可以在 Intent 里面进行传递了。

我自己写的一个示例代码

代码地址

坚持原创技术分享,您的支持将鼓励我继续创作!