Может ли быть несколько подписчиков у Channel

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

Ответ

Да, может. В Kotlin Channel поддерживает несколько подписчиков, но поведение зависит от типа канала:

  • Rendezvous (по умолчанию) и Buffered — каждый элемент получает только один подписчик (конкурентный доступ).
  • BroadcastChannel (устарел, вместо него SharedFlow) — поддерживает несколько подписчиков, каждый получит все элементы.

Пример с SharedFlow (рекомендуемый подход):

val sharedFlow = MutableSharedFlow<Int>()  

// Подписчик 1  
sharedFlow.onEach { println("Sub1: $it") }.launchIn(scope)  

// Подписчик 2  
sharedFlow.onEach { println("Sub2: $it") }.launchIn(scope)  

sharedFlow.emit(1) // Оба подписчика получат 1  

Используйте SharedFlow для мультиподписки вместо Channel.