Parcelable
Parcelable的设计初衷,便是因为Serializable方式较耗资源且执行速度偏慢,为此Android设计了Parcelable用于组件之间的消息传递(包括线程间传递与进程间传递)。Parcelable数据仅在内存中存在,所以在内存间数据传输时推荐使用;而Serializable可将数据持久化方便保存,所以在需要保存文件或网络传输数据时应选择Serializable。
采用Parcelable方式的类,需要自己定义如何打包(写数据)和解包(读数据),其余的序列化操作则由底层实现。具体需要实现的方法如下:
writeToParcel(Parcel out, int flags) : 写数据
Parcelable.Creator<类名> CREATOR : 例行公事实现createFromParcel(读数据)和newArray
describeContents : 返回0即可
注意 我们常见的变量类型如String、Integer等等
package com.example.exmparcelable.data;
import android.os.Parcel;
import android.os.Parcelable;
public class ParData implements Parcelable {
public int mAge;
public String mName;
public boolean mMarried;
public double mHeight;
// 写数据
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mAge);
out.writeString(mName);
out.writeByte((byte) (mMarried ? 1 : 0));
out.writeDouble(mHeight);
}
// 例行公事实现createFromParcel和newArray
public static final Parcelable.Creator<ParData> CREATOR
= new Parcelable.Creator<ParData>() {
// 读数据
public ParData createFromParcel(Parcel in) {
ParData par = new ParData();
par.mAge = in.readInt();
par.mName = in.readString();
par.mMarried = in.readByte() != 0;
par.mHeight = in.readDouble();
return par;
}
public ParData[] newArray(int size) {
return new ParData[size];
}
};
@Override
public int describeContents() {
return 0;
}
}