Junior
Mi azok a serializálható és csomagolható objektumok?
sobes.tech MI
Válasz az MI-től
A szerializálható objektumokat bájtsorozattá lehet alakítani tárolás vagy átvitel céljából, a Java java.io.Serializable szabványos mechanizmusát használva.
A csomagolható objektumokat is csomagolni és kicsomagolni lehet, de ehhez az Android android.os.Parcelable speciális mechanizmusát használják. Ez a mechanizmus hatékonyabb az Android komponensek közötti adatok átvitelében, mivel az IPC-re (Inter-Process Communication) van optimalizálva.
| Jellemző | Serializable |
Parcelable |
|---|---|---|
| Mechanizmus | Java reflexió | Android Parceling API |
| Teljesítmény | Kevésbé hatékony (reflexiót használ) | Hatékonyabb |
| Megvalósítás | Egyszerűbb (jelző interfész) | Meg kell valósítani a writeToParcel, createFromParcel, describeContents metódusokat |
| Használat | Szokásos Java alkalmazás, RMI hívások | Android-specifikus, adatok átadása aktivitások között, szolgáltatások stb. |
| Példa | Kevesebb kód | Több kód |
A Parcelable megvalósításának példája:
// 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; // Általában 0, ha nincsenek speciális fájldeskriptorok
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(value);
}
// Getters (kihagyva rövidség kedvéért)
}