0
我对subscribeOn
运营商的工作有些怀疑。我读了一些关于这方面的文章。subscribeOn是如何工作的
该observeOn
是很容易理解,它只改变downstram,并改变影响所有的downstream
。
但正如文章subscribeOn can be put in any place in the stream because it affects only the time of subscription.在说:
要理解这一点,我做了samlpe,并试图在每个时间点记录的线程。
Observable.just("Hello")
.map(s -> {
Log.d(TAG, s + " in " + Thread.currentThread());
return 1;
})
.subscribeOn(Schedulers.newThread())
.map(integer -> {
Log.d(TAG, integer + " in " + Thread.currentThread());
return true;
})
.map(aBoolean -> {
Log.d(TAG, aBoolean + " in " + Thread.currentThread());
return 11.0;
})
.subscribeOn(Schedulers.computation())
.subscribe(aDouble -> {
Log.d(TAG, "accept in " + Thread.currentThread());
Log.d(TAG, "accept: " + aDouble);
});
结果是
Hello in Thread[RxNewThreadScheduler-1,5,main]
1 in Thread[RxNewThreadScheduler-1,5,main]
true in Thread[RxNewThreadScheduler-1,5,main]
accept in Thread[RxNewThreadScheduler-1,5,main]
accept: 11.0
这里两次,我在申请subscribeOn
,但每次添加的第一个似乎在整个流应用。
任何人都可以请用简单的话来解释它是如何实际工作的,因为我是一个初学者,很难消化这个!
在此先感谢
如果我记得是正确的,'subscribeOn'描述开始,即哪个线程将启动排放。如果有多个声明,只会使用第一个。 –
最接近观察者的'subscribeOn'获胜。第二个被忽略 – Raghunandan
SubscribeOn将被用于创建observable。所以创建只能在线程上进行,所以只有subscribeOn对于一个可观察对象才是可能的。 –