android提供了一種新的類型:Parcel。本類被用作封裝數據的容器,封裝后的數據可以通過Intent或IPC傳遞。 除了基本類型以外,只有實現了Parcelable接口的類才能被放入Parcel中。Android平台對可通過進程通信(IPC)機制進行傳遞的數據定義進行約定,這些數據類必須實現Parcelable接口,且必須包含一個類型為Parcelable.Creator且名為CREATOR的公共靜態成員。只有實現Parcelable接口的類才能以意向的擴展數據進行傳遞。
實現於Parcelable接口的CREATOR成員的createFromParcel方法用於告訴平台如何從包裹里創建該類的實例,而writeToParcel方法則用於告訴平台如何將該類的實例存儲到包裹中。通過接口隊成員的約定,Android平台可獲知數據類的數據讀取和寫入的接口,從而進行對象的實例化和持久化,該過程如下圖:

示例代碼如下:
public class Person implements Parcelable{
private String name;
private String phone;
//必須包含一個類型為Parcelable.Creator且名為CREATOR的公共靜態成員
private static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {
@Override
public Person createFromParcel(Parcel source) {//該方法用於告訴平台如何從包裹里創建數據類實例
return new Person(source);
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
public Person(String name,String phone){
this.name = name;
this.phone = phone;
}
public Person(Parcel in){
this.name = in.readString();
this.phone = in.readString();
}
@Override
public int describeContents() {
return 0;
}
/**
* 告訴平台如何將數據實例寫入Parcel里
*/
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.getName());
dest.writeString(this.getPhone());
}
/**
* 屬性的set和get方法
* @return
*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
