Какой тип потока данных у Flow по умолчанию

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

Ответ

Flow является холодным потоком данных. Это означает, что он начинает испускать элементы только при наличии активного подписчика (collector) и для каждого подписчика запускается независимый поток данных.

Пример:

val flow = flow {
    emit(1)
    emit(2)
}

// Запускаем первый collector
flow.collect { println("Collector 1: $it") } 

// Запускаем второй collector - данные начнут испускаться заново
flow.collect { println("Collector 2: $it") }

Ключевые особенности:

  • Холодный поток (cold stream)
  • Данные начинают испускаться при вызове collect()
  • Каждый collector получает независимый поток данных
  • Аналог Sequence, но с поддержкой корутин