Sobes.tech
Назад к вопросам
Junior — Middle
75

Каким образом осуществляется сериализация и десериализация объектов с помощью Parcelable в Android?

Компании, где спрашивали
ПСБ

Ответ от нейросети

sobes.tech AI

В Android интерфейс Parcelable используется для эффективной сериализации объектов, чтобы передавать их между компонентами (например, между Activity через Intent).

Сериализация (запись объекта):

  • Класс должен реализовать интерфейс Parcelable.
  • Переопределить метод writeToParcel(Parcel dest, int flags), где записать все поля объекта в Parcel с помощью методов writeInt(), writeString() и т.д.

Десериализация (чтение объекта):

  • Создать статическое поле CREATOR типа Parcelable.Creator<T>, которое реализует методы:
    • createFromParcel(Parcel in) — читает данные из Parcel и создает объект.
    • newArray(int size) — создает массив объектов.
  • В конструкторе, принимающем Parcel, прочитать поля в том же порядке, в каком они записывались.

Пример:

class User(val name: String, val age: Int) : 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)
    }
}

Таким образом, объект можно передать через Intent:

intent.putExtra("user", user)

и получить:

val user = intent.getParcelableExtra<User>("user")