我对 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
非常容易理解,它只会更改downstram,而更改会影响所有subscribeOn
。
但正如文章 subscribeOn can be put in any place in the stream because it affects only the time of subscription.中所述:
为了理解这一点,我做了一个samlpe并尝试在每个时间点记录线程。
<text>
结果是
<svg>
<text x="10" y="10">text</text>
</svg>
这里两次我正在应用int[][][] array = new int[5][][];
// fill with data here
bool result = array[0]?.[3]?.[2] ?? == 3;
,但每次第一次添加的似乎都应用于整个流。
任何人都可以用简单的词语解释它是如何运作的,因为我是初学者,很难消化它!
提前致谢
答案 0 :(得分:2)
subscribeOn
:如果您有多个subscribeOn
,则第一个生效。如果您想在制作subscribeOn
后更改流上的计划程序,请查看observeOn
observeOn
:它将调度程序更改为下游。
例如:
just("Some String") // Computation
.subscribeOn(Schedulers.computation()) // it changes scheduler to computation beginning from source to observer.
.map(str -> str.length()) // Computation
.observeOn(Schedulers.io) //change the scheduler from here till the observer
.map(length -> 2 * length) // io
.subscribe(number -> Log.d("", "Number " + number));// io