Отмена AsyncTask, когда пользователь нажимает кнопку назад - PullRequest
5 голосов
/ 01 ноября 2010

У меня есть AsyncTask, в котором я показываю ProgressDialog в onPreExecute и снова скрываю его в onPostExecute, что-то вроде

final class UploadTask extends AsyncTask {
   ProgressDialog dialog = new ProgressDialog(...);

   protected onPreExecute() {
      dialog.show();
   }
   protected onPostExecute() {
      dialog.hide();
   }
};

Диалог отменяется и действительно исчезает, когда я нажимаю кнопку отмены во времявыполнение AsyncTask.

Когда это происходит, я хотел бы также запустить некоторый код для отмены AsyncTask (прямо сейчас, даже если он ProgressDialog уходит, AsyncTask продолжает работать и в конечном итоге завершается).Я попытался извлечь свой собственный класс из ProgressDialog, а затем сделать

setOnDismissListener(new OnDismissListener() {
@Override public void onDismiss(DialogInterface d) {
   /* do something */
   }
};

(или что-то подобное с OnCancelListener), но это просто никогда не вызывается.

Есть идеи?Мне просто нужен какой-то механизм, чтобы пользователь мог отменить запущенную AsyncTask, пока отображается ProgressDialog.

Ответы [ 2 ]

14 голосов
/ 01 ноября 2010

Я не проверял это, но попробуйте что-то вроде этого:

    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);
        }
};
1 голос
/ 01 ноября 2010

Я думаю, что вы ищете это: onCancelled ()

http://developer.android.com/reference/android/os/AsyncTask.html

...