1、首先他們兩個接口都是為了實現對象的序列化,使之可以傳遞,所謂序列化就是將對象信息裝換成可以存儲的介質的過程。
2、Serializable是jdk所提供的序列化接口,該接口存在於io包下,可想用於輸入輸出,使用非常簡單,只要讓你的類實現此接口就ok了;可以使用transient關鍵字修飾你不想序列化的屬性。
3、Parcelable是sdk所提供的序列化接口,使用較上者麻煩,實現此接口後,需要重寫writeToParcel方法,將需要序列化的屬性寫入Parcel中;
然後還需要CERATOR靜態成員屬相,以便從parcel中取出數據。如下
public static final Creator<Pen> CREATOR = new Creator<Pen>() { @Override public Pen createFromParcel(Parcel in) { return new Pen(in); } @Override public Pen[] newArray(int size) { return new Pen[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(color); dest.writeInt(size); }
4、兩種都是用於支持序列化、反序列化話操作,兩者最大的區別在於存儲媒介的不同,Serializable使用IO讀寫存儲在硬盤上,而Parcelable是直接在內存中讀寫,很明顯內存的讀寫速度通常大於IO讀寫,所以在Android中通常優先選擇Parcelable。