在IO线程上调用doOnSubscribe

时间:2019-03-28 16:54:21

标签: android multithreading kotlin rx-java2

我有以下代码:

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

2 个答案:

答案 0 :(得分:2)

订阅执行路径并不是TextFormat所依据的发射。看到 this question。如果您真的想在主链上的某个地方的主线程上发生某些事情,也许您可​​以在另一个PrometheusMeterRegistry内进行flatMap来在其observeOn内执行某些操作(因为这将发生在发射线程上) ,这是这里的主线程。)

答案 1 :(得分:0)

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

我有问题,因为在I / O线程上调用了subscription()。