Android之使用 Intent 传递对象(一)Parcelable 方式

Android之使用 Intent 传递对象(一)Parcelable 方式

一,简介

除了 Serializable之外,使用 Parcelable 也可以实现相同的效果,不过不同于将对象进行
序列化,Parcelable 方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分都
是 Intent 所支持的数据类型,这样也就实现传递对象的功能了。
下面我们来看一下 Parcelable 的实现方式,修改 Person 中的代码,如下所示:

public class Person implements Parcelable {
private String name;
private int age;
……
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name); //  写出name
dest.writeInt(age); //  写出age
}
public static final Parcelable.Creator<Person> CREATOR = new Parcelable.
Creator<Person>() {
@Override
public Person createFromParcel(Parcel source) {
Person person = new Person();
person.name = source.readString(); //  读取name
person.age = source.readInt(); //  读取age
return person;
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
}

Parcelable 的实现方式要稍微复杂一些。可以看到,首先我们让 Person 类去实现了
Parcelable 接口,这样就必须重写 describeContents()和 writeToParcel()这两个方法。其中
describeContents()方法直接返回 0 就可以了,而 writeToParcel()方法中我们需要调用 Parcel
的 writeXxx()方法将 Person 类中的字段一一写出。注意字符串型数据就调用 writeString()方
法,整型数据就调用 writeInt()方法,以此类推。
除此之外,我们还必须在 Person 类中提供一个名为 CREATOR 的常量,这里创建了
Parcelable.Creator 接口的一个实现, 并将泛型指定为 Person。 接着需要重写 createFromParcel()
和 newArray()这两个方法, 在 createFromParcel()方法中我们要去读取刚才写出的 name 和 age
字段,并创建一个 Person 对象进行返回,其中 name 和 age 都是调用 Parcel 的 readXxx()方法
读取到的,注意这里读取的顺序一定要和刚才写出的顺序完全相同。而 newArray()方法中的
实现就简单多了,只需要 new 出一个 Person 数组,并使用方法中传入的 size 作为数组大小
就可以了。
接下来在 FirstActivity 中我们仍然可以使用相同的代码来传递 Person 对象,只不过在
SecondActivity 中获取对象的时候需要稍加改动,如下所示:
Person person = (Person) getIntent().getParcelableExtra("person_data");
注意这里不再是调用 getSerializableExtra()方法,而是调用 getParcelableExtra()方法来获
取传递过来的对象了,其他的地方都完全相同。
这样我们就把使用 Intent 来传递对象的两种实现方式都学习完了, 对比一下, Serializable
的方式较为简单,但由于会把整个对象进行序列化,因此效率方面会比 Parcelable 方式低一
些,所以在通常情况下还是更加推荐使用 Parcelable 的方式来实现 Intent 传递对象的功能。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值