在android开发过程中,遇到Activity之间传递数据,普通数据类型int float double short long char boolean byte 和String类型的参数,Intent 分别有对应的方法存入取出。对象类型的参数,传递有两种方式
实现Serializable接口,或者实现Parcelable接口。
Serializable 使用起来比较简单,没有需要实现的方法。Parcelable是android提供的接口,通过writeToParcel 将需要保存的字段保存在一个Parcel中,通过CREATOR,从Parcel中恢复对象实体。
在两方面优劣的比较上,有说Serializable涉及IO操作(不太理解),Parcelable 是内存操作。Serializable实现序列话需要ObjectOutputStream ,反序列化需要ObjectInputStream。
对应对象类型的列表。有ParcelableArray的方法,对于Serializable ,需要用一个包装类,通过GoodPackage 进行传播。
class GoodPackage implements Serializable{
List list=new Arraylist();
}
class Good implements Serializable{
String name;
}
如果是IBinder类型,在Parcelable进行序列化,再反序列化得到的是原对象,而不是新对象。
//Binder implements IBinder接口
class Good extends Binder{
}
class MyGood implements Parcelable {
private Good good=new Good();
public MyGood(){
good.color= Color.BLACK;
}
protected MyGood(Parcel in) {
good= (Good) in.readValue(Good.class.getClassLoader());
}
public static final Creator CREATOR=new Creator() {
@Override
public MyGood createFromParcel(Parcel in) {
return new MyGood(in);
}
@Override
public MyGood[] newArray(intsize) {
return new MyGood[size];
}
};
@Override
public intdescribeContents() {
return0;
}
@Override
public voidwriteToParcel(Parcel parcel, inti) {
parcel.writeValue(good);
}
}
这时对于反序列化后的数据进行修改,该的是原数据的值。