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:
- Įgyvendinti
Parcelablesąsają. - Įgyvendinti
writeToParcel()metodą duomenų įrašymui įParcel. - Įgyvendinti
describeContents()metodą. - Sukurti statinį
CREATORobjektą, kuris yraParcelable.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ų |