我有以下代码:

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

最佳答案

订阅执行路径实际上并不是observeOn所执行的操作。看
this question。如果您确实希望在链中该位置的主线程上发生某些事情,也许您可​​以在另一个Observable中使用flatMap在其doOnSubscribe内执行某些操作(因为这将在发射线程上发生,这是此处的主线程) 。

10-07 22:46