Sobes.tech
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:

  1. Implementovat rozhraní Parcelable.
  2. Implementovat metodu writeToParcel() pro zápis dat do Parcel.
  3. Implementovat metodu describeContents().
  4. 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