affichage ProgressBar avec un certain retard dans le clic de menu d'options
-
27-10-2019 - |
Question
Je suis face à la question avec l'affichage onItem progressbar sélectionné dans le menu d'options. Mon code est ici:
case R.id.mnuLogout:
showDialog(Constants.PROGRESS_DIALOG);
closeOptionsMenu();
if(MyApp.IsLoggedOut())
handler.sendEmptyMessage(Constants.LOGOUT);
else
handler.sendEmptyMessage(Constants.ERROR_MSG);
Progressbar est affichée après la fin du procédé IsLogged.
La solution
Vous appelez à droite get()
après la AsyncTask
comme exécuté et lose comportement asynchrone car cette méthode attend jusqu'à ce que la tâche est terminée. Vous devez ajouter tout le code dans bloc try / catch à la méthode de AsyncTask.onPostExecute()
et de rejeter également la boîte de dialogue de cette méthode.
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();
}
}
Et je ne pense pas que vous avez besoin d'envoyer des messages au gestionnaire. Le dispatchLogoutFinished()
est exécuté sur le thread d'interface utilisateur, donc il n'y a pas besoin de synchronisation.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow