Спросите о методе отмены AsyncTask

#android #android-asynctask

#Android #android-asynctask

Вопрос:

Согласно документу здесь

Вызов этого метода приведет к вызову onCancelled(Object) в потоке пользовательского интерфейса после возврата doInBackground(Object[])

Однако в моем случае onCancelled(Object) вызывается сразу после вызова метода отмены. Мой вопрос: документ неправильный?

Ответ №1:

Я столкнулся с аналогичной проблемой. После вызова cancel() моя задача продолжала выполняться. Это было действительно для Android 2.2 и 2.3. В итоге я регулярно проверял isCancelled() внутри doInBackground. И поведение было одинаковым, либо вы вызываете cancel(true), либо cancel(false).

Ответ №2:

Обычно AsyncTask выполнение может находиться в четырех состояниях: еще не выполнено, выполняется, завершено и отменено. cancel() Метод не работает, если задача уже завершена или отменена. Если задача выполняется, doInBackground() ее необходимо завершить до onCancelled() вызова. Однако, если задача не начала выполняться, onCancelled() она будет вызвана сразу, и вы не сможете выполнить задачу.

Комментарии:

1. Спасибо за ваш ответ. Мой случай отличается от вашего варианта. Запущен doInBackground. Он насчитывает 1-10 за 10 секунд. Когда он досчитает до 5, я вызываю cancel. Вызывается журнал onCancelled. Однако задача doInBackground продолжается до 10. Теперь он возвращается.