Ответ вслух Senior ViewModel и сохранение состояния обновлено

Как пережить смерть процесса

Вопрос

Расскажи, что такое смерть процесса, как её воспроизвести и как сделать экран устойчивым к ней.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Когда приложение в фоне, система может убить его процесс, чтобы освободить память. Пользователь об этом не знает: при возврате Android восстанавливает стек экранов и отдаёт им сохранённые Bundle, но всё в памяти процесса создаётся заново, включая ViewModel и синглтоны.

Что должно прозвучать в ответе

  • Система убивает процесс в фоне, при возврате восстанавливает стек и Bundle

  • ViewModel и синглтоны создаются заново

  • Ввод и выбор пользователя в SavedStateHandle или rememberSaveable

  • Данные из персистентного хранилища по id

  • Воспроизвести: свернуть, adb shell am kill, вернуться

  • Осторожно с синглтонами, в которых хранили состояние сессии

Что могут спросить следом

  • Чем это отличается от Don't keep activities?
  • Что будет с глобальным синглтоном, где лежал текущий пользователь?

Разбор

Когда приложение в фоне, система может убить его процесс, чтобы освободить память. Пользователь об этом не знает: при возврате Android восстанавливает стек экранов и отдаёт им сохранённые Bundle, но всё в памяти процесса создаётся заново, включая ViewModel и синглтоны. Типичный баг: экран открывается, а данные пустые или приложение падает, потому что в синглтоне не оказалось текущего пользователя. Чтобы быть устойчивым, я сохраняю в SavedStateHandle или rememberSaveable то, что пользователь ввёл или выбрал, а данные восстанавливаю из базы или сети по сохранённому id. Глобальное состояние сессии беру из персистентного хранилища, а не из памяти. Воспроизвожу так: сворачиваю приложение, выполняю adb shell am kill с именем пакета и возвращаюсь из списка недавних. Опция «Don't keep activities» полезна, но проверяет только уничтожение Activity, процесс и синглтоны при этом живы.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме