Работал ли с Channel

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

Ответ

Да, работал. Channel — это часть Kotlin Coroutines, предоставляющая потокобезопасный способ передачи данных между корутинами. Это hot stream, который может быть закрыт и завершён с ошибкой.

Пример:

val channel = Channel<Int>()  

// Producer
launch {
    repeat(5) { i ->
        channel.send(i)
    }
    channel.close()
}  

// Consumer
launch {
    for (value in channel) {
        println(value) // 0, 1, 2, 3, 4
    }
}

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

  • send() — приостанавливает корутину, если буфер заполнен
  • receive() — приостанавливает, пока нет данных
  • Можно настраивать буфер (RENDEZVOUS, UNLIMITED, CONFLATED)
  • Используется для одноразовых событий (например, UI actions)