Middle
Koja je razlika između Serializable i Parcelable u Androidu?
sobes.tech АИ
Одговор од АИ
Glavna razlika je u performansama i načinu implementacije.
-
Serializable:- Standardni interfejs iz Java SE.
- Lakši za implementaciju (dovoljno je implementirati interfejs).
- Koristi Java Reflection API za serializaciju, što je sporije i zahteva više memorije.
- Pogodno za manje objekte ili kada performanse serializacije nisu kritične.
-
Parcelable:- Specifičan interfejs za Android SDK.
- Zahteva eksplicitni opis procesa serializacije/deserializacije.
- Znatno brži i efikasniji u pogledu korišćenja memorije, jer se ne oslanja na Reflection.
- Bolji izbor za prenos objekata između Android komponenti (Activity, Service, BroadcastReceiver) i za čuvanje stanja.
Za implementaciju Parcelable potrebno je:
- Implementirati interfejs
Parcelable. - Implementirati metodu
writeToParcel()za zapisivanje podataka uParcel. - Implementirati metodu
describeContents(). - Kreirati statički objekat
CREATOR, koji je implementacija interfejsaParcelable.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);
}
}
Tabeli za poređenje:
| Osobina | Serializable | Parcelable |
|---|---|---|
| Biblioteka | java.io |
android.os |
| Performanse | Niska (koristi Reflection) | Visoka |
| Efikasnost memorije | Niska | Visoka |
| Implementacija | Lakša | Složenija |
| Primena | Opšta Java, mali podaci | Android, prenos podataka između komponenti |