Варианты сохранения состояния Activity жизненный цикл Activity — основа понимания механизмов сохранения onSaveInstanceState(Bundle) — запись краткоживущих данных в Bundle onRestoreInstanceState(Bundle) и onCreate(Bundle) — восстановление данных из Bundle ViewModel — сохранение состояния при повороте без уничтожения Activity savedStateHandle (в ViewModel) — удобный механизм хранения промежуточного состояния persistency (SharedPreferences, БД, файлы) — выбор для долгоживущих данных фреймворки вроде Jetpack Navigation — поддержка сохранения состояния навигации главное преимущество Bundle — автоматическое восстановление после уничтожения…
Какими способами можно сохранить состояние Activity?
Варианты сохранения состояния Activity жизненный цикл Activity — основа понимания механизмов сохранения onSaveInstanceState(Bundle) — запись краткоживущих данных в Bundle onRestoreInstanceState(Bundle) и…
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Варианты сохранения состояния Activity
- жизненный цикл Activity — основа понимания механизмов сохранения
- onSaveInstanceState(Bundle) — запись краткоживущих данных в Bundle
- onRestoreInstanceState(Bundle) и onCreate(Bundle) — восстановление данных из Bundle
- ViewModel — сохранение состояния при повороте без уничтожения Activity
- savedStateHandle (в ViewModel) — удобный механизм хранения промежуточного состояния
- persistency (SharedPreferences, БД, файлы) — выбор для долгоживущих данных
- фреймворки вроде Jetpack Navigation — поддержка сохранения состояния навигации
- главное преимущество Bundle — автоматическое восстановление после уничтожения Activity системой
- ViewModel не сохраняет данные после полной гибели процесса, поэтому её нужно комбинировать с другими механизмами
- сочетание нескольких подходов повышает надежность и качество UX
Ответ ориентирован на senior-уровень: рассмотрены реальные механизмы и их ограничения.
Развернутый ответ
Краткий ответ
Состояние Activity в Android необходимо сохранять, чтобы приложение корректно переживало смену конфигурации — например, поворот экрана или изменение языка, — а также уничтожение Activity системой для освобождения ресурсов. Для этого применяют onSaveInstanceState(), ViewModel и Persistent Storage, к которому относятся, например, SharedPreferences и база данных.
Основные аспекты
- onSaveInstanceState(Bundle) — стандартный обязательный механизм для небольших данных, в том числе состояния элементов UI. Значения помещаются в Bundle, а затем восстанавливаются через onCreate() или onRestoreInstanceState(). При этом размер Bundle ограничен, поэтому хранить в нём большие и сложные данные не следует.
- ViewModel (из архитектурных компонентов Android Jetpack) сохраняет состояние во время пересоздания Activity, например после поворота экрана. Она связана с жизненным циклом Activity и уничтожается только после завершения Activity. ViewModel хорошо подходит для бизнес-логики и состояния UI, поскольку сериализация для этого не требуется.
- Persistent Storage — SharedPreferences, SQLite/Room и файлы — предназначен для долгосрочного хранения данных между сессиями приложения. Так можно сохранять пользовательские настройки или кэш сложных данных, загружая их при создании Activity.
- onRetainNonConfigurationInstance() — устаревший механизм передачи данных между пересозданиями Activity; в настоящее время его почти не используют, поскольку он заменён ViewModel.
Практическое применение
На практике методы обычно сочетают: onSaveInstanceState используют для небольших transient-данных, например позиции скролла, ViewModel — для состояния UI и бизнес-логики при смене конфигурации, а Persistent Storage — для долгосрочного хранения. В React Native и Flutter аналогичные задачи решаются с помощью библиотек state management, однако в чистом Android применяются именно эти подходы. В React Native распространены Redux и Context, тогда как в Android Jetpack современным решением для управления состоянием Activity считается ViewModel.