Junior
Co jsou serializovatelné a parcelovatelné objekty?
sobes.tech AI
Odpověď od AI
Serializovatelné objekty mohou být převedeny na proud bajtů pro ukládání nebo přenos pomocí standardního mechanismu Java java.io.Serializable.
Parcelovatelné objekty mohou být také zabaleny a rozbaleny, ale používají specializovaný mechanismus Android android.os.Parcelable. Tento mechanismus je efektivnější pro přenos dat mezi komponentami Android, protože je optimalizován pro IPC (meziprocesovou komunikaci).
| Charakteristika | Serializable |
Parcelable |
|---|---|---|
| Mechanismus | Java reflexe | Android Parceling API |
| Výkon | Méně efektivní (používá reflexi) | Efektivnější |
| Implementace | Jednodušší (marker interface) | Vyžaduje implementaci metod writeToParcel, createFromParcel, describeContents |
| Použití | Standardní Java aplikace, RMI volání | Specifické pro Android, přenos dat mezi aktivitami, službami atd. |
| Ukázka | Méně kódu | Více kódu |
Příklad implementace 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; // Обычно 0, если нет специальных файловых дескрипторов
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(value);
}
// Геттеры (опущены для краткости)
}