Android 实现Parcelable接口完成序列化

Parcelable接口是Android中用于实现对象序列化的一种机制,它比Java中的Serializable接口更高效。通过实现Parcelable接口,可以将自定义的对象在不同组件或进程之间进行传递。
要实现Parcelable接口,可以按照以下步骤进行操作:

  1. 在目标类中实现Parcelable接口,并重写以下方法:writeToParcel(Parcel dest, int flags)和describeContents()。

  2. 在构造函数中读取Parcel对象并赋值给类的成员变量。

  3. 创建一个名为CREATOR的静态Parcelable.Creator对象,并实现createFromParcel(Parcel in)和newArray(int size)方法。
    下面是一个示例,展示如何实现Parcelable接口:

    import android.os.Parcel;
    import android.os.Parcelable;
    
    import androidx.annotation.NonNull;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class TestBean implements Parcelable {
        public int id;
        public String name;
        public List score;
        public List> data;
        public Address address;
    
        protected TestBean(Parcel in) {
            id = in.readInt();
            name = in.readString();
            score = new ArrayList<>();
            in.readList(score, Integer.class.getClassLoader());
            data = new ArrayList<>();
            in.readList(data, List.class.getClassLoader());
            address = in.readParcelable(Address.class.getClassLoader());
        }
    
        @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeInt(id);
            dest.writeString(name);
            dest.writeList(score);
            dest.writeList(data);
            dest.writeParcelable(address, flags);
        }
    
        @Override
        public int describeContents() {
            return 0;
        }
    
        public static final Creator CREATOR = new Creator() {
            @Override
            public TestBean createFromParcel(Parcel in) {
                return new TestBean(in);
            }
    
            @Override
            public TestBean[] newArray(int size) {
                return new TestBean[size];
            }
        };
    
        public static class Address implements Parcelable{
            public String city;
            public String road;
    
            protected Address(Parcel in) {
                city = in.readString();
                road = in.readString();
            }
    
            public static final Creator
    CREATOR = new Creator
    () { @Override public Address createFromParcel(Parcel in) { return new Address(in); } @Override public Address[] newArray(int size) { return new Address[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(@NonNull Parcel parcel, int i) { parcel.writeString(city); parcel.writeString(road); } } }

在上述代码中,TestBean类实现了Parcelable接口,并将其成员变量都包含在序列化过程中。
在构造函数protected TestBean(Parcel in)中,通过readInt()、readString()和readParcelable()等方法逐个读取传入的Parcel对象中的数据,并将它们赋值给类的成员变量。
在writeToParcel(Parcel dest, int flags)方法中,通过writeInt()、writeString()和writeParcelable()等方法将类的成员变量写入传入的Parcel对象中。
最后,通过静态的CREATOR对象实现了createFromParcel(Parcel in)和newArray(int size)方法,用于创建TestBean对象的实例和数组。

你可能感兴趣的:(android,Parcelable,序列化)