Cancelar assínctask quando o usuário pressiona o botão de volta
-
28-09-2019 - |
Pergunta
Eu tenho uma assínceta em que mostro um progressoDialog no onPreexecute e oculto novamente no OnPostexecute, algo como
final class UploadTask extends AsyncTask {
ProgressDialog dialog = new ProgressDialog(...);
protected onPreExecute() {
dialog.show();
}
protected onPostExecute() {
dialog.hide();
}
};
A caixa de diálogo é cancelável e, de fato, desaparece quando pressiono o botão Cancelar durante a execução do assíncrono.
Quando isso acontece, eu gostaria de executar algum código para cancelar o assíncrono também (agora, mesmo que pensei que o ProgressDialog desaparece, o AsyncTask continua correndo e, eventualmente, completa). Eu tentei derivar minha própria classe do progressdialog e depois fazer
setOnDismissListener(new OnDismissListener() {
@Override public void onDismiss(DialogInterface d) {
/* do something */
}
};
(ou algo semelhante a um oncancellistener), mas isso simplesmente nunca é chamado.
Alguma ideia? Eu só preciso de algum mecanismo para o usuário cancelar uma asyncTask em execução enquanto um ProgressDialog está sendo exibido.
Solução
Eu não testei isso, mas tente algo assim:
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);
}
};
Outras dicas
Eu acho que você está procurando por isso: OnCancelled ()
http://developer.android.com/reference/android/os/asynctask.html