【问题标题】:doOnSubscribe is called on IO thread在 IO 线程上调用 doOnSubscribe
【发布时间】:2019-03-28 16:54:20
【问题描述】:

我有以下代码:

checkZipCode.exec(it)
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .doOnSubscribe {
        Timber.d("Main thread: ${Looper.getMainLooper().isCurrentThread}")
        view.showLoading(true)
    }
    .doOnDispose { view.showLoading(false) }
    .flatMapMaybe { isZipValid ->
        if (isZipValid) {
            userModel.zipCode = it.toString()
            saveUser.exec(userModel)
            autoSelectCityIfSingle.exec()
        } else {
            // TODO: Should show error here?
            Maybe.empty()
        }
    }
    .subscribe(...)

日志是:Main thread: false

我认为doOnSubscribe 是在它上面的最新调度程序上调用的。不是吗?

【问题讨论】:

    标签: android multithreading kotlin rx-java2


    【解决方案1】:

    订阅执行路径实际上并不是observeOn 作用的发射。看 this question。如果你真的想在你的链中那个位置的主线程上发生一些事情,也许你可以在另一个 Observable 中进行 flatMap ,它会在它的 doOnSubscribe 中做一些事情(因为这将发生在发射线程上,这是主线程在这里)。

    【讨论】:

      【解决方案2】:

      好吧,doOnSubscribesubscribe() 在同一个线程上执行。

      我遇到了问题,因为在 I/O 线程上调用了 subscribe()。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-19
        • 1970-01-01
        • 1970-01-01
        • 2014-10-03
        • 2014-01-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多