Middle
Jaký je rozdíl mezi Serializable a Parcelable v Androidu?
sobes.tech AI
Odpověď od AI
Hlavní rozdíl spočívá ve výkonu a způsobu implementace.
-
Serializable:- Standardní rozhraní z Java SE.
- Snadnější na implementaci (stačí implementovat rozhraní).
- Používá Java Reflection API pro serializaci, což je pomalejší a vyžaduje více paměti.
- Vhodné pro malé objekty nebo když není kritická rychlost serializace.
-
Parcelable:- Specifické rozhraní pro Android SDK.
- Vyžaduje explicitní popis procesu serializace/deserializace.
- Výrazně rychlejší a efektivnější z hlediska využití paměti, protože se ne spoléhá na Reflection.
- Nejlepší volba pro přenos objektů mezi komponentami Android (Activity, Service, BroadcastReceiver) a pro uchovávání stavu.
Pro implementaci Parcelable je třeba:
- Implementovat rozhraní
Parcelable. - Implementovat metodu
writeToParcel()pro zápis dat doParcel. - Implementovat metodu
describeContents(). - Vytvořit statický objekt
CREATOR, který je implementací rozhraní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);
}
}
Tabulka srovnání:
| Vlastnost | Serializable | Parcelable |
|---|---|---|
| Knihovna | java.io |
android.os |
| Výkon | Nízký (používá Reflection) | Vysoký |
| Efektivita paměti | Nízká | Vysoká |
| Implementace | Jednodušší | Složitější |
| Použití | Obecná Java, malé objekty | Android, přenos dat mezi komponentami |