阅读了多个博客文章和文档后,我得出的结论是,将在工作线程上执行以下doOnSubscribe:

Observable.just(1)
            .observeOn(Schedulers.io())
            .doOnSubscribe(__ -> Log.d("Testing", "Testing")) // Shouldn't this be on worker thread?
            .subscribe();

但是在调试之后,我看到doOnSubscribe在主线程上执行。我以为doOnSubscribe与其他运算符相似,因此当与subscribeOnobserveOn结合使用时,具有相似的线程行为。

我想念什么?如何将doOnSubscribe执行移到后台线程?

最佳答案

subscribeOnobserveOndoOnSubscribe没有影响,因为运算符之间的连接是在调用方线程上建立的,以支持立即取消。您必须以某种方式推迟对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/

10-09 04:38