Выбор ответа Middle Compose: состояние и side-effects спрашивают часто обновлено
collectAsStateWithLifecycle
Вопрос
Чем collectAsStateWithLifecycle() отличается от collectAsState()?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Останавливает сбор ниже STARTED (приложение в фоне) и возобновляет при возврате. collectAsState собирает поток, пока composable в композиции, даже если приложение свёрнуто, а с stateIn(WhileSubscribed) это значит, что upstream не остановится. collectAsStateWithLifecycle (из lifecycle-runtime-compose) использует…
Варианты ответа
- Останавливает сбор ниже
STARTED(приложение в фоне) и возобновляет при возвратеправильный ответ - Ничем: это алиас с другим именем, оставленный для совместимости с LiveData
- Работает только с
LiveData, а дляFlowнужен обычныйcollectAsState() - Собирает поток в фоновом потоке и передаёт значения на главный через Handler
Разбор
collectAsState собирает поток, пока composable в композиции, даже если приложение свёрнуто, а с stateIn(WhileSubscribed) это значит, что upstream не остановится. collectAsStateWithLifecycle (из lifecycle-runtime-compose) использует repeatOnLifecycle и экономит ресурсы в фоне. Для LiveData есть observeAsState. Сбор идёт на главном потоке.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.