Junior
Čo sú serializovateľné a parcelovateľné objekty?
sobes.tech AI
Odpoveď od AI
Serializovateľné objekty môžu byť prevedené na bajtový tok na uloženie alebo prenos pomocou štandardného mechanizmu Java java.io.Serializable.
Parcelovateľné objekty môžu byť tiež zabalené a rozbalené, ale používajú špecializovaný mechanizmus Android android.os.Parcelable. Tento mechanizmus je efektívnejší na prenos dát medzi komponentmi Android, pretože je optimalizovaný pre IPC (medzoprocesovú komunikáciu).
| Charakteristika | Serializable |
Parcelable |
|---|---|---|
| Mechanizmus | Java reflexia | Android Parceling API |
| Výkon | Menej efektívne (používa reflexiu) | Efektívnejšie |
| Implementácia | Jednoduchšia (markerové rozhranie) | Vyžaduje implementáciu metód writeToParcel, createFromParcel, describeContents |
| Použitie | Štandardná Java aplikácia, vzdialené volania metód (RMI) | Špecifické pre Android, prenos dát medzi aktivitami, službami a pod. |
| Bojlerplate | Menej kódu | Viac kódu |
Príklad implementácie 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; // Zvyčajne 0, ak nie sú špeciálne súbory
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(value);
}
// Gettery (vynechané pre stručnosť)
}