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

collectAsStateWithLifecycle

Вопрос

Чем collectAsStateWithLifecycle() отличается от collectAsState()?

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

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

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

Коротко

Правильный ответ: Останавливает сбор ниже STARTED (приложение в фоне) и возобновляет при возврате. collectAsState собирает поток, пока composable в композиции, даже если приложение свёрнуто, а с stateIn(WhileSubscribed) это значит, что upstream не остановится. collectAsStateWithLifecycle (из lifecycle-runtime-compose) использует…

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

  1. Останавливает сбор ниже STARTED (приложение в фоне) и возобновляет при возвратеправильный ответ
  2. Ничем: это алиас с другим именем, оставленный для совместимости с LiveData
  3. Работает только с LiveData, а для Flow нужен обычный collectAsState()
  4. Собирает поток в фоновом потоке и передаёт значения на главный через Handler

Разбор

collectAsState собирает поток, пока composable в композиции, даже если приложение свёрнуто, а с stateIn(WhileSubscribed) это значит, что upstream не остановится. collectAsStateWithLifecycle (из lifecycle-runtime-compose) использует repeatOnLifecycle и экономит ресурсы в фоне. Для LiveData есть observeAsState. Сбор идёт на главном потоке.

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

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