Выбор ответа Senior Flow, StateFlow и SharedFlow обновлено

Зачем WhileSubscribed(5000)

Вопрос

Зачем в stateIn(viewModelScope, SharingStarted.WhileSubscribed(5_000), initial) задержка 5000 мс?

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

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

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

Коротко

Правильный ответ: Не останавливать upstream при коротком уходе, например при повороте. WhileSubscribed(stopTimeoutMillis) держит upstream активным, пока есть подписчики, и останавливает его через указанное время после ухода последнего.

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

  1. Чтобы первое значение пришло подписчику через 5 секунд
  2. Не останавливать upstream при коротком уходе, например при поворотеправильный ответ
  3. Чтобы upstream перезапускался каждые 5 секунд заново
  4. Чтобы ограничить время сбора upstream пятью секундами

Разбор

WhileSubscribed(stopTimeoutMillis) держит upstream активным, пока есть подписчики, и останавливает его через указанное время после ухода последнего. При повороте экрана UI отписывается и подписывается снова за доли секунды, и 5 секунд хватает, чтобы не перезапускать запрос. Если приложение ушло в фон, поток через 5 секунд остановится и не будет тратить ресурсы. Задержки первого значения и периодического перезапуска это не даёт.

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

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