オプション]メニューをクリックして遅延が遅れたProgressBarディスプレイ
-
27-10-2019 - |
質問
オプションメニューで選択されたProgressBar onitemを表示することに問題に直面しています。私のコードはここにあります:
case R.id.mnuLogout:
showDialog(Constants.PROGRESS_DIALOG);
closeOptionsMenu();
if(MyApp.IsLoggedOut())
handler.sendEmptyMessage(Constants.LOGOUT);
else
handler.sendEmptyMessage(Constants.ERROR_MSG);
ProgressBarは、Isloggedメソッドの完了後に表示されます。
解決
あなたは呼んでいます get()
直後 AsyncTask
この方法はタスクが終了するまで待機するため、実行されて非同期動作を失います。トライ/キャッチブロックにすべてのコードを追加する必要があります AsyncTask.onPostExecute()
また、このメソッドからダイアログを却下します。
void doLogout() {
new LogoutTask().execute();
}
void dispatchLogoutFinished() {
dismissDialog(Constants.PROGRESS_DIALOG);
if (MyApp.IsLoggedOut()) {
// do something
} else {
// do something else
}
}
private class LogoutTask extends AsyncTask<Void, Void, Void> {
protected void onPreExecute() {
TheActivity.this.showDialog(Constants.PROGRESS_DIALOG);
}
protected Void doInBackground(Void... params) {
return null;
}
protected void onPostExecute(Long result) {
TheActivity.this.dispatchLogoutFinished();
}
}
そして、私はあなたがハンドラーにメッセージを送る必要はないと思います。 dispatchLogoutFinished()
UIスレッドで実行されるため、同期する必要はありません。
所属していません StackOverflow