Android: правильно уничтожить asyncTask?

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


person While-E    schedule 21.04.2011    source источник
comment
Загляните в библиотеку Droid-fu. Это упрощает работу с asyncTask.   -  person karnage    schedule 21.04.2011


Ответы (2)


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

person Vincent Mimoun-Prat    schedule 21.04.2011
comment
Так может ли это теоретически вызвать какой-то хаос потоковой передачи, когда поток уже жив и ждет Tid, когда создается новое действие, и он хочет использовать это Tid? - person While-E; 21.04.2011

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

person Sunil Pandey    schedule 21.04.2011
comment
Я пробовал это в сочетании с isCancelled (), но безрезультатно. - person While-E; 21.04.2011