Выбор ответа Junior Compose: состояние и side-effects спрашивают часто обновлено
remember и rememberSaveable
Вопрос
Пользователь ввёл текст в поле, которое хранит значение в remember { mutableStateOf("") }, и повернул экран. Что станет с текстом?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Пропадёт: remember живёт в композиции, а она пересоздаётся; нужен rememberSaveable. remember хранит значение, пока composable в композиции.
Варианты ответа
- Сохранится:
rememberхранит значение в ViewModelStore и переживает поворот - Сохранится, если поле лежит внутри
LazyColumn: он сам сохраняет состояние строк - Пропадёт:
rememberживёт в композиции, а она пересоздаётся; нуженrememberSaveableправильный ответ - Приложение упадёт: состояние не сериализуется в Bundle при смене конфигурации
Разбор
remember хранит значение, пока composable в композиции. Поворот пересоздаёт Activity и всю композицию, значение теряется. rememberSaveable пишет значение в Bundle и восстанавливает его после поворота и даже смерти процесса. Ввод пользователя почти всегда нужно сохранять так или поднимать во ViewModel с SavedStateHandle.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.