Middle
Ποια είναι η διαφορά μεταξύ Serializable και Parcelable στο Android;
sobes.tech AI
Απάντηση από AI
Η βασική διαφορά βρίσκεται στην απόδοση και τον τρόπο υλοποίησης.
-
Serializable:- Πρότυπη διεπαφή από το Java SE.
- Πιο απλό στην υλοποίηση (απλώς υλοποιείτε τη διεπαφή).
- Χρησιμοποιεί το Java Reflection API για σειριοποίηση, το οποίο είναι πιο αργό και απαιτεί περισσότερο μνήμη.
- Κατάλληλο για μικρά αντικείμενα ή όταν η απόδοση σειριοποίησης δεν είναι κρίσιμη.
-
Parcelable:- Ειδική διεπαφή για το Android SDK.
- Απαιτεί ρητή περιγραφή της διαδικασίας σειριοποίησης/αποσειριοποίησης.
- Πολύ πιο γρήγορο και αποδοτικό σε χρήση μνήμης, καθώς δεν βασίζεται στο Reflection.
- Η καλύτερη επιλογή για τη μεταφορά αντικειμένων μεταξύ των συστατικών του Android (Activity, Service, BroadcastReceiver) και για την αποθήκευση κατάστασης.
Για την υλοποίηση του Parcelable:
- Υλοποιήστε τη διεπαφή
Parcelable. - Υλοποιήστε τη μέθοδο
writeToParcel()για την εγγραφή δεδομένων στοParcel. - Υλοποιήστε τη μέθοδο
describeContents(). - Δημιουργήστε ένα στατικό αντικείμενο
CREATOR, το οποίο είναι μια υλοποίηση της διεπαφήςParcelable.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);
}
}
Πίνακας σύγκρισης:
| Χαρακτηριστικό | Serializable | Parcelable |
|---|---|---|
| Βιβλιοθήκη | java.io |
android.os |
| Απόδοση | Χαμηλή (χρησιμοποιεί Reflection) | Υψηλή |
| Αποτελεσματικότητα μνήμης | Χαμηλή | Υψηλή |
| Υλοποίηση | Πιο απλή | Πιο πολύπλοκη |
| Χρήση | Γενική Java, μικρά δεδομένα | Android, μεταφορά δεδομένων μεταξύ συστατικών |