本篇解析 example-flow-36.kt。学习如何在不阻塞当前执行流的情况下收集 Flow。
1. 核心操作符:launchIn
launchIn(scope) 是一个末端操作符,它会启动一个新的协程来收集流。
特点:
- 非阻塞:它不会挂起当前的协程。调用它之后,代码会立即向下执行。
- 作用域绑定:它需要一个
CoroutineScope参数,流的生命周期会与这个作用域绑定。
2. 代码解析
1 | events() |
- 结果分析:你会先看到 “Done”,然后再看到 “Event: 1”, “Event: 2” 等日志。
3. 开发者感悟
launchIn 是 Android 开发中最常用的流收集方式。在 Activity 或 Fragment 中,我们通常使用 lifecycleScope 或 viewLifecycleOwner.lifecycleScope 作为参数。它能确保在不阻塞主线程的同时,自动在界面销毁时停止监听,防止内存泄漏。