Flow 和 RxJava 对比
二者都是基于响应式编程理念,一种面向数据流和变化传播的声明式编程。
响应式编程见仁见智了,某种程度上能够让代码更优雅,但是我个人还是更喜欢协程的结构化并发理念。
Flow和RxJava相同点
1.Stream Api概念
2.强大操作符
3.优化异步回调,切换线程方便
4.默认冷流,仅订阅/收集的时候才发送数据
Flow和RxJava不同点:
1.RxJava相对臃肿,Flow是使用kotlin提供的suspend基建来实现异步,RxJava必须声明数据类型实现异步。
如Observable,Observer
2.Flow collect基于协程,这是缺点,也是优点,如果项目整体使用协程,会很方便。
比如:
flowOf("1", "2")
.map { query(it) }
.onEach { println(it) }
.launchIn(lifecycleScope)
3.Flow上下文保证,使用lifeCycleScop执行的collect能够保证一定在主线程;
而异步返回的Observable,不确定是否切过线程。
总结
kotlin项目拥抱Flow