本篇解析 example-flow-15.kt。学习如何改变发射端的线程。
1. 核心操作符:flowOn
flowOn 是改变 Flow 发射上下文的唯一正确方式。
工作原理:
- 向上游生效:
flowOn只会改变它之前(上游)的操作符或构建器的上下文。 - 不影响下游:它不会改变
collect或它之后的操作符的上下文。
2. 代码解析
1 | fun simple(): Flow<Int> = flow { |
3. 开发者感悟
flowOn 实际上在后台创建了一个 Channel。它让发射端在线程 A 运行,收集端在线程 B 运行,实现了异步的并发生产和消费。在 Android 开发中,我们经常用它来在 IO 线程请求数据,然后在 Main 线程刷新 UI。