RxJava 算是现在 Android 中非常常用的一个开源库了,例如和 retrofit 配合完成网络请求封装。
我大概看到以下几个关键词都能完成网络请求的发送:
@GET("query")
Observable<Article> getArticle(...)
其中Observable可以替换为Flowable,Single,Maybe,问题来了:
- 这几个关键词有什么区别呢?分别在什么场景下比较适用?
- 在网络请求和 retrofit 配合这块,哪个关键词更加合理呢?
最近有点忙,加上问答有点难想,但是还是准备保证下更下频率,工作日周 2-3 问,大家监督。
更多问答 >>
-
每日一问 | Java中匿名内部类写成 lambda,真的只是语法糖吗?
2021-01-11 00:00 -
每日一问 | Java 中的 lambda 与 Android 中的 lambda 有什么不同?
2021-01-31 17:20 -
每日一问 | Android 中两种设置线程优先级的方式,有何区别?
2021-01-27 23:59 -
2021-01-31 16:58
-
每日一问 | 类要先加载、链接、初始化才能实例化,有特殊Case吗?
2021-02-21 20:15 -
每日一问 | View invalidate() 相关的一些细节探究~
2020-12-27 22:38 -
每日一问 | Call requires API level 23 (current min is 14) 扫描出来的原理是?
2020-12-27 22:39 -
每日一问 | 当Unsafe遇上final,超神奇的事情发生了?
2020-11-02 00:16 -
每日一问 | 属性动画与硬件加速的相遇,不是你想的那么简单?
2020-10-26 23:45 -
每日一问 | 关于 RecyclerView$Adapter setHasStableIds(boolean)的一切
2020-10-26 23:44

RxJava 五种“生产者”的区别:
根据五种“生产者”的特性,合理的场景使用:
总结:
一般来说,我们一个接口,只是一次请求一次返回,所以我们通常使用 Single 与 Retrofit 是更为合理。即使返回结果需要再次处理,也可以使用操作符在各种“生产者”之间相互转换(toSingle、toObservable、toFlowable、toMaybe、toCompletable),使用对应的操作符。我查了下资料,这些构造一个Rxjava流的的差别就在于其中的Emitter不一样,其中emitter负责串联上下游流。
举个例子Observable可以发送多个数据源,还有就是必须要有一个complete,否则不会取消。
Flowable则不一样,负责处理背压情况,背压出现在输入流的输入速度远远大于接受流的处理速度,这种时候就要有类似线程池内的异常Handler处理。
而Single 则因为Emitter只需要发射一个Next就可以继续向下执行了,而不需要像Observable一样可以多次调用next,最后需要执行complete。
其中还有一种Completableis 基本和Single一样,只是emitter只需要发射complete方法就行了。
最后Maybe 则像是一种single和Completableis的结合体,他的next方法允许发射一个null或者一个对象。