Dhr*_*iya 6 android reactive-programming rx-java2
在阅读了多篇博客文章和文档后,我得出结论,以下doOnSubscribe
将在工作线程上执行:
Observable.just(1)
.observeOn(Schedulers.io())
.doOnSubscribe(__ -> Log.d("Testing", "Testing")) // Shouldn't this be on worker thread?
.subscribe();
Run Code Online (Sandbox Code Playgroud)
但是在调试之后,我看到doOnSubscribe
在主线程上执行了.我认为doOnSubscribe
它与其他运算符类似,因此在与subscribeOn
和相结合时具有类似的线程行为observeOn
.
我错过了什么?如何将doOnSubscribe
执行移至后台线程?
aka*_*okd 14
subscribeOn
和observeOn
有没有影响doOnSubscribe
,因为运营商之间的连接,以便支持立即取消来电线程上建立的.您必须以doOnSubscribe
某种方式将订阅推迟到a ,例如:
Observable.defer(() ->
Observable.just(1)
.doOnSubscribe(s -> Log.d("Testing", "Testing"))
)
.subscribeOn(Schedulers.io())
.subscribe();
Run Code Online (Sandbox Code Playgroud)
要么
Observable.just(1)
.subscribeOn(Schedulers.io())
.flatMap(v ->
Observable.just(1)
.doOnSubscribe(s -> Log.d("Testing", "Testing"))
)
.subscribe()
Run Code Online (Sandbox Code Playgroud)
默认情况下doOnSubscribe
在当前线程上执行。doOnSubscribe
要更改执行的线程,请将其放在subscribeOn
其下方。
Observable.just(1)
.doOnSubscribe(s -> System.out.println("doOnSubscribe thread " + Thread.currentThread().getName())) //IO thread
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.computation())
.subscribe(s -> {
System.out.println("subscribing thread " + Thread.currentThread().getName());//Computation thread
});
Thread.sleep(100);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1480 次 |
最近记录: |