Какие знаешь виды Flow

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

Ответ

В Kotlin Flow есть несколько видов:

  1. Cold Flow – запускается при каждом вызове collect(). Пример:
val coldFlow = flow { emit(1) }
coldFlow.collect { println(it) } // 1
coldFlow.collect { println(it) } // снова 1
  1. Hot Flow – данные эмитятся независимо от подписчиков (SharedFlow, StateFlow)

  2. SharedFlow – мультикастный hot flow, хранит N последних значений:

val sharedFlow = MutableSharedFlow<Int>(replay = 2)
  1. StateFlow – частный случай SharedFlow с 1 значением (аналог LiveData):
val stateFlow = MutableStateFlow(0)
  1. ChannelFlow – комбинация Flow и Channel, поддерживает буферизацию и backpressure

  2. Callback Flow – для обертки callback-API в Flow

  3. Flow операторы – map, filter, transform и др. создают производные Flow