Parcelable 小记
Parcelable 类,接口类,用于数据的序列化封装。常见的Bundle,Intent类都实现了该类。
实现该类需要实现writeToParcel和describeContents方法,最后还需要实现一个静态接口Creator
延伸下:为何需要数据的序列化?
数据的传输和保存时,如果一个对象A引用了另一个对象B,那么如果我们需要保存两个对象A,B,用普通的数据保存则是要进行保存两次B,但是通过序列化则不会,序列化会在保存前先给对象编号,然后在保存时遍历前面,如果存在则标记为已保存。
序列化的定义是将对象或者类,序列化成可以传输的流,从而可以传送给别人使用。所以运用在IPC,网络传输,文件存储。
序列化可以通过实现Serializable 和 Parcelable来实现。
Serializable Java自带,效率低,但是可以存储到本地。
parcelable Android自有,效率高,不可存储本地。
附一个简易的Parcelable类的实现
public class MyParcel implements Parcelable {
private int mIntData ;
private String mStringData ;
public MyParcel() {
// TODO Auto-generated constructor stub
}
public MyParcel(Parcel in){
mIntData = in.readInt();
mStringData = in.readString();
}
public String getStringData(){
return mStringData ;
}
public void setStringData(String data){
mStringData = data;
}
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
dest.writeInt( mIntData);
dest.writeString( mStringData);
}
public static final Parcelable .Creator<MyParcel> CREATOR = new Parcelable.Creator<MyParcel>() {
@Override
public MyParcel createFromParcel(Parcel source) {
// TODO Auto-generated method stub
return new MyParcel(source);
}
@Override
public MyParcel[] newArray(int size) {
// TODO Auto-generated method stub
return new MyParcel[size];
}
};
}