Назад к вопросам
Middle
109
questionbank
В чем разница между Serializable и Parcelable в Android?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech 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, передача данных между компонентами |