[英]How to process all events of Observable in one thread, but get the latest value available in another thread in Rxjava?
我在Android中使用RxJava2,但遇到以下問題,但它並非特定於Android。
我有一個PublishSubject
來推送我的所有事件。 我根據不同的事件在代碼的多個部分中調用publishSubject.onNext()
。 但是我在代碼中占據了中心位置,可以訂閱這些事件。 以下是訂閱代碼:
publishSubject
.observeOn(Schedulers.computation())
.map(
// each computation takes about 10ms
// Do some computation and return a `computation` object
)
.observerOn(AndroidSchedulers.mainThread())
.subscribe(
// take the `computation` object and draw on screen
// each drawing takes about 100ms
);
現在,在上述情況下,如果我調用publishSubject.onNext()
100次,則computation
將完成100次,而在屏幕上繪制將進行100次。
事情是我關心100倍的計算。 每個事件都必須計算。 但是,並非每個計算對象都需要繪制。
當在屏幕上繪制第一個computation
對象時,需要花費100ms的時間在MAIN線程中繪制,但是到那時,在COMPUTATION線程中將生成10個新的computation
對象。 因此,我第二次在屏幕上繪制時,我不想繪制第二個computation
對象,而想要繪制最新的computation
對象(可能是第11個計算對象)。
簡而言之,我正在尋找一種可以一直進行所有計算的方法,但是只能在屏幕上繪制當時可用的最新計算對象。
你嘗試過這樣的事情嗎?
publishSubject
.observeOn(Schedulers.computation())
.map(...)
.toFlowable(BackpressureStrategy.LATEST)
.observerOn(AndroidSchedulers.mainThread())
.subscribe(...);
這將確保計算確實發生,但是訂閱將不會接收到時間上太遠的項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.