Display ProgressBar con un certo ritardo sul scatto del menu opzioni
-
27-10-2019 - |
Domanda
Sono di fronte il problema con la visualizzazione progressbar onItem selezionato nel menu delle opzioni. Il mio codice è qui:
case R.id.mnuLogout:
showDialog(Constants.PROGRESS_DIALOG);
closeOptionsMenu();
if(MyApp.IsLoggedOut())
handler.sendEmptyMessage(Constants.LOGOUT);
else
handler.sendEmptyMessage(Constants.ERROR_MSG);
Progressbar viene visualizzato dopo il completamento del metodo IsLogged.
Soluzione
si sta chiamando get()
subito dopo la AsyncTask
come un comportamento asincrono eseguito e perdere perché questo metodo attende fino compito è finito. Si dovrebbe aggiungere tutto il codice nel blocco try / catch per il metodo AsyncTask.onPostExecute()
e anche chiudere la finestra da questo metodo.
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();
}
}
E non credo che è necessario inviare i messaggi al gestore. Il dispatchLogoutFinished()
viene eseguito sul thread UI, quindi non c'è necessità di sincronizzazione.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow