Observablesのチェーンがあり、すべてが終了した後に終了するダイアログがあります。 1 api call get ResponseBody 2レスポンスボディプロセスを取る 他の3つのプロセス(UIスレッドではない)Observable concatMapは何らかの理由でメインスレッド上のものを実行します
最初の呼び出しでは、ダイアログが正常に表示され、2番目の呼び出しでダイアログがブロックされ、最初の呼び出しの本文が表示されます。残りの時間です。
すべてが完了した後、最後に警告が表示されます。「アプリケーションはメインスレッドで多くの作業をしています。
私はメインスレッドで何もしていないので、どのように私はダイアログをブロック解除し、すべてを別のスレッドに保つことができるのか分かりません。
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