After reading multiple blog posts and documentation, I came to the conclusion that following doOnSubscribe
will be executed on a worker thread:
Observable.just(1)
.observeOn(Schedulers.io())
.doOnSubscribe(__ -> Log.d("Testing", "Testing")) // Shouldn't this be on worker thread?
.subscribe();
But after debugging, I see doOnSubscribe
is executed on main thread. I thought doOnSubscribe
is similar to other operators and hence has similar threading behavior when coupled with subscribeOn
and observeOn
.
What am I missing? How can I move doOnSubscribe
execution to background thread?
By default doOnSubscribe
executes on the current thread. To change the thread in which doOnSubscribe
is executed put subscribeOn
below it. Tested with rxjava2
version 2.2.14
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With