Какими способами можно сохранить состояние 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

  • жизненный цикл 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.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку