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; } }