Android序列化详解:Serializable与Parcelable对比与实践

0 下载量 132 浏览量 更新于2024-09-02 收藏 119KB PDF 举报
"Android中Serializable和Parcelable序列化对象详解" 在Android开发中,有时我们需要将对象的状态持久化存储或者在网络间传输,这就需要用到序列化技术。序列化是将一个对象转换为字节流的过程,以便可以存储它或在网络上传输。Android提供了两种主要的序列化方式:`Serializable` 和 `Parcelable`。 1. 序列化的目的 - 永久保存对象数据:将对象状态存储到文件或磁盘中,便于后续读取。 - 网络传输:对象数据转化为字节流,适应网络通信需求。 - 进程间通信:在Android中,不同Activity之间传递对象时,可以通过序列化和反序列化来实现。 - 长期存储:Java对象的生命周期通常与JVM相同,但序列化可以让对象在JVM停止后仍能被恢复。 - 只序列化变量,不序列化方法。 - 对于Intent中的复杂数据类型传递,序列化是必需的。 2. Android中实现序列化的两种方式 - Serializable接口:这是Java的标准序列化机制,只需在类上添加`implements Serializable`,系统会自动处理序列化过程。但是,这种方式相对效率较低,序列化和反序列化时会产生大量的临时对象,消耗资源。 ```java public class Person implements Serializable { private static final long serialVersionUID = -7060210544600464481L; private String name; private int age; // getters and setters } ``` - Parcelable接口:这是Android特有的序列化方式,效率更高,但使用起来相对复杂。需要手动编写序列化和反序列化的方法。`Parcelable`更适合用于需要高性能场景,如Intent传递或Binder通信。 3. Parcelable与Serializable的性能比较 - `Parcelable`的性能优于`Serializable`,因为它避免了反射操作,且序列化/反序列化过程中使用了更直接的数据拷贝。 - `Serializable`虽然简单,但其执行速度慢,生成的字节流也更大。 4. 如何使用Parcelable进行序列化操作 - 实现`Parcelable`接口并重写`writeToParcel()`和`createFromParcel()`方法。 - 添加`describeContents()`方法,通常返回0表示没有特殊内容需要序列化。 - 创建一个静态工厂方法` CREATOR`,返回一个`Parcelable.Creator`实例,用于反序列化。 5. Parcelable的工作原理 - 在`writeToParcel()`中,你需要显式地将对象的每个字段写入Parcel。 - `createFromParcel()`则根据Parcel中的数据重建对象。 6. 相关实例 - 创建一个`Parcelable`类时,通常会看到如下的代码结构: ```java public class ParcelablePerson implements Parcelable { private String name; private int age; @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeInt(age); } @Override public int describeContents() { return 0; } public static final Creator<ParcelablePerson> CREATOR = new Creator<ParcelablePerson>() { @Override public ParcelablePerson createFromParcel(Parcel source) { return new ParcelablePerson(source); } @Override public ParcelablePerson[] newArray(int size) { return new ParcelablePerson[size]; } }; private ParcelablePerson(Parcel in) { name = in.readString(); age = in.readInt(); } } ``` 在实际开发中,应根据具体需求选择适合的序列化方式。对于简单对象和低频率的操作,`Serializable`可能就足够了;而对于需要高效传输或者频繁序列化的场景,推荐使用`Parcelable`。理解这两种方式的优缺点和使用场景,有助于提高Android应用的性能。