美文网首页
Parcelable对象/数据序列化

Parcelable对象/数据序列化

作者: kjy_112233 | 来源:发表于2019-01-24 13:21 被阅读0次

一、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

二、源码解析

相关文章

网友评论

      本文标题:Parcelable对象/数据序列化

      本文链接:https://www.haomeiwen.com/subject/qxmyjqtx.html