我有一個Observable鏈和一個對話框,在完成所有事情後都會關閉。命令是這樣的: 1 api call get ResponseBody 2 take response body process (不是UI線程) 3其他進程(不是UI線程)Observable concatMap在主線程上執行某些操作
在第一次調用期間,對話框沒問題,當涉及到第二個,並且我收到第一個調用的主體時,對話框被阻止,並保持爲是剩下的時間。
最後一切都完成後,但我收到一條警告,說「該應用程序在主線程上做了很多工作」。
我沒有在主線程上做任何事情,所以我不太瞭解如何解除阻塞對話框並將所有內容保留在單獨的線程中。
showLoadingDialog();
mZappAppApis.downloadDatabase(Token.getToken(AppConfig.TOKEN_SYNC_DOWNLOAD_DATABASE))
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.concatMap(new Func1<ResponseBody, Observable<String>>() {
@Override
public Observable<String> call(ResponseBody responseBody) {
return mDatabaseFileHelper.writeDatabaseToFile(responseBody);
}
})
.concatMap(new Func1<String, Observable<String>>() {
@Override
public Observable<String> call(String s) {
return mDatabaseFileHelper.copyDatabaseIntoZappApp();
}
})
.subscribe(new Subscriber<String>() {
@Override
public void onCompleted() {
dismissLoadingDialog();
saveLocalTimestamp(timestamp);
flowContinueInterface.onContinueFlow();
}
@Override
public void onError(Throwable e) {
Logger.e(e, "Error during processing new database");
dismissLoadingDialog();
flowContinueInterface.onStopFlow();
}
@Override
public void onNext(String result) {
Logger.d(result);
}
});
從我可以在你的代碼,'dismissProgressDialog()見'只調用2次,'onCompleted()'你觀察者和'onError()',所以你的觀察者的這些方法中的任何一個都被調用,並且如果你認爲在所有處理完成之前進度已經被取消,那麼這意味着調用'onError()',所以在你的'onError()'中加入一個日誌,並尋找錯誤 – Bhargav