首页 > 解决方案 > 在 IO 线程上调用 doOnSubscribe

问题描述

我有以下代码:

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是在它上面的最新调度程序上调用的。不是吗?

标签: androidmultithreadingkotlinrx-java2

解决方案


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


推荐阅读