ProgressBar -Anzeige mit einer Verzögerung des Optionsmenüs Klick auf das Optionsmenü
-
27-10-2019 - |
Frage
Ich habe das Problem mit der Anzeige von ProgressBar Onitem, die im Optionsmenü ausgewählt wurden. Mein Code ist da:
case R.id.mnuLogout:
showDialog(Constants.PROGRESS_DIALOG);
closeOptionsMenu();
if(MyApp.IsLoggedOut())
handler.sendEmptyMessage(Constants.LOGOUT);
else
handler.sendEmptyMessage(Constants.ERROR_MSG);
ProgressBar wird nach Abschluss der islogged -Methode angezeigt.
Lösung
Du rufst an get()
Gleich nach dem AsyncTask
als ausgeführt und verlieren asynchrones Verhalten, weil diese Methode wartet, bis die Aufgabe beendet ist. Sie sollten den gesamten Code in Try/Catch -Block hinzufügen AsyncTask.onPostExecute()
Methode und entlassen auch den Dialog aus dieser Methode.
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();
}
}
Und ich glaube nicht, dass Sie Nachrichten an den Handler senden müssen. Das dispatchLogoutFinished()
wird auf dem UI -Thread ausgeführt, sodass keine Synchronisation erforderlich ist.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow