Отменить асинктюз, когда пользователь нажимает кнопку назад
-
28-09-2019 - |
Вопрос
У меня есть асинктюда, в которой я показываю прогресс-кадр в OnePreexecute, и снова скрываю его в OnPostexecute, что-то вроде
final class UploadTask extends AsyncTask {
ProgressDialog dialog = new ProgressDialog(...);
protected onPreExecute() {
dialog.show();
}
protected onPostExecute() {
dialog.hide();
}
};
Диалог - это отменено, и действительно уходит, когда я нажимаю кнопку «Отмена» во время выполнения ASYNCASK.
Когда это произойдет, я хотел бы запустить какой-то код, чтобы отменить асинктюду (прямо сейчас, даже подумал, что он прогресс идет, асинктяка продолжает работать и в конечном итоге завершиться). Я пытался выводить свой собственный класс от ProgressDialog, а затем сделать
setOnDismissListener(new OnDismissListener() {
@Override public void onDismiss(DialogInterface d) {
/* do something */
}
};
(или что-то подобное с накэллелсер), но это просто никогда не вызывается.
Есть идеи? Мне просто нужен некоторый механизм для пользователя, чтобы отменить работу Asynctask, пока отображается программа ProgressDialog.
Решение
Я не проверил это, но попробую что-то вроде этого:
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);
}
};
Другие советы
Я думаю, что вы ищете это: OnCancelled ()
http://developer.android.com/reference/android/os/asyncyctask.html.