阅读了多个博客文章和文档后,我得出的结论是,将在工作线程上执行以下doOnSubscribe
:
Observable.just(1)
.observeOn(Schedulers.io())
.doOnSubscribe(__ -> Log.d("Testing", "Testing")) // Shouldn't this be on worker thread?
.subscribe();
但是在调试之后,我看到
doOnSubscribe
在主线程上执行。我以为doOnSubscribe
与其他运算符相似,因此当与subscribeOn
和observeOn
结合使用时,具有相似的线程行为。我想念什么?如何将
doOnSubscribe
执行移到后台线程? 最佳答案
subscribeOn
和observeOn
对doOnSubscribe
没有影响,因为运算符之间的连接是在调用方线程上建立的,以支持立即取消。您必须以某种方式推迟对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()
关于android - 在主线程上调用doOnSubscribe,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50075574/