Android: правильно уничтожить asyncTask? - PullRequest
2 голосов
/ 21 апреля 2011

В настоящее время я использую asyncTask() для выполнения фонового обмена растровыми изображениями в процессе своей деятельности, и все работает просто отлично;пока я не закончу деятельность, где находится задача.Поток задачи переходит в состояние ожидания вместо того, чтобы быть уничтоженным?Я отменил и проверил возвращаемое значение .isCancelled().На самом деле это не будет проблемой, за исключением того, что когда я снова перезапускаю свою деятельность из основной операции, она фактически создаст новый поток для новой asyncTask();таким образом оставляя старого, сидящего там, "ждущего" на заднем плане?Это ошибка, или я просто неправильно использую эту функцию?

Ответы [ 2 ]

3 голосов
/ 21 апреля 2011

AsyncTask использует пул потоков.Для вас нормально видеть 4/5 асинхронных задач на панели отладки.Просто убедитесь, что ваши асинхронные задачи не содержат сильных ссылок на действие (попробуйте сделать эти асинхронные задачи статическими внутренними классами (или отдельными классами событий), и пусть они содержат WeakReference к действию вместо строгой ссылки.

0 голосов
/ 21 апреля 2011

Я думаю, вы должны использовать статическую переменную-флаг в функции doInBackground для завершения операции или цикла. Таким образом, вы можете достичь своей цели

...