我有一个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