Со временем мое приложение использовало много AsyncTasks, и я заметил в отладчике, что они не уходят, и даже когда они сделаны, они все еще отображаются как активный поток. Есть ли способ после выполнения задачи, чтобы сообщить сборщику мусора убить его?
EDIT: Lenik указал ниже, что мой первоначальный ответ не был правильным андроидным способом отменить AsyncTask.
AsyncTask имеет полную и элегантную систему для отмены. Вызовите метод cancel(true)
в своей задаче, когда вы будете готовы отменить. Если вы используете внутренний цикл, используйте isCancelled()
чтобы проверить состояние, и выйдите из цикла соответствующим образом, если он возвращает true
. Это имеет дополнительное преимущество при вызове onCancelled(Object)
в потоке пользовательского интерфейса после cancel(boolean)
и doInBackground(Object[])
. Затем установите для ссылки на свою задачу значение null.
Спасибо Ленику! Если вы опубликуете ответ, я удалю его, чтобы вы получили кредит.
isInterrupted
вместо существующих и хорошо документированных isCancelled()
и AsyncTask.cancel()
?