我正在使用广告网络在我的应用中展示一些广告。其库中的loadAd
函数有时会导致模拟器冻结(可能是因为某些防火墙问题)。
无论如何,我已经转移到使用AsyncTasks
,其中我实际调用了loadAd
方法(因此UI不再被释放)请求横幅或其他任何内容服务器
每当我重新启动Activity
时,都会调用onDetroy
的{{1}}方法。在那里,我调用Activity
AscynTask's
方法,因此它将取消任务并...可能会停止/删除该线程。
通过DDMS我注意到以下事项:
查看快照:http://bayimg.com/EAkBaAaEH
每当我调用cancel
的{{1}}方法时,会创建两个execute
(#1和#2),当我打电话时,它们似乎不会消失(被杀) `onDestroy()。
AsyncTask
方法
AsynkTasks
重新启动后,另外创建了两个cancel(true)
个线程(#3和#4)。
再次重新启动Activity
之后,又创建了一个AsyncTasks
(#5)。
我怎么能杀死这些任务?就像完全停止执行一样?或者他们真的停止了,我只是误解了DDMS?
答案 0 :(得分:1)
确保你在Asynctask doinBackground中没有做一段时间(真实)(长期连续任务)的事情,asynctask shld不能用于后台线程中的长/连续进程,如果它是一个小的后台任务,它将完成并且如果在doinbackground执行期间调用了cancel,则将调用onPostExecute oncancellistener ...
仍然留在DDMS中检查: AsyncTask thread still there after execute, is that normal?
只是空闲的线程没有什么惊人的,因为asynctasks在线程池中运行。空闲线程等待下一个asynctask执行