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

emit в SharedFlow без подписчиков

Вопрос

Что произойдёт с emit(event) у MutableSharedFlow<Event>() (без replay и буфера), если подписчиков нет?

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

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

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

Коротко

Правильный ответ: Значение будет потеряно, emit вернётся сразу. Без подписчиков SharedFlow некому доставлять значение, и при replay = 0 оно просто отбрасывается, emit не приостанавливается.

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

  1. Значение будет потеряно, emit вернётся сразуправильный ответ
  2. emit будет ждать первого подписчика
  3. Бросится IllegalStateException
  4. Значение сохранится и придёт первому подписчику

Разбор

Без подписчиков SharedFlow некому доставлять значение, и при replay = 0 оно просто отбрасывается, emit не приостанавливается. Поэтому события, отправленные до подписки (например, во время поворота экрана), теряются. Если нужно не терять, используют replay, буфер или Channel, который хранит значение до получателя.

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

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