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 .

相关推荐
落魄Android在线炒饭5 小时前
Android 自定义HAL开发篇之 HIDL篇——从入门到实战(上)
android
plainGeekDev5 小时前
广播接收器 → Flow + Lifecycle
android·java·kotlin
plainGeekDev5 小时前
EventBus → SharedFlow
android·java·kotlin
37手游移动客户端团队1 天前
招聘-高级安卓开发工程师
android·客户端
用户41659673693551 天前
WebView 请求异常排查操作手册
android·前端
Kapaseker1 天前
学不动了,入门 Compose Styles API
android·kotlin
墨狂之逸才2 天前
Android TV WebView 遥控器按键处理:从全透传到白名单
android
plainGeekDev2 天前
MVC 写法 → MVVM
android·java·kotlin
恋猫de小郭2 天前
Flutter Patchwork,不用 Fork 改依赖包源码的第三方工具
android·前端·flutter
三少爷的鞋2 天前
“结构化”这个词,本质上就是——把混乱的东西变成有组织、有规则、有边界的东西
android