Sobes.tech
Middle

Quelle est la différence entre Serializable et Parcelable dans Android?

sobes.tech IA

Réponse de l'IA

La principale différence réside dans la performance et la méthode d'implémentation.

  • Serializable:

    • Interface standard de Java SE.
    • Plus simple à implémenter (il suffit d'implémenter l'interface).
    • Utilise Java Reflection API pour la sérialisation, ce qui est plus lent et nécessite plus de mémoire.
    • Convient pour de petits objets ou lorsque la performance de sérialisation n'est pas critique.
  • Parcelable:

    • Interface spécifique au SDK Android.
    • Nécessite une description explicite du processus de sérialisation/désérialisation.
    • Beaucoup plus rapide et efficace en termes d'utilisation de mémoire, car il ne dépend pas de Reflection.
    • Meilleur choix pour transférer des objets entre composants Android (Activity, Service, BroadcastReceiver) et pour sauvegarder l'état.

Pour implémenter Parcelable, il faut:

  1. Implémenter l'interface Parcelable.
  2. Implémenter la méthode writeToParcel() pour écrire les données dans Parcel.
  3. Implémenter la méthode describeContents().
  4. Créer un objet statique CREATOR, qui est une implémentation de l'interface Parcelable.Creator.
import android.os.Parcel;
import android.os.Parcelable;

public class MyParcelableObject implements Parcelable {
    private int value;
    private String name;

    public MyParcelableObject(int value, String name) {
        this.value = value;
        this.name = name;
    }

    protected MyParcelableObject(Parcel in) {
        value = in.readInt();
        name = in.readString();
    }

    public static final Creator<MyParcelableObject> CREATOR = new Creator<MyParcelableObject>() {
        @Override
        public MyParcelableObject createFromParcel(Parcel in) {
            return new MyParcelableObject(in);
        }

        @Override
        public MyParcelableObject[] newArray(int size) {
            return new MyParcelableObject[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(value);
        dest.writeString(name);
    }
}

Tableau comparatif:

Caractéristique Serializable Parcelable
Bibliothèque java.io android.os
Performance Faible (utilise Reflection) Élevée
Efficacité mémoire Faible Élevée
Implémentation Plus simple Plus complexe
Utilisation Java général, petits données Android, transfert entre composants