Вы вызываете get()
сразу после AsyncTask
как выполненное и теряете асинхронное поведение, потому что этот метод ожидает, пока задача не будет завершена. Вы должны добавить весь код блока try / catch в метод 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()
выполняется в потоке пользовательского интерфейса, поэтому синхронизация не требуется.