Как сохранить объект в Bundle

«Как сохранить объект в Bundle» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для сохранения объекта в Bundle он должен реализовывать Parcelable или Serializable. Лучше использовать Parcelable - он работает быстрее.

Пример с Parcelable:

// Класс должен реализовывать Parcelable
data class User(val name: String, val age: Int) : Parcelable {
    // Реализация Parcelable
    constructor(parcel: Parcel) : this(
        parcel.readString()!!,
        parcel.readInt()
    )

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeString(name)
        parcel.writeInt(age)
    }

    override fun describeContents() = 0

    companion object CREATOR : Parcelable.Creator<User> {
        override fun createFromParcel(parcel: Parcel) = User(parcel)
        override fun newArray(size: Int) = arrayOfNulls<User>(size)
    }
}

// Сохранение в Bundle
val bundle = Bundle().apply {
    putParcelable("user_key", User("John", 30))
}

// Получение из Bundle
val user = bundle.getParcelable<User>("user_key")

Для простых случаев можно использовать Serializable, но это менее эффективно.