Sobes.tech
Middle

Care este diferența dintre Serializable și Parcelable în Android?

sobes.tech AI

Răspuns de la AI

Principala diferență constă în performanță și modul de implementare.

  • Serializable:

    • Interfață standard din Java SE.
    • Mai simplu de implementat (doar implementezi interfața).
    • Utilizează Java Reflection API pentru serializare, ceea ce este mai lent și necesită mai multă memorie.
    • Potrivit pentru obiecte mici sau când performanța serializării nu este critică.
  • Parcelable:

    • Interfață specifică pentru SDK-ul Android.
    • Necesită o descriere explicită a procesului de serializare/deserializare.
    • Mult mai rapid și mai eficient în utilizarea memoriei, deoarece nu se bazează pe Reflection.
    • Alegerea cea mai bună pentru transferul obiectelor între componentele Android (Activity, Service, BroadcastReceiver) și pentru salvarea stării.

Pentru implementarea Parcelable:

  1. Implementează interfața Parcelable.
  2. Implementează metoda writeToParcel() pentru a scrie datele în Parcel.
  3. Implementează metoda describeContents().
  4. Creează un obiect static CREATOR, care este o implementare a interfeței 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);
    }
}

Tabel comparativ:

Caracteristică Serializable Parcelable
Bibliotecă java.io android.os
Performanță Scăzută (folosește Reflection) Ridicată
Eficiență memorie Scăzută Ridicată
Implementare Mai simplă Mai complexă
Utilizare Java general, date mici Android, transfer de date între componente