Middle
Каква е разликата между Serializable и Parcelable в Android?
sobes.tech AI
Отговор от AI
Основната разлика е в производителността и начина на реализиране.
-
Serializable:- Стандартен интерфейс от Java SE.
- По-лесен за реализиране (достатъчно е да имплементирате интерфейса).
- Използва Java Reflection API за сериализация, което е по-бавно и изисква повече памет.
- Подходящ за малки обекти или когато производителността на сериализация не е критична.
-
Parcelable:- Специфичен интерфейс за Android SDK.
- Изисква явен опис на процеса на сериализация/десериализация.
- Значително по-бърз и по-ефективен по отношение на използването на памет, тъй като не разчита на Reflection.
- Най-добрият избор за прехвърляне на обекти между компоненти на Android (Activity, Service, BroadcastReceiver) и за запазване на състоянието.
За реализиране на Parcelable е необходимо:
- Имплементиране на интерфейса
Parcelable. - Реализиране на метода
writeToParcel()за запис на данни вParcel. - Реализиране на метода
describeContents(). - Създаване на статичен обект
CREATOR, който е реализация на интерфейсаParcelable.Creator.
import android.os.Parcel;
import android.os.Parcelable;
public class MyParcelableObject implements Parcelable {
private int value;
private String name;
public MyParcelableObject(int value, String name) {
this.value = value;
this.name = name;
}
protected MyParcelableObject(Parcel in) {
value = in.readInt();
name = in.readString();
}
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;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(value);
dest.writeString(name);
}
}
Таблица за сравнение:
| Признак | Serializable | Parcelable |
|---|---|---|
| Библиотека | java.io |
android.os |
| Производителност | Ниска (използва Reflection) | Висока |
| Ефективност на паметта | Ниска | Висока |
| Реализация | По-лесна | По-сложна |
| Приложение | Общ Java, малки данни | Android, пренос на данни между компоненти |