在同一个应用内通过 Parcelable 传递自定义类是效率比 Serializable 高。Parcelable 是 Android 专门为在进程间高效传递数据设计的接口。以下是实现步骤:
1. 实现 Parcelable 接口
你需要让你的自定义类实现 Parcelable 接口,并实现其必需的方法。最重要的几个步骤是:
- 实现
writeToParcel()方法,将对象数据写入Parcel。 - 提供一个
CREATOR静态字段,负责从Parcel中恢复对象。
2. 示例代码
假设我们有一个自定义类 Person,包括 name 和 age 属性。
Step 1: 实现 Parcelable 接口
import android.os.Parcel
import android.os.Parcelable
data class Person(
val name: String?,
val age: Int
) : Parcelable {
// 将对象中的数据写入Parcel中
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeString(name)
parcel.writeInt(age)
}
// 返回一个特殊的标记值
override fun describeContents(): Int {
return 0
}
// 构造函数,用于从Parcel中读取数据并重建对象
constructor(parcel: Parcel) : this(
parcel.readString(),
parcel.readInt()
)
// CREATOR对象,用于从Parcel中创建对象
companion object CREATOR : Parcelable.Creator<Person> {
override fun createFromParcel(parcel: Parcel): Person {
return Person(parcel)
}
override fun newArray(size: Int): Array<Person?> {
return arrayOfNulls(size)
}
}
}
Step 2: 通过 Intent 传递 Person 对象
// 发送端
val person = Person("Alice", 25)
val intent = Intent(this, AnotherActivity::class.java)
intent.putExtra("person", person)
startActivity(intent)
Step 3: 在接收端获取 Person 对象
// 接收端
val person = intent.getParcelableExtra<Person>("person")
person?.let {
// 处理Person对象
println("Name: ${it.name}, Age: ${it.age}")
}
3. 注意事项
- 确保在
writeToParcel()方法中,将所有需要传递的字段正确写入Parcel。 - 使用
getParcelableExtra()来获取Parcelable对象。
这样,你就可以在同一应用内通过 Intent 传递自定义 Parcelable 类了。