簡體   English   中英

如何在一個線程中處理Observable的所有事件,但是如何在Rxjava中獲得另一個線程中可用的最新值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM