Sobes.tech
Junior — Middle

Comment la sérialisation et la désérialisation d'objets sont-elles effectuées avec Parcelable dans Android?

sobes.tech IA

Réponse de l'IA

En Android, l'interface Parcelable est utilisée pour sérialiser efficacement des objets afin de les transmettre entre composants (par exemple, entre Activity via Intent).

Sérialisation (écriture de l'objet):

  • La classe doit implémenter l'interface Parcelable.
  • Redéfinir la méthode writeToParcel(Parcel dest, int flags), où tous les champs de l'objet sont écrits dans le Parcel à l'aide de méthodes comme writeInt(), writeString(), etc.

Désérialisation (lecture de l'objet):

  • Créer un champ statique CREATOR de type Parcelable.Creator<T>, qui implémente les méthodes:
    • createFromParcel(Parcel in) — lit les données du Parcel et crée l'objet.
    • newArray(int size) — crée un tableau d'objets.
  • Dans le constructeur prenant un Parcel, lire les champs dans le même ordre dans lequel ils ont été écrits.

Exemple:

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

Ainsi, l'objet peut être transmis via un Intent:

intent.putExtra("user", user)

et obtenu avec:

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