一、Parcelable的基本介绍
Parcelable是Android为我们提供的序列化接口。一个类只要实现了这个接口,这个类的对象就可以实现序列化。可用于IPC/Binder,Activity之间的对象的传递。
二、Parcelable的基本使用
1、创建一个类实现Parcelable接口
2、实现接口中的describeContents()和writeToParcel(Parcel dest, int flags)方法
3、在类的实现中必须包含一个非空的静态实现了
Parcelable.Creator
接口的CREATOR。
示例如下:
public class User implements Parcelable { private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } //此处读的顺序要和 writeToParcel(Parcel dest, int flags)的写入顺序保持一致,否则会导致读取的数据出错 private User(Parcel in) { name = in.readString(); age = in.readInt(); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeInt(age); } public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>() { @Override public User createFromParcel(Parcel source) { return new User(source); } @Override public User[] newArray(int size) { return new User[size]; } }; }
三、Parcelable中方法的介绍
1、describeContents()
返回当前对象的内容描述。返回值为0或者CONTENTS_FILE_DESCRIPTOR(即1),如果writeToParcel(Parcel dest, int flags)的输出包含文件描述符,则返回1,否则返回0,几乎所有的情况之下都是返回0.
2、writeToParcel (
Parcel
dest, int flags)
将当前的对象写入序列化结构中,dest表示需要写入序列化的对象。flags有两种值0和PARCELABLE_WRITE_RETURN_VALUE(即1),几乎所有的情况下都是0.
3、createFromParcel(Parcel source)
返回Parcelable类的新实例。同Parcel的readXXX()方法来完成反序列化的过程。
4、newArray(int size)
创建Parcelable类的新数组。其中每个条目都初始化为空。供外部类反序列化本类数组使用。
注意:如果在该类的内部包含有里一个可序列化的对象,则该对象的的反序列化过程需要传递当前线程的上下文类加载器。否则会返回
BadParcelableException错误。