请解释 Kotlin Flow 的概念,并对比它与 RxJava 在核心设计和使用上的主要差异。
考察说明
考察对 Kotlin 协程响应式流模型的理解及其与 RxJava 的对比能力。
回答思路
- 【回答框架 1】Flow 是 Kotlin 协程中用于处理异步数据流的冷流,基于挂起函数和协程上下文,支持背压(通过挂起实现),由 collect 触发执行。
- 【回答框架 2】RxJava 是基于 Reactive Streams 规范的库,核心是 Observable/Single 等类型,通过操作符链式处理异步事件,支持线程调度和背压策略(如 BUFFER、DROP)。
- 【回答框架 3】区别:Flow 天然集成协程,使用挂起函数实现异步,取消协作式,操作符如 map/filter 是挂起安全的;RxJava 有自己的调度器 Schedulers 和背压策略,学习成本高。
- 【回答框架 4】适用场景:Flow 适合协程为主的 Kotlin 项目,RxJava 适合已有 Rx 生态或需要复杂操作符和背压控制的场景。
- 【关键点 1】Flow 是冷流,collect 时执行,支持协程取消。
- 【关键点 2】RxJava 类型丰富,背压策略明确,Flow 用挂起处理背压。
- 【关键点 3】Flow 操作符是挂起友好的,RxJava 需要调度器。
- 【关键点 4】选型取决于项目技术栈。
- 【易错点 1】不要认为 Flow 不支持背压,它通过挂起自然实现。
- 【易错点 2】不要忽略 Flow 是冷流,多次 collect 会重新执行。