Middle
Mis vahe on Serializable ja Parcelable vahel Androidis?
sobes.tech AI
Vastus AI-lt
Peamine erinevus seisneb jõudluses ja rakendamise viisis.
-
Serializable:- Java SE standardliides.
- Lihtsam rakendada (piisab liidese implementeerimisest).
- Kasutab Java Reflection API-d serialiseerimiseks, mis on aeglasem ja nõuab rohkem mälu.
- Sobib väikeste objektide jaoks või kui serialiseerimise jõudlus ei ole kriitiline.
-
Parcelable:- Spetsiifiline Android SDK liides.
- Nõuab selget serialiseerimise/deserialiseerimise protsessi kirjeldust.
- Tunduvalt kiirem ja tõhusam mälu kasutamise osas, kuna ei tugine Reflectionile.
- Parim valik objektide edastamiseks Androidi komponentide vahel (Activity, Service, BroadcastReceiver) ja oleku salvestamiseks.
Parcelable rakendamiseks on vaja:
- Implementeerida
Parcelableliides. - Implementeerida
writeToParcel()meetod andmete kirjutamiseksParcel-i. - Implementeerida
describeContents()meetod. - Luua staatiline
CREATORobjekt, mis onParcelable.Creatorimplementatsioon.
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);
}
}
Võrdlustabel:
| Omadus | Serializable | Parcelable |
|---|---|---|
| Raamatukogu | java.io |
android.os |
| Jõudlus | Madal (kasutab Reflectioni) | Kõrge |
| Mälu tõhusus | Madal | Kõrge |
| Rakendamine | Lihtne | Keerulisem |
| Kasutus | Üldine Java, väikesed andmed | Android, andmete edastamine komponentide vahel |