我正在從遠程URL讀取文件並使用RxJava報告下載進度。文件編寫器Observable發出一系列DownloadProgress對象。由於很多項目正在發射,我使用Observable.sample()來管理背壓。這非常有效 - UI更新以恆定的速率進行,並且沒有背壓問題,但最後的進度更新幾乎總是被忽略。如何在調用rx.Observable.sample()時接收最後的序列發射?
我想收到Observable序列中的最後一項,以便我可以用最終進度更新UI。確保始終發出Observable序列中最後一項的最佳方法是什麼?
Observable<Response> fileReader =
Rx.okHttpGetRequest(url);
OkHttpResponseWriter fileWriter =
Rx.okHttpResponseWriter(outFile);
Subscription subscription = fileReader.flatMap(fileWriter)
.sample(1, TimeUnit.SECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<DownloadProgress>() {
@Override
public void onCompleted() {}
@Override
public void onError(Throwable e) {}
@Override
public void onNext(DownloadProgress progress) {
// I want to receive an update every one second
// I also want to always receive the last progress update
}
});
就處理得'onCompleted' ?如果我理解正確,您需要最後一次更新來處理完成的下載? – 2014-10-01 16:35:20
'DownloadProgress'對象包含我想要向用戶公開的信息,包括從文件中讀取的總字節數。 'onCompleted'通知用戶序列已完成,但不會重新發送序列中的最後一個項目。假設從該值讀取數據至關重要。 – weefbellington 2014-10-01 19:04:17