在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);
? ? ? }
}
這時對于反序列化后的數據進行修改,該的是原數據的值。