Creator 是什麼
- Creator 是用於 Parcelable 介面的一個輔助工具,它幫助我們從 Parcel 中建立新的物件。簡單來說,Creator 是一個工廠類,用於生成新的物件例項
為什麼需要 Creator
- 如果想要讓一個物件在不同元件(如 Activity、Service 等)之間傳遞,該物件必須實現 Parcelable 介面。實現 Parcelable 介面的類需要有一個 CREATOR 欄位,這個欄位是
Parcelable.Creator<T>
的一個實現,用於告訴 Android 系統如何建立這個類的例項
Creator 的工作流程
-
Creator 是一個靜態欄位,通常在實現 Parcelable 介面的類中定義。它實現了
Parcelable.Creator<T>
介面,該介面包含兩個方法:-
createFromParcel(Parcel in)
:從給定的 Parcel 中讀取資料並返回一個新的物件例項 -
newArray(int size)
:建立一個指定大小的物件陣列
-
Creator 示例
public class User implements Parcelable {
private String name;
private int age;
// 普通的建構函式
public User(String name, int age) {
this.name = name;
this.age = age;
}
// 從 Parcel 中讀取資料的建構函式
protected User(Parcel in) {
name = in.readString(); // 從 Parcel 中讀取 String 型別的資料並賦值給 name 欄位
age = in.readInt(); // 從 Parcel 中讀取 int 型別的資料並賦值給 age 欄位
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name); // 將 name 欄位寫入到 Parcel 中
dest.writeInt(age); // 將 age 欄位寫入到 Parcel 中
}
@Override
public int describeContents() {
return 0; // 通常返回 0,表示物件包含的是檔案描述符
}
// 定義 CREATOR 欄位,它是 Parcelable.Creator<User> 的一個實現
// 它告訴 Android 系統如何從 Parcel 中恢復物件
public static final Creator<User> CREATOR = new Creator<User>() {
// 使用 Parcel 中的資料建立一個新的 User 物件。在我們的例子中,它呼叫了 User(Parcel in) 建構函式,透過從 Parcel 中讀取的資料來初始化新物件
@Override
public User createFromParcel(Parcel in) {
return new User(in); // 從 Parcel 中讀取資料並建立 User 物件
}
// 建立一個 User 物件的陣列,大小為 size
@Override
public User[] newArray(int size) {
return new User[size]; // 建立一個指定大小的 User 陣列
}
};
}
Creator 的好處
-
反序列化物件:把物件從一個 Activity 傳遞到另一個 Activity 時,Android 系統需要反序列化物件。CREATOR 幫助 Android 系統知道如何從 Parcel 中重建原始物件
-
型別安全:CREATOR 確保在反序列化時不會丟失資料型別和資料內容
總結
- Creator 是 Parcelable 的一部分,它告訴 Android 系統如何序列化和反序列化一個物件。透過實現
Parcelable.Creator<T>
介面,我們定義瞭如何從 Parcel 建立新的物件例項,使得物件可以在元件之間高效地傳遞