Middle
Wat is het verschil tussen Serializable en Parcelable in Android?
sobes.tech AI
Antwoord van AI
De belangrijkste verschillen liggen in de prestaties en de implementatiemethode.
-
Serializable:- Standaard interface van Java SE.
- Eenvoudiger te implementeren (alleen het interface implementeren).
- Gebruikt Java Reflection API voor serialisatie, wat trager is en meer geheugen vereist.
- Geschikt voor kleine objecten of wanneer serialisatieprestaties niet kritisch zijn.
-
Parcelable:- Specifiek interface voor Android SDK.
- Vereist een expliciete beschrijving van het serialisatie-/deserialisatieproces.
- Veel sneller en efficiënter in geheugengebruik, omdat het niet op Reflection vertrouwt.
- De beste keuze voor het overdragen van objecten tussen Android-componenten (Activity, Service, BroadcastReceiver) en voor het opslaan van de staat.
Om Parcelable te implementeren:
- Implementeer het
Parcelable-interface. - Implementeer de methode
writeToParcel()om gegevens naarParcelte schrijven. - Implementeer de methode
describeContents(). - Maak een statisch object
CREATOR, dat een implementatie is vanParcelable.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);
}
}
Vergelijkingstabel:
| Kenmerk | Serializable | Parcelable |
|---|---|---|
| Bibliotheek | java.io |
android.os |
| Prestaties | Laag (gebruikt Reflection) | Hoog |
| Geheugengebruik | Laag | Hoog |
| Implementatie | Eenvoudiger | Complexer |
| Gebruik | Algemene Java, kleine gegevens | Android, gegevensoverdracht tussen componenten |