Sobes.tech
Middle

Kuo skiriasi Serializable ir Parcelable Android?

sobes.tech AI

Atsakymas iš AI

Pagrindinis skirtumas yra našumas ir įgyvendinimo būdas.

  • Serializable:

    • Standartinis Java SE sąsaja.
    • Lengviau įgyvendinti (pakanka įgyvendinti sąsają).
    • Naudoja Java Reflection API serializacijai, kas yra lėčiau ir reikalauja daugiau atminties.
    • Tinka mažiems objektams arba kai serializacijos našumas nėra kritinis.
  • Parcelable:

    • Specifinė Android SDK sąsaja.
    • Reikalauja aiškaus serializacijos/deserializacijos proceso aprašymo.
    • Žymiai greičiau ir efektyviau atminties naudojimo požiūriu, nes nesiremia Reflection.
    • Geriausias pasirinkimas duomenų perdavimui tarp Android komponentų (Activity, Service, BroadcastReceiver) ir būsenos išsaugojimui.

Parcelable įgyvendinimui reikia:

  1. Įgyvendinti Parcelable sąsają.
  2. Įgyvendinti writeToParcel() metodą duomenų įrašymui į Parcel.
  3. Įgyvendinti describeContents() metodą.
  4. Sukurti statinį CREATOR objektą, kuris yra Parcelable.Creator įgyvendinimas.
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);
    }
}

Lyginamoji lentelė:

Savybė Serializable Parcelable
Biblioteka java.io android.os
Našumas Žemas (naudoja Reflection) Aukštas
Atminties efektyvumas Žemas Aukštas
Įgyvendinimas Paprastas Sudėtingesnis
Naudojimas Bendra Java, mažos duomenys Android, duomenų perdavimas tarp komponentų