Cancelar AsyncTask cuando el usuario pulsa el botón de retroceso
-
28-09-2019 - |
Pregunta
Tengo una AsyncTask en el que muestro una ProgressDialog en el OnPreExecute, y se esconden de nuevo en onPostExecute, algo así como
final class UploadTask extends AsyncTask {
ProgressDialog dialog = new ProgressDialog(...);
protected onPreExecute() {
dialog.show();
}
protected onPostExecute() {
dialog.hide();
}
};
El diálogo es revocable y de hecho desaparece cuando se presiona el botón Cancelar durante la ejecución de la AsyncTask.
Cuando esto sucede, me gustaría correr un cierto código para cancelar el AsyncTask también (en este momento, hasta pensaban que ProgressDialog desaparece, la AsyncTask sigue funcionando y, finalmente, completa). He intentado derivar mi propia clase de ProgressDialog y luego hacer
setOnDismissListener(new OnDismissListener() {
@Override public void onDismiss(DialogInterface d) {
/* do something */
}
};
(o algo similar con un OnCancelListener), pero esto simplemente no se vuelve a llamar.
Algunas ideas? Sólo necesito algún mecanismo para que el usuario cancelar una AsyncTask corriendo mientras que un ProgressDialog está mostrando.
Solución
No he probado esto, pero intentar algo como esto:
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);
}
};
Otros consejos
creo que busca esto: onCancelled ()
http://developer.android.com/reference/android/os/ AsyncTask.html