android - 在 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
是在它上面的最新调度程序上调用的。不是吗?
解决方案
订阅执行路径并不是真正observeOn
起作用的发射。看到
这个问题。如果你真的想在你的链中那个位置的主线程上发生一些事情,也许你可以在另一个Observable
会在它的内部做某事的flatMap doOnSubscribe
(因为这将发生在发射线程上,这是这里的主线程)。
推荐阅读
- amazon-web-services - 如何从公共 s3 url 获取整个对象列表
- wso2 - WSO2 esb 验证器调解器未显示确切失败
- python - 将字典插入使用 Python 中的 JSON 创建的 SQL 数据库
- django - 使用平面结构代码提示表单错误
- javascript - 如何通过承诺检查异步函数何时完成执行?
- azure-devops - 部署组目标机器代理和 VSTS 服务器之间的连接如何工作?
- performance - CPU 利用率压力测试
- angular - 无法让 automapper-ts 在 Angular 2+ 项目中工作
- c# - 将我的控制器工厂设置为自定义控制器后,我可以使用 DefaultControllerFactory
- css - 如何在asp.net后面的.ashx.cs代码中添加css