Annullare AsyncTask quando l'utente preme il tasto indietro
-
28-09-2019 - |
Domanda
Ho un AsyncTask in cui mostro un ProgressDialog nel OnPreExecute, e nascondere di nuovo in OnPostExecute, qualcosa come
final class UploadTask extends AsyncTask {
ProgressDialog dialog = new ProgressDialog(...);
protected onPreExecute() {
dialog.show();
}
protected onPostExecute() {
dialog.hide();
}
};
La finestra di dialogo è annullabile e infatti se ne va quando si preme il pulsante Annulla durante l'esecuzione del AsyncTask.
Quando questo accade, vorrei eseguire del codice per annullare l'AsyncTask così (in questo momento, anche pensato che ProgressDialog va via, l'AsyncTask continua a funzionare e, infine, completa). Ho provato derivante mia classe da ProgressDialog e poi fare
setOnDismissListener(new OnDismissListener() {
@Override public void onDismiss(DialogInterface d) {
/* do something */
}
};
(o qualcosa di simile con un OnCancelListener), ma questo semplicemente non viene mai chiamato.
Tutte le idee? Ho solo bisogno di un meccanismo per l'utente di cancellare un AsyncTask esecuzione mentre un ProgressDialog sta mostrando.
Soluzione
Non ho testato questo, ma provare qualcosa di simile:
final class UploadTask extends AsyncTask implements OnDismissListener{
ProgressDialog dialog = new ProgressDialog(...);
protected onPreExecute() {
dialog.setOnDismissListener(this);
dialog.show();
}
protected onPostExecute() {
dialog.hide();
}
@Override
public void onDismiss(DialogInterface dialog) {
this.cancel(true);
}
};
Altri suggerimenti
Penso che si sta cercando questo: onCancelled ()
http://developer.android.com/reference/android/os/ AsyncTask.html