Как сохранить и изменить данные Presenter без ViewModel при повороте экрана и на каком этапе жизненного цикла это делать?

Как сохранить данные при повороте экрана без ViewModel контекст: Android, MVP, жизненный цикл Activity задача: сохранить и восстановить состояние Presenter после recreate используем: метод onSaveInstanceState(Bundle)…

Короткий ответ

Что ответить на собеседовании

Как сохранить данные при повороте экрана без ViewModel контекст: Android, MVP, жизненный цикл Activity задача: сохранить и восстановить состояние Presenter после recreate используем: метод onSaveInstanceState(Bundle) Activity в методе onSaveInstanceState сохраняем данные в Bundle, обращаясь к ним по ключам в методе onCreate(Bundle savedInstanceState) или onRestoreInstanceState(Bundle) извлекаем сохранённые значения передаём восстановленное состояние в Presenter через конструктор, сеттер либо отдельный метод так состояние сохраняется без ViewModel, поэтому при повороте экрана данные не пропадают подход подходит для небольшого объёма…

Подробный разбор

Ответ с пояснениями

Как сохранить данные при повороте экрана без ViewModel

  • контекст: Android, MVP, жизненный цикл Activity
  • задача: сохранить и восстановить состояние Presenter после recreate
  • используем: метод onSaveInstanceState(Bundle) Activity
  • в методе onSaveInstanceState сохраняем данные в Bundle, обращаясь к ним по ключам
  • в методе onCreate(Bundle savedInstanceState) или onRestoreInstanceState(Bundle) извлекаем сохранённые значения
  • передаём восстановленное состояние в Presenter через конструктор, сеттер либо отдельный метод
  • так состояние сохраняется без ViewModel, поэтому при повороте экрана данные не пропадают
  • подход подходит для небольшого объёма примитивных значений и сериализуемых объектов

Основной ответ: В onSaveInstanceState сохраняю данные в Bundle, затем восстанавливаю их в onCreate и передаю в Presenter.

Подробный ответ

Основной ответ

При повороте экрана Android пересоздаёт Activity и связанный с ней Presenter, если не принять специальные меры для сохранения состояния. Когда ViewModel не используется, состояние можно сохранить в рамках жизненного цикла Activity — с помощью onSaveInstanceState(Bundle), а восстановить через onRestoreInstanceState(Bundle) либо из параметра Bundle метода onCreate(Bundle). После этого сохранённые значения из Bundle передаются в Presenter, и его состояние восстанавливается после пересоздания.

Ключевые моменты

  • Перед уничтожением Activity, например при повороте экрана, вызывается onSaveInstanceState(Bundle). На этом этапе необходимые данные Presenter можно сериализовать и поместить в Bundle.
  • В onCreate(Bundle savedInstanceState) или onRestoreInstanceState(Bundle) получаем Bundle, после чего восстанавливаем из него состояние Presenter.
  • Этот вариант предполагает, что сохраняемые данные поддерживают сериализацию или имеют тип Parcelable, позволяющий передать их через Bundle.
  • Presenter должен предоставлять API для записи и восстановления состояния из Bundle — например, методы saveState(Bundle) и restoreState(Bundle), которые вызывает Activity.
  • Ещё один вариант — хранить состояние в отдельном объекте, например с помощью Retain Fragment, однако в современных приложениях такой подход используется реже.

Практический контекст

В прикладных проектах без ViewModel для сохранения небольшого объёма состояния часто применяют Bundle, особенно если Presenter не отвечает за сложные данные. Для более комплексных сценариев стоит рассмотреть ViewModel или другие паттерны хранения состояния, чтобы не столкнуться с утечками памяти и трудностями сериализации.

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

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

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

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