Android---Parcelable包裝類的作用


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

}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM