协程进阶:通道 01. 通道基础 (Channel)

本篇解析 example-channel-01.kt。探讨协程间如何进行异步通信。

1. 核心概念:什么是 Channel?

Channel 在概念上类似于 BlockingQueue。它允许一个协程向其中发送数据,另一个协程从中接收数据。

与队列的区别:

  • 非阻塞挂起:不同于队列的阻塞(Blocking),Channel 的操作是挂起(Suspending)的。当通道满时,send 会挂起;当通道空时,receive 会挂起。

2. 核心参数:容量 (Capacity)

  • **RENDEZVOUS (默认)**:会合通道(容量为 0)。发送者和接收者必须“手拉手”才能完成传递。如果没人收,发送者就挂起。
  • UNLIMITED:无限容量。发送者永远不挂起。
  • BUFFERED:缓冲通道。默认容量为 64,满时挂起。
  • CONFLATED:合并通道。只保留最新值,旧值被覆盖,发送者永不挂起。

3. 开发者感悟

Channel 是实现“通过通信来共享内存”理念的核心。在 Android 中,如果你有一个后台任务在不断产出数据(如下载进度),而 UI 层需要异步接收,Channel 是非常稳健的选择。

,