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對於一個可觀察對象纔是可能的。 –