Sobes.tech
Middle

Was ist der Unterschied zwischen Serializable und Parcelable in Android?

sobes.tech KI

Antwort von AI

Der Hauptunterschied liegt in der Leistung und der Implementierungsweise.

  • Serializable:

    • Standard-Interface aus Java SE.
    • Einfacher in der Implementierung (nur Interface implementieren).
    • Verwendet Java Reflection API für die Serialisierung, was langsamer ist und mehr Speicher benötigt.
    • Geeignet für kleine Objekte oder wenn die Serialisierungsleistung nicht kritisch ist.
  • Parcelable:

    • Spezifisches Interface für das Android SDK.
    • Erfordert eine explizite Beschreibung des Serialisierungs-/Deserialisierungsprozesses.
    • Deutlich schneller und speichereffizienter, da es nicht auf Reflection angewiesen ist.
    • Bessere Wahl für die Übertragung von Objekten zwischen Android-Komponenten (Activity, Service, BroadcastReceiver) und zum Speichern des Zustands.

Um Parcelable zu implementieren, sind folgende Schritte notwendig:

  1. Implementieren des Interfaces Parcelable.
  2. Implementieren der Methode writeToParcel() zum Schreiben der Daten in Parcel.
  3. Implementieren der Methode describeContents().
  4. Erstellen eines statischen Objekts CREATOR, das eine Implementierung von Parcelable.Creator ist.
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);
    }
}

Vergleichstabelle:

Merkmal Serializable Parcelable
Bibliothek java.io android.os
Leistung Niedrig (verwendet Reflection) Hoch
Speicherverbrauch Niedrig Hoch
Implementierung Einfacher Komplexer
Verwendung Allgemeines Java, kleine Daten Android, Datenübertragung zwischen Komponenten