#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. Теперь он возвращается.