Junior
Šta su serializabilni i parcelabilni objekti?
sobes.tech АИ
Одговор од АИ
Објекти који се могу серијализовати могу бити претворени у бајт поток за чување или пренос, користећи стандардни механизам Јаве java.io.Serializable.
Објекти који се могу парселизовати такође могу бити упаковани и распаковани, али користе специјализовани механизам Андроид android.os.Parcelable. Овај механизам је ефикаснији за пренос података између компоненти Андроида, јер је оптимизован за IPC (интер-процес комуникацију).
| Карактеристика | Serializable |
Parcelable |
|---|---|---|
| Механизам | Јава рефлексија | Андроид Parceling API |
| Перформансе | Мање ефикасно (користи рефлексију) | Ефикасније |
| Реализација | Једноставније (маркерски интерфејс) | Захтева реализовање метода writeToParcel, createFromParcel, describeContents |
| Користи се | Стандардна Јава апликација, удаљени позиви метода (RMI) | Специфично за Андроид, пренос података између активити, сервиса итд. |
| Бојлерплејт | Мање кода | Више кода |
Пример реализације 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);
}
// Гетери (пропуштени ради краткости)
}