序列化是需要使數(shù)據(jù)對(duì)象在不同的activity之間傳遞。android使用Intent的putExtra()來(lái)傳遞數(shù)據(jù),但是只支持有限的數(shù)據(jù)類型蹄殃。所以需要使用序列化。
Serializable是java默認(rèn)的序列化方式你踩。
只需要默認(rèn)實(shí)現(xiàn)Serializable接口就可以了诅岩。
使用Intent.putExtra(key,value)方式傳遞。讀取時(shí)带膜,通過(guò)getIntent().getSerializableExtra(key)讀取吩谦。
Parcelable 是安卓的序列化方式。
不同在于Parcelable 是把對(duì)象按字段實(shí)現(xiàn)序列化膝藕,需要實(shí)現(xiàn)Parcelable 接口式廷,并完成接口方法的實(shí)現(xiàn),比Serializable方式要復(fù)雜芭挽。
通過(guò)實(shí)現(xiàn)Parcelable 接口滑废,需要完成如下幾個(gè)接口方法的實(shí)現(xiàn):
@Override
public void writeToParcel(Parcel dest, int flags) {
//讀取順序和寫(xiě)入順序一致
dest.writeString(name);
dest.writeString(sex);
dest.writeInt(age);
}
@Override
public int describeContents() {
return 0;
}
并完成接口類Creator的實(shí)現(xiàn):
需要將泛型指定為需要實(shí)現(xiàn)序列化的類名
public static final Creator<Person> CREATOR = new Creator<Person>() {
@Override
public Person createFromParcel(Parcel in) {
Person person=new Person();
//讀取順序和寫(xiě)入順序一致
person.name=in.readString();
person.sex=in.readString();
person.age=in.readInt();
return person;
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
}
int describeContents()和public Person[] newArray(int size)使用默認(rèn)就可蝗肪。
需要注意的是,在寫(xiě)入序列化和讀取的時(shí)候蠕趁,字段要按照順序進(jìn)行寫(xiě)和讀薛闪。
傳遞時(shí),同樣使用intent.putExtra(key,value)俺陋。
讀取時(shí)豁延,通過(guò)getIntent().getParcelableExtra(key)讀取。
對(duì)比二者腊状,java Serializable效率低一些诱咏,但有持久化需要時(shí),支持好寿酌。
如果僅是在Activity之間傳遞數(shù)據(jù)胰苏,建議使用Parcelable。