Annuler AsyncTask lorsque l'utilisateur appuie sur le bouton Retour
-
28-09-2019 - |
Question
J'ai un AsyncTask dans lequel je montre un ProgressDialog dans le OnPreExecute, et le cacher à nouveau dans onPostExecute, quelque chose comme
final class UploadTask extends AsyncTask {
ProgressDialog dialog = new ProgressDialog(...);
protected onPreExecute() {
dialog.show();
}
protected onPostExecute() {
dialog.hide();
}
};
La boîte de dialogue est résiliable et même disparaît lorsque j'appuie sur le bouton d'annulation pendant l'exécution du AsyncTask.
Dans ce cas, je voudrais lancer un code pour annuler la AsyncTask ainsi (en ce moment, même pensé qu'il ProgressDialog va, le AsyncTask continue à fonctionner et se termine par la suite). J'ai essayé de tirer ma propre classe de ProgressDialog puis faire
setOnDismissListener(new OnDismissListener() {
@Override public void onDismiss(DialogInterface d) {
/* do something */
}
};
(ou quelque chose de similaire avec un OnCancelListener), mais cela devient tout simplement jamais appelé.
Toutes les idées? Je viens besoin d'un mécanisme pour l'utilisateur d'annuler une course AsyncTask alors qu'un ProgressDialog montre.
La solution
Je n'ai pas testé, mais essayer quelque chose comme ceci:
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);
}
};
Autres conseils
Je pense que vous cherchez ceci: onCancelled ()
http://developer.android.com/reference/android/os/ AsyncTask.html