【发布时间】:2016-08-14 09:53:59
【问题描述】:
我有一个 Observables 链和一个对话框,在所有内容完成后都会关闭。顺序是这样的: 1 api 调用获取 ResponseBody 2 采取响应体过程(不是ui线程) 3个其他进程(不是ui线程)
在第一次通话期间,对话没问题,当涉及到第二次通话时,我收到了第一次通话的正文,对话被阻止,其余时间保持不变。
最后,一切都完成后,但我收到一条警告说“应用程序正在主线程上做很多工作”。
我没有在主线程上做任何事情,所以我真的不明白如何解除对对话框的阻塞并将所有内容都放在单独的线程上。
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()中输入日志并查找错误
标签: android multithreading rx-java observable concatmap