Что такое Channel в Coroutines

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

Ответ

Channel — это потокобезопасный способ передачи данных между корутинами. По сути, это очередь, где отправитель (send) и получатель (receive) могут работать асинхронно.

Особенности:

  • Горячий поток — данные начинают передаваться, даже если получатель не готов.
  • Может быть закрыт (close), чтобы сигнализировать о завершении передачи.
  • Поддерживает разные стратегии при переполнении (BufferOverflow): SUSPEND, DROP_OLDEST, DROP_LATEST.

Пример:

val channel = Channel<Int>()  

launch {  
    repeat(5) {  
        channel.send(it)  
    }  
    channel.close()  
}  

launch {  
    for (value in channel) {  
        println("Received: $value")  
    }  
}  

Здесь корутины обмениваются числами от 0 до 4. После отправки всех данных канал закрывается.