Sobes.tech
Junior — Middle

Androidда Parcelable аркылуу объекттердин сериализациясы жана десериализациясы кандай жүргүзүлөт?

sobes.tech AI

AIден жооп

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

Сериализация (объектти жазуу):

  • Класс Parcelable интерфейсин ишке ашырган болушу керек.
  • writeToParcel(Parcel dest, int flags) методуна кайра жазып, бардык талааларды writeInt(), writeString() жана башка методдор менен Parcelга жазуу керек.

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

  • Статикалык 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")