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:
- Implementieren des Interfaces
Parcelable. - Implementieren der Methode
writeToParcel()zum Schreiben der Daten inParcel. - Implementieren der Methode
describeContents(). - Erstellen eines statischen Objekts
CREATOR, das eine Implementierung vonParcelable.Creatorist.
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 |