У меня есть AsyncTask, который я отключил в событии жизненного цикла Activity onPause, поэтому он не запускается, когда кто-то покидает приложение, но он продолжает работать, несмотря на это. Я добавил некоторые трассировки, и этот фрагмент показывает проблему.
Trace.d(TAG,"Task state: " + myTask.getStatus() );
myTask.cancel(true);
Trace.d(TAG,"Task state: " + myTask.getStatus() );
Выходы:
Task state: RUNNING
Task state: RUNNING
Почему метод cancel() не влияет на состояние задачи? Я замечаю, что документы говорят, что метод отмены "попытается" остановить задачу, но при каких обстоятельствах это произойдет? Задача определенно работает, поскольку она выводит вывод журнала каждые десять секунд, и, как вы можете видеть выше, его статус возвращается как работающий.
Обновление. Я добавил трассировку, чтобы показать состояние isCancelled(), и это изменится. Таким образом, вызов cancel (true) меняет отмененное состояние с false на true, но, по-видимому, не влияет на состояние или останавливает поток.