Parcelable 接口介绍

2021-05-07  本文已影响0人  多仔百事宅

只要实现了 Parcelable 接口,一个类的对象就可以实现序列化并可以通过 Intent 和 Binder 传递。

使用示例

import android.os.Parcel;import android.os.Parcelable;

public class User implements Parcelable {
        private int userId;

        protected User(Parcel in) {
            userId = in.readInt();
        }

        public static final Creator<User> CREATOR = new Creator<User>() {
            @Override
            public User createFromParcel(Parcel in) {
                return new User(in);
            }

            @Override
            public User[] newArray(int size) {
                return new User[size];
            }
        };

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

        @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeInt(userId);
        }

        public int getUserId() {
            return userId;
        }
}

方法说明

Parcel 内部包装了可序列化的数据,可以在 Binder 中自由传输。序列化功能由 writeToParcel 方法完成,最终是通过 Parcel 中的一系列 write 方法完成。反序列化功能由 CREATOR 来完成,通过 Parcel 的一系列 read 方法来完成反序列化过程。

方法名

createFromParcel(Parcel in)

功能:从序列化后的对象中创建原始对象

方法名

newArray(int size)

功能:创建指定长度的原始对象数组

方法名

User(Parcel in)

功能:从序列化后的对象中创建原始对象

方法名

writeToParcel(Parcel dest, int flags)

功能:将当前对象写入序列化结构中,其中 flags 标识有两种值:0 或者 1;为 1 时标识当前对象需要作为返回值返回,不能立即释放资源,几乎所有情况都为 0

方法名

describeContents

功能:返回当前对象的内容描述。如果含有文件描述符,返回 1,否则返回 0,几乎所有情况都返回 0

Parcelable 与 Serializable 对比

上一篇下一篇

猜你喜欢

热点阅读