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 .

相关推荐
带娃的IT创业者11 小时前
Python 异步编程完全指南(二):深入 asyncio 核心概念
开发语言·python·协程·事件循环·asyncio·异步编程
aaajj13 小时前
【Android】appops学习
android·学习
煤球王子14 小时前
学习记录:Android14中的Wifi_Direct(P2P)
android
找藉口是失败者的习惯14 小时前
【Android】Android 车机 + AI Agent 有没有搞头?
android·人工智能
用户0044521593014 小时前
从 Gradle 到 Transform:Android 编译开发 Part 1 - Gradle 构建初探
android
用户0044521593014 小时前
Android studio连接GitLab及使用(Windows版本)
android
zhouping@15 小时前
polarctf2025秋
android·web安全·php
0xSec笔记本挖呀瓦呀挖15 小时前
OpenClawWeComzh 实战:安卓 APK 分析与手机取证全自动化基础玩法
android·web安全·网络安全·智能手机·自动化·取证·电子数据取证
jolimark15 小时前
【mysql部署】在ubuntu22.04上安装和配置mysql教程
android·mysql·adb
YSoup15 小时前
MAT最新下载地址及Android内存泄露排查简单使用
android