【问题标题】:Where are the big UseCases to need RXJava in AndroidAndroid 中需要 RXJava 的大用例在哪里?
【发布时间】:2018-02-21 04:34:21
【问题描述】:
这更多是一个架构问题,也可能是一个观点问题。
许多 Android 库在 API 中都有反应式方法。例如Volley
, Volley 有一个很好的JsonObjectRequest 将其放入RequestQueue 并在回调onResponse 中处理响应。
或者在Picasso 中,您也有一个异步调用,只在给定的 ImageView 中加载图片。
在适用于 Android 的新 Persistent Tool ObjectBox 中,您还可以通过反应式方法设置和查询数据库中的数据。
所以我的问题是,RXJava 在 Android 中的巨大需求在哪里? RXJava 在哪些 UseCases 中必不可少?
【问题讨论】:
标签:
android
asynchronous
android-volley
rx-java2
【解决方案1】:
反应式与“观察者模式”不同。回调与响应式不同。自定义的回调接口更加具体,不像 RxJava 的响应式实现那样容易概括。
- RxJava 遵循observable contract,这意味着它的行为在自身内部是一致的,并且该行为很容易推广。
- RxJava 使用一组基本的运算符和 Java 泛型来提供非常丰富的自定义组合。众所周知,
Observable<CustomJsonObject> 的行为方式与 Observable<Long> 相同。
- 给定 (1) 和 (2),您会发现可以组合反应式运算符来获得自定义行为。因此,
customJsonObjectObservable.distinctUntilChanged() 的行为方式与longObservable.distinctUntilChanged() 相同。您无需创建自定义类来存储前一个项目以供比较,因为操作员会为您处理。
- 引入时间流逝或多线程是使用运算符完成的,这些方面也是可组合的。
interval() 运算符提供定期更新,buffer() 运算符收集在一段时间内到达的数据,timeout() 运算符监视数据并在某个时间段内不存在时通知。
第 (4) 点可能是 RxJava 最大的胜利。推理时间的流逝,尤其是在存在多个控制线程的情况下,非常困难。 RxJava 可以控制这些困难的领域。难题并没有那么难解决,非常困难的问题通常可以分解为更容易解决的领域。
Volley 没有解决难题。它提供异步响应,并且只解决了上述第 (1) 项的一小部分。它不涉及 (2)、(3) 或 (4)。