android - doOnSubscribe 在主线程上被调用
问题描述
在阅读了多篇博客文章和文档后,我得出结论,以下doOnSubscribe
将在工作线程上执行:
Observable.just(1)
.observeOn(Schedulers.io())
.doOnSubscribe(__ -> Log.d("Testing", "Testing")) // Shouldn't this be on worker thread?
.subscribe();
但调试后,我看到doOnSubscribe
是在主线程上执行的。我认为与其他运算符相似,因此与anddoOnSubscribe
结合时具有相似的线程行为。subscribeOn
observeOn
我错过了什么?如何将doOnSubscribe
执行移至后台线程?
解决方案
subscribeOn
并且observeOn
没有影响,doOnSubscribe
因为运算符之间的连接是在调用者线程上建立的,以支持立即取消。您必须以某种方式推迟对 a 的订阅doOnSubscribe
,例如:
Observable.defer(() ->
Observable.just(1)
.doOnSubscribe(s -> Log.d("Testing", "Testing"))
)
.subscribeOn(Schedulers.io())
.subscribe();
或者
Observable.just(1)
.subscribeOn(Schedulers.io())
.flatMap(v ->
Observable.just(1)
.doOnSubscribe(s -> Log.d("Testing", "Testing"))
)
.subscribe()
推荐阅读
- react-native - 在 react-native 中删除下拉列表下的行
- linux-kernel - 如何使用 Linux 的 gpiod 库将引脚配置为带有上拉电阻的输入?
- apache-spark - 定期删除 EMR 集群日志
- python - recogniser.listen(source) 不会停止收听
- android - Flutter 中的参数格式不正确
- python - Django:如何在html中的同一渲染上加载来自多个对象的多个图像
- python - 高效读取python中的文本文件
- r - Shiny 应用程序的集成测试
- airflow - 气流 HdfsSensor 未检测到
- javascript - 使用特定的 CSS (clipboard.js) 将表格复制并粘贴到 MS Word