Junior
Czym są obiekty serializowalne i parcelowalne?
sobes.tech AI
Odpowiedź od AI
Obiekty serializowalne mogą być konwertowane na strumień bajtów do przechowywania lub przesyłania, korzystając z standardowego mechanizmu Java java.io.Serializable.
Obiekty parcelowalne mogą być również pakowane i rozpakowywane, ale używają specjalistycznego mechanizmu Android android.os.Parcelable. Ten mechanizm jest bardziej wydajny do przesyłania danych między komponentami Android, ponieważ jest zoptymalizowany pod kątem IPC (Komunikacji Międzyprocesowej).
| Charakterystyka | Serializable |
Parcelable |
|---|---|---|
| Mechanizm | Refleksja w Java | API parcelowania Androida |
| Wydajność | Mniej wydajny (używa refleksji) | Bardziej wydajny |
| Implementacja | Prostsza (interfejs markerowy) | Wymaga implementacji metod writeToParcel, createFromParcel, describeContents |
| Użycie | Standardowa aplikacja Java, wywołania RMI | Specyficzne dla Androida, przesyłanie danych między aktywnościami, usługami itp. |
| Szablon | Mniej kodu | Więcej kodu |
Przykład implementacji Parcelable:
// MyParcelableObject.java
package com.example.myapplication;
import android.os.Parcel;
import android.os.Parcelable;
public class MyParcelableObject implements Parcelable {
private String name;
private int value;
public MyParcelableObject(String name, int value) {
this.name = name;
this.value = value;
}
protected MyParcelableObject(Parcel in) {
name = in.readString();
value = in.readInt();
}
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; // Zazwyczaj 0, jeśli nie ma specjalnych deskryptorów plików
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(value);
}
// Gettery (pominięte dla zwięzłości)
}