【问题标题】:RxJava multiple subscribeOn() in chain链中的 RxJava 多个 subscribeOn()
【发布时间】:2019-06-29 09:16:16
【问题描述】:

我想知道当我们在 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()) 调用会有什么影响/效果?

感谢您对此的任何见解

【问题讨论】:

    标签: android rx-java rx-java2


    【解决方案1】:

    它看起来不会有任何影响。无论您将subscribeOn 放在链中的哪个位置都会产生相同的效果。

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

    来自 Rx 文档:

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

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

    【讨论】:

    • hmm.. 这对其他 subscribeOn() 呼叫意味着什么? (他们会不会毫无必要地创建另一个线程)。有什么方法可以测试实际上只创建/使用了一个线程吗?
    • 它将使用链接调用的第一个subscribeOn 的线程。您可以查看本文中的示例(subscribeOn() gotchas 部分):proandroiddev.com/…
    猜你喜欢
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    • 2018-05-31
    • 2019-05-26
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    相关资源
    最近更新 更多