Выбор ответа Junior Compose: состояние и side-effects спрашивают часто обновлено

remember и rememberSaveable

Вопрос

Пользователь ввёл текст в поле, которое хранит значение в remember { mutableStateOf("") }, и повернул экран. Что станет с текстом?

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: Пропадёт: remember живёт в композиции, а она пересоздаётся; нужен rememberSaveable. remember хранит значение, пока composable в композиции.

Варианты ответа

  1. Сохранится: remember хранит значение в ViewModelStore и переживает поворот
  2. Сохранится, если поле лежит внутри LazyColumn: он сам сохраняет состояние строк
  3. Пропадёт: remember живёт в композиции, а она пересоздаётся; нужен rememberSaveableправильный ответ
  4. Приложение упадёт: состояние не сериализуется в Bundle при смене конфигурации

Разбор

remember хранит значение, пока composable в композиции. Поворот пересоздаёт Activity и всю композицию, значение теряется. rememberSaveable пишет значение в Bundle и восстанавливает его после поворота и даже смерти процесса. Ввод пользователя почти всегда нужно сохранять так или поднимать во ViewModel с SavedStateHandle.

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

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