Flow 监听:36. launchIn 并发监听

本篇解析 example-flow-36.kt。学习如何在不阻塞当前执行流的情况下收集 Flow。

1. 核心操作符:launchIn

launchIn(scope) 是一个末端操作符,它会启动一个新的协程来收集流。

特点:

  • 非阻塞:它不会挂起当前的协程。调用它之后,代码会立即向下执行。
  • 作用域绑定:它需要一个 CoroutineScope 参数,流的生命周期会与这个作用域绑定。

2. 代码解析

1
2
3
4
events()
.onEach { event -> println("Event: $event") }
.launchIn(this) // 在当前作用域启动新协程收集
println("Done") // 这行会立即执行
  • 结果分析:你会先看到 “Done”,然后再看到 “Event: 1”, “Event: 2” 等日志。

3. 开发者感悟

launchIn 是 Android 开发中最常用的流收集方式。在 ActivityFragment 中,我们通常使用 lifecycleScopeviewLifecycleOwner.lifecycleScope 作为参数。它能确保在不阻塞主线程的同时,自动在界面销毁时停止监听,防止内存泄漏。

,