Android之路Android开发经验谈首页投稿(暂停使用,暂停投稿)

[Android笔记]IPC系列之Parcelable

2016-07-22  本文已影响114人  Zach_C

前几天我们说了Serializable,当然也少不了Parcleable
Parcelable同样也是一个接口,通过Parcelable我们同样可以实现对象的序列化,而且远比Serializable高效,不够其过程就要复杂点了。
我们简单的定义一个Person类,添加三个属性,然后实现Parcelable接口,AS会提示我们实现其方法,

Parcelable1.png

我们只要点击 Add Parcelable Implementation,AS会自动帮我们实现其方法,如下

public class Person implements Parcelable {

    private int id;
    private String name;
    private boolean sex;

    private Class cls;


    protected Person(Parcel in) {
        id = in.readInt();
        name = in.readString();
        sex = in.readByte() != 0;
        cls = in.readParcelable(Class.class.getClassLoader());
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(id);
        dest.writeString(name);
        dest.writeByte((byte) (sex ? 1 : 0));
        dest.writeParcelable(cls, flags);
    }

    @Override
    public int describeContents() {
        return 0;
    }

    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];
        }
    };
}

Parcel

Parcel内部包装了可序列化的数据,可在Binder中传输,在上面代码中,我们可以看出,序列化过程需要实现序列化、反序列化和内容描述。

其实Android系统有很多实现了Parcelable接口的类,如Intent、Bundle、Bitmap等等,我们可以直接序列化它们,如果List和Map中的元素都是可序列化的,那List和Map也是可以序列化的。

关于Serializable和Parcelable的区别,我在另外一篇笔记中有提到Serializable和Parcelable的区别

上一篇 下一篇

猜你喜欢

热点阅读