Parcelable 实现序列化与反序列化

本文详细介绍了如何在Android中通过实现Parcelable接口实现对象的序列化与反序列化,以便在Activity、Fragment和Service等组件间高效传输数据,以及如何使用Intent和Bundle进行数据传递。
摘要由CSDN通过智能技术生成

Parcelable 是 Android 提供的一种序列化和反序列化对象的机制。通过实现 Parcelable 接口,可以将一个对象转换为可传输的数据块,可以在不同的组件(Activity、Fragment、Service等)之间传输。

实现 Parcelable 接口需要完成以下几个步骤:

  1. 在对象所在的类中实现 Parcelable 接口,并实现以下方法:
public class MyClass implements Parcelable {
    // 构造方法
    public MyClass() {
        // ...
    }

    // 内容描述,默认返回 0
    @Override
    public int describeContents() {
        return 0;
    }

    // 序列化方法,将对象写入 Parcel 对象中
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        // 将每个成员变量写入 Parcel 对象中
        dest.writeInt(age);
        dest.writeString(name);
        dest.writeParcelable(address, flags);
        // ...
    }

    // 反序列化的静态成员变量 CREATOR,用于创建对象
    public static final Parcelable.Creator<MyClass> CREATOR = new Parcelable.Creator<MyClass>() {
        // 反序列化方法,从 Parcel 对象中读取数据并创建对象
        @Override
        public MyClass createFromParcel(Parcel source) {
            return new MyClass(source);
        }

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

    // 反序列化的构造方法,从 Parcel 对象中读取数据并赋值给成员变量
    protected MyClass(Parcel in) {
        age = in.readInt();
        name = in.readString();
        address = in.readParcelable(Address.class.getClassLoader());
        // ...
    }
}

在 writeToParcel 方法中将对象的成员变量写入 Parcel 对象中。可以使用 Parcel 类提供的一系列写入方法,如 writeInt、writeString 等,也可以使用 writeParcelable 方法将其他实现了 Parcelable 接口的对象写入。

  1. 在反序列化的静态成员变量 CREATOR 中实现 createFromParcel 方法,从 Parcel 对象中读取数据并创建对象。可以使用 Parcel 类提供的一系列读取方法,如 readInt、readString 等,也可以使用 readParcelable 方法读取其他实现了 Parcelable 接口的对象。

  2. 在反序列化的构造方法中从 Parcel 对象中读取数据并赋值给对象的成员变量。

现在,对象就实现了 Parcelable 接口,可以在 Intent 之间传输,或者保存到 Bundle 中。可以使用 Intent 的 putExtra 方法或 Bundle 的 putParcelable 方法将对象传递给其他组件,使用 Intent 的 getParcelableExtra 方法或 Bundle 的 getParcelable 方法从其他组件中获取传输的对象。

// 创建对象
MyClass obj = new MyClass();

// 将对象传递给其他组件
Intent intent = new Intent(context, OtherActivity.class);
intent.putExtra("myObj", obj);
startActivity(intent);

// 在其他组件中获取传输的对象
MyClass obj = getIntent().getParcelableExtra("myObj");

需要注意的是,Parcelable 的序列化和反序列化过程是在内存中进行的,相比于 Java 的 Serializable 接口,Parcelable 性能更高,但实现过程相对复杂一些。

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值