Sobes.tech
Junior — Middle

Como é que a serialização e a desserialização de objetos são realizadas usando Parcelable no Android?

sobes.tech IA

Resposta da IA

No Android, a interface Parcelable é usada para serializar objetos de forma eficiente, permitindo transferi-los entre componentes (por exemplo, entre Activity via Intent).

Serialização (escrever objeto):

  • A classe deve implementar a interface Parcelable.
  • Sobrescrever o método writeToParcel(Parcel dest, int flags), onde todos os campos do objeto são escritos no Parcel usando métodos como writeInt(), writeString(), etc.

Desserialização (ler objeto):

  • Criar um campo estático CREATOR do tipo Parcelable.Creator<T>, que implementa os métodos:
    • createFromParcel(Parcel in) — lê os dados do Parcel e cria o objeto.
    • newArray(int size) — cria um array de objetos.
  • No construtor que recebe um Parcel, ler os campos na mesma ordem em que foram escritos.

Exemplo:

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)
    }
}

Dessa forma, o objeto pode ser passado via Intent:

intent.putExtra("user", user)

e obtido com:

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