本篇解析 example-channel-02.kt。学习如何优雅地结束通道通信。
1. 核心操作:close()
当生产者不再发送数据时,应调用 close()。
- 信号传递:
close()会向通道发送一个特殊的“结束令牌”。 - 接收端感知:接收端在处理完缓冲区剩余数据后,会自动感知到通道已关闭并停止等待。
2. 核心语法:for 循环遍历
你可以像遍历 List 一样直接使用 for (y in channel)。
- 自动结束:当通道被
close()且数据取完后,循环会自动终止。
3. 开发者感悟
close() 是一种契约。它告诉消费者:“货发完了,你可以下班了。”在 Android 中,如果你使用 Channel 传递文件上传进度,上传完成后务必调用 close(),这样 UI 层的监听循环才能正常退出,避免不必要的挂起。