链中的 RxJava 多个 subscribeOn()

Boo*_*per 7 android rx-java rx-java2

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

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

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

感谢您对此的任何见解

Jai*_*rez 5

看起来不会有任何效果。无论您将其放在subscribeOn链中的哪个位置,都将具有相同的效果。

\n\n

根据文档,observeOn具有不同的行为,因此您可以更改您\xc2\xb4在链中的任何点观察结果的线程。

\n\n

来自 Rx 文档:

\n\n
\n

SubscribeOn 运算符指定 Observable 将开始在哪个线程上运行,无论该运算符在运算符链中的哪个点被调用。另一方面,ObserveOn 会影响 Observable 将在该运算符出现的下方使用的线程。因此,您可以在 Observable 运算符链中的不同点多次调用 ObserveOn 以便更改其中某些运算符在哪些线程上运行。

\n
\n\n

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

\n

  • 它将使用链接调用的第一个“subscribeOn”的线程。您可以查看本文中的示例(*subscribeOn() 陷阱* 部分):https://proandroiddev.com/understanding-rxjava-subscribeon-and-observeon-744b0c6a41ea (2认同)