Что такое Channel

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

Ответ

Канал (Channel) — это потокобезопасный способ передачи данных между корутинами. Он похож на BlockingQueue, но без блокировки потоков, используя suspend-функции.

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

  • Может передавать данные между разными корутинами
  • Поддерживает буферизацию (разные capacity)
  • Имеет методы send() и receive() (suspend-функции)

Пример:

val channel = Channel<Int>()
launch {
    for (i in 1..5) channel.send(i)
    channel.close()
}
launch {
    for (value in channel) println(value)
}

Типы каналов:

  • RENDEZVOUS (по умолчанию) — без буфера
  • UNLIMITED — неограниченный буфер
  • CONFLATED — хранит только последнее значение