我有3個連續操作組成的下載過程:preProcess
,downloading
,postProcess
。每個操作具有異步性(preProcess
調用API,downloading
等待文件下載等)。 UI必須顯示哪些操作正在執行(例如「正在準備...」,「正在下載...」,「解包...」)。 我看到整個過程爲Observable
,它發出整個操作的當前狀態。每個操作也是可觀察的,在執行開始時發出其狀態並在執行後完成。如何使用rxJava實現一系列連續操作?
Observable.OnSubscribe<DownloadStatus>() {
@Override
public void call(Subscriber<? super DownloadStatus> subscriber) {
subscriber.onNext(DownloadStatus.PRE_PROCESS);
doPreProcess()
.subscribe(new Action1<File>() {
@Override
public void call(File file) {
subscriber.onCompleted();
}
});
}
});
Observable<DownloadStatus> mDonwloadingOperation = Observable.create(new Observable.OnSubscribe<DownloadStatus>() {
@Override
public void call(final Subscriber<? super DownloadStatus> subscriber) {
subscriber.onNext(DownloadStatus.DOWNLOADING);
doDownloading()
.subscribe(new Action1<File>() {
@Override
public void call(File file) {
subscriber.onCompleted();
}
});
}
});
Observable<DownloadStatus> mPosProcessOperation = Observable.create(new Observable.OnSubscribe<DownloadStatus>() {
@Override
public void call(Subscriber<? super DownloadStatus> subscriber) {
subscriber.onNext(DownloadStatus.POST_PROCESS);
doPostProcess()
.subscribe(new Action1<File>() {
@Override
public void call(File file) {
subscriber.onCompleted();
}
});
}
});
一方面每個操作都應該等到以前的操作完成。另一方面,用戶需要接收每個發射狀態(例如,PRE_PROCESS-> DOWNLOADING-> POST_PROCESS-> onComplete)
我不能使用merge
,因爲每個操作應該取決於前一個操作的完成。 我不能使用flatMap
因爲我不知道如何傳播發射狀態。我認爲Subject
可能是解決方案,但我也不知道如何傳播發射狀態。
如何用rxJava解決這個問題?感謝任何想法/線索。