Middle
Aký je rozdiel medzi Serializable a Parcelable v Android?
sobes.tech AI
Odpoveď od AI
Hlavný rozdiel spočíva vo výkone a spôsobe implementácie.
-
Serializable:- Štandardné rozhranie z Java SE.
- Jednoduchšie na implementáciu (stačí implementovať rozhranie).
- Používa Java Reflection API na serializáciu, čo je pomalšie a vyžaduje viac pamäte.
- Vhodné pre malé objekty alebo keď nie je kritická rýchlosť serializácie.
-
Parcelable:- Špecifické rozhranie pre Android SDK.
- Vyžaduje explicitný opis procesu serializácie/deserializácie.
- Výrazne rýchlejšie a efektívnejšie z hľadiska využitia pamäte, pretože sa nespolieha na Reflection.
- Najlepšia voľba pre prenos objektov medzi komponentami Android (Activity, Service, BroadcastReceiver) a pre uchovávanie stavu.
Pre implementáciu Parcelable je potrebné:
- Implementovať rozhranie
Parcelable. - Implementovať metódu
writeToParcel()pre zápis dát doParcel. - Implementovať metódu
describeContents(). - Vytvoriť statický objekt
CREATOR, ktorý je implementáciou rozhraniaParcelable.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);
}
}
Porovnávacia tabuľka:
| Vlastnosť | Serializable | Parcelable |
|---|---|---|
| Knižnica | java.io |
android.os |
| Výkon | Nízky (používa Reflection) | Vysoký |
| Efektivita pamäte | Nízka | Vysoká |
| Implementácia | Jednoduchšia | Složitá |
| Použitie | Obecná Java, malé objekty | Android, prenos dát medzi komponentami |