Middle
Mi a különbség a Serializable és a Parcelable között az Androidban?
sobes.tech MI
Válasz az MI-től
A fő különbség a teljesítményben és a megvalósítás módjában rejlik.
-
Serializable:- A Java SE szabványos interfésze.
- Egyszerűbb a megvalósítás (csak az interfészt kell implementálni).
- A Java Reflection API-t használja a serializációhoz, ami lassabb és több memóriát igényel.
- Kisebb objektumokhoz vagy akkor ideális, ha a serializáció teljesítménye nem kritikus.
-
Parcelable:- Kifejezetten az Android SDK-hoz készült interfész.
- Egyértelmű leírást igényel a serializációs/deserializációs folyamatról.
- Sokkal gyorsabb és hatékonyabb a memóriahasználat szempontjából, mivel nem támaszkodik a Reflection-re.
- A legjobb választás az objektumok átadására Android komponensek között (Activity, Service, BroadcastReceiver) és az állapot mentésére.
A Parcelable megvalósításához:
- Implementálni kell a
Parcelableinterfészt. - Implementálni a
writeToParcel()metódust az adatokParcel-ba írásához. - Implementálni a
describeContents()metódust. - Létrehozni egy statikus
CREATORobjektumot, amely aParcelable.Creatorinterfész implementációja.
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);
}
}
Összehasonlító táblázat:
| Jellemző | Serializable | Parcelable |
|---|---|---|
| Könyvtár | java.io |
android.os |
| Teljesítmény | Alacsony (Reflection-t használ) | Magas |
| Memóriahatékonyság | Alacsony | Magas |
| Implementáció | Egyszerű | Bonyolultabb |
| Használat | Általános Java, kis adatok | Android, adatok átadása komponensek között |