一、Parcelable详解
(1)Parcelable的实现类
Parcelable接口的实现类是可以通过Parcel写入和恢复数据的,并且必须要有一个非空的静态变量CREATOR。
Parcelable通过Parcel实现了read和write的方法,从而实现序列化和反序列化。
public class Person implements Parcelable {
private int age;
public String name;
private String sex;
private ArrayList<String> tags;
private Book book;
private ArrayList<Book> books = new ArrayList<>();
//负责反序列化
protected Person(Parcel in) {
name = in.readString();
age = in.readInt();
sex = in.readString();
tags = in.createStringArrayList();
book = in.readParcelable(Book.class.getClassLoader());
//读取集合也分为两类,对应写入的两类
in.readList(books, Book.class.getClassLoader());
in.readTypedList(books, Book.CREATOR);
}
public static final Creator<Person> CREATOR = new Creator<Person>() {
@Override
public Person createFromParcel(Parcel in) {
return new Person(in);
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
@Override
public int describeContents() {
return 0;
}
//序列化
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
dest.writeString(sex);
dest.writeStringList(tags);
dest.writeParcelable(book, 0);
//序列化一个对象的集合有两种方式,以下两种方式都可以
dest.writeList(books);
dest.writeTypedList(books);
}
}
- 在使用内存的时候,Parcelable比Serializable性能高,所以推荐使用Parcelable。
- Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。
- Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。尽管Serializable效率低点,但此时还是建议使用Serializable
网友评论