Junior
Kas yra serializuojami ir parceliuojami objektai?
sobes.tech AI
Atsakymas iš AI
Serijalizuojami objektai gali būti paversti į baitų srautą saugojimui ar perdavimui naudojant standartinį Java mechanizmą java.io.Serializable.
Parceliuojami objektai taip pat gali būti pakuojami ir išpakuojami, tačiau naudoja specializuotą Android mechanizmą android.os.Parcelable. Šis mechanizmas yra efektyvesnis duomenų perdavimui tarp Android komponentų, nes jis yra optimizuotas IPC (tarpprocesinei komunikacijai).
| Savybė | Serializable |
Parcelable |
|---|---|---|
| Mechanizmas | Java refleksija | Android Parceling API |
| Veikimas | Mažiau efektyvus (naudoja refleksiją) | Efektyvesnis |
| Įgyvendinimas | Paprastesnis (žymeklio sąsaja) | Reikalauja įgyvendinti writeToParcel, createFromParcel, describeContents metodus |
| Naudojimas | Standartinė Java programa, nuotoliniai metodų iškvietimai (RMI) | Specifinis Android, duomenų perdavimas tarp veiklų, paslaugų ir kt. |
| Būsto šablonas | Mažiau kodo | Daug kodo |
Pavyzdys Parcelable įgyvendinimo:
// 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; // Paprastai 0, jei nėra specialių failų aprašų
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(value);
}
// Gauti (praleisti trumpumo tikslais)
}