RxJava链中的多个subscribeOn()

时间:2019-06-29 09:16:16

标签: android rx-java rx-java2

我想知道当RxJava链中有多个subscribeOn()方法时会发生什么。例如,如果我的链条是这样的,

    Single.fromCallable { repository.apiCall1() }
        .subscribeOn(Schedulers.io())
        .flatMap { result -> Single.fromCallable { repository.apiCall2() } }
        .subscribeOn(Schedulers.io())
        .map { // do something }
        .observeOn(Schedulers.ui())

这是否意味着API调用运行的线程不相同?删除上面这个链中的第一个subscribeOn(Schedulers.io())调用会产生什么影响?

赞赏对此的任何见识

1 个答案:

答案 0 :(得分:2)

它看起来没有任何作用。将subscribeOn放在链中的哪个位置都具有相同的效果都没关系。

根据文档,observeOn的行为有所不同,因此您可以在链中的任何位置更改观察结果的线程。

来自Rx文档:

  

SubscribeOn运算符指定Observable将使用哪个线程   无论在运营商链中的哪个点都可以开始运营   该操作员被称为。另一方面,ObserveOn影响   Observable将在该运算符出现的位置使用的线程。   因此,您可以在不同的时间多次调用ObserveOn   可观察算子链中的点,以便改变   这些运算符中的某些运算符在哪个线程上运行。

http://reactivex.io/documentation/operators/subscribeon.html