Parcelable和Serializable有什么用,它们有什么差别?
Parcelable
和 Serializable
经常用于序列化和反序列化 java 对象。它们两个的不同经常围绕着实现方式和性能结果被提出。它们的差别在于:
- 在 Parcelable 中,开发者为了序列化和反序列化,自己实现代码,所以相比于 Serializable 很少产生垃圾对象。Parcelable 相比与 Serializable 性能有很大的提升(大概快两倍),因为是自定义实现的。
- Serializable 是一种标记实现,这种实现意味着用户不能根据他们的需求序列化数据。在 Serializable 中,序列化操作在 java 虚拟机(JVM)里使用反射的 API 实现的。这样不仅有助于识别 java 对象的成员和方法,而且最终也创建了很多垃圾。由于这些,Serializable 过程相比 Parcelable 过程要慢。
自定义一个类让其实现Parcelable,大致流程是什么?
要想一个类实现 Parcelable 大约分三步(😓这话好像在哪里听过):
- 第一步,
把冰箱门(我可能知道我从哪里听过这句话了)不是,是把一个类实现 Parcelable1public class User implements Parcelable
此时,需要实现两个方法 describeContents()
(用于描述内容)和public void writeToParcel(Parcel dest, int flags)
(用于序列化)
第二步,实现反序列化代码,代码如下:
12345678910111213141516protected User(Parcel in) {name = in.readString();age = in.readInt();}public static final Creator<User> CREATOR = new Creator<User>() {public User createFromParcel(Parcel in) {return new User(in);}public User[] newArray(int size) {return new User[size];}};第三步,
把冰箱门(😓又回来了)嗯,可以在 Intent 里面进行传递了。