Parcelable的使用

  • Post author:
  • Post category:其他



一、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错误。



版权声明:本文为dotey_zm原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。