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:
- Implémenter l'interface
Parcelable. - Implémenter la méthode
writeToParcel()pour écrire les données dansParcel. - Implémenter la méthode
describeContents(). - Créer un objet statique
CREATOR, qui est une implémentation de l'interfaceParcelable.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 |