Для чего нужен параметр replayCache в SharedFlow

«Для чего нужен параметр replayCache в SharedFlow» — вопрос из категории Coroutines и Flow, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Параметр replayCache в SharedFlow определяет количество последних значений, которые будут отправлены новым подписчикам при их подключении. Это буфер, хранящий последние replay значений.

Пример:

val flow = MutableSharedFlow<Int>(replay = 3)
flow.tryEmit(1)
flow.tryEmit(2)
flow.tryEmit(3)
flow.tryEmit(4)

// Новый подписчик получит последние 3 значения: 2, 3, 4
flow.collect { println(it) }

Нюансы:

  • При replay = 0 новые подписчики не получат старых значений
  • Увеличение replay требует больше памяти
  • Не влияет на обычных подписчиков, только на новых