Назад к вопросам
Junior
171
questionbank
Что такое сериализация в контексте разработки на Android?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Сериализация — это процесс преобразования объекта в поток байтов для его сохранения (например, в файл, базу данных) или передачи по сети. Десериализация — обратный процесс восстановления объекта из потока байтов.
В Android это часто используется для:
- Сохранения состояния Activity/Fragment при изменении конфигурации (с помощью
onSaveInstanceState). - Передачи данных между Activity/Service/BroadcastReceiver через
Intent(с помощьюputExtra). - Сохранения данных в SharedPreferences или файлах.
- Сетевой передачи данных.
В Android доступны два основных механизма сериализации:
-
Serializable:
- Стандартный интерфейс Java.
- Прост в реализации (достаточно имплементировать интерфейс).
- Может быть медленнее и создавать больше временных объектов по сравнению с
Parcelable. - Некоторые классы (например,
TextView) неcериализуемы.
// Пример Serializable import java.io.Serializable; public class MySerializableObject implements Serializable { private String name; private int value; // Конструктор, геттеры, сеттеры... } -
Parcelable:
- Интерфейс Android, оптимизированный для IPC (Inter-Process Communication).
- Более производительный и эффективный по сравнению с
Serializableв Android. - Требует больше ручной работы для реализации (
writeToParcel,createFromParcel). - Предпочтительный способ для передачи данных между компонентами Android.
// Пример Parcelable 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 parcel, int flags) { parcel.writeString(name); parcel.writeInt(value); } // Геттеры, сеттеры... }
Сравнение:
| Характеристика | Serializable | Parcelable |
|---|---|---|
| Интерфейс | java.io.Serializable |
android.os.Parcelable |
| Производительность | Медленнее | Быстрее |
| Легкость реализации | Проще | Требует больше кода |
| Использование | Общее Java, сохранение объектов | Предпочтительно для Android IPC |
| Размер | Больше накладных расходов | Меньше накладных расходов |
В Android чаще рекомендуется использовать Parcelable для повышения производительности. Существуют плагины и инструменты, упрощающие генерацию кода для Parcelable.