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:
- Implementează interfața
Parcelable. - Implementează metoda
writeToParcel()pentru a scrie datele înParcel. - Implementează metoda
describeContents(). - Creează un obiect static
CREATOR, care este o implementare a interfețeiParcelable.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 |