kotlin Channel的用法

channel相当于管道,协程间通信用。测试下:

Kotlin 复制代码
private fun tsetChannel() {
        lifecycleScope.launch {
            val channel = Channel<Int>()
            launch {
                for (i in 1..5) {
                    Log.d("zxzx", "开始发送数据:$i")
                    channel.send(i)
                }
                channel.close()
            }
            for (i in channel) {
                Log.d("zxzx", "接收到数据:$i")
            }
//           Log.d("zxzx", "receive: ${channel.receive()}") // 抛异常: Channel was closed
        }
        Log.d("zxzx", "东风不与周郎便,铜雀春深锁二乔。")
    }

运行,打印:

ok. 一个协程在发数据,另一个协程接受到数据。

再测试下:

Kotlin 复制代码
fun testProduceAndConsume() {
        GlobalScope.launch {
            val channel = Channel<Int>()

            val producer = GlobalScope.launch(Dispatchers.IO) {
                var i = 0
                while (true) {
                    if (channel.isClosedForReceive) {
                        Log.d("zxzx", "channel已关闭")
                        break
                    }
                    Log.d("zxzx", "生产者生产了:$i")
                    channel.send(i++)
                    delay(1000)
                }
            }

            val consumer = GlobalScope.launch {
                while (true) {
                    val element = channel.receive() // 没数据时会挂起等待数据
                    Log.d("zxzx", "消费者消费了: $element")
                    if (element == 10) {
                        channel.close()
                        break
                    }
                }
            }

            producer.join()
            consumer.join()
            Log.d("zxzx", "所有任务完成")
        }
    }

打印:

ok .

相关推荐
2501_915909061 小时前
iOS应用从开发到上架App Store的完整发布流程与步骤指南
android·ios·小程序·https·uni-app·webview
狗凯之家源码网2 小时前
AI 步数修改提交系统源码应用场景与落地指南
android·数据库·人工智能·运动步数
ZHOUPUYU2 小时前
PHP 9.0 前瞻:下一代 PHP 会带来哪些新功能?
android·开发语言·php
JMchen2 小时前
性能优化——让Native代码飞起来
android·c++·性能优化
ZHOUPUYU3 小时前
PHP 8.2 的核心高级特性,包括只读类、类型系统增强
android·性能优化·php
ZHOUPUYU3 小时前
PHP 8.0 高级技术实战:从新特性到性能优化
android·性能优化·php
不爱说话郭德纲3 小时前
从“点点点”到一键出包:我把 uni-app x Android 离线打包做成了脚本
android·前端·uni-app
事圆则缓4 小时前
Android 崩溃优化与应用稳定性全解析:Crash、ANR、OOM 到线上治理
android
ZHOUPUYU4 小时前
PHP 高级技术实战:从原理到高并发架构落地
android·性能优化·php
stevenzqzq4 小时前
mvi的理解
android·compose