【发布时间】:2013-03-09 09:30:13
【问题描述】:
我正在使用广告网络在我的应用中展示一些广告。他们库中的 loadAd 函数有时会导致模拟器死机(可能是因为某些防火墙问题)。
无论如何,我已经开始使用 AsyncTasks,在其中我实际调用了 loadAd 方法(因此 UI 不再冻结),它从他们的服务器请求横幅或任何内容。
每当我重新启动我的Activity 时,都会调用Activity 的onDetroy 方法。在那里,我调用了AscynTask's cancel 方法,这样它将取消任务并......大概停止/删除线程。
查看 DDMS,我注意到以下几点:
查看快照:http://bayimg.com/EAkBaAaEH
每次我调用AsyncTask 的execute 方法时,都会创建两个AsynkTasks(#1 和#2),当我调用cancel(true) 方法时它们似乎不会消失(被杀死) `onDestroy().
Activity 重新启动后,会创建另外两个 AsyncTasks 线程(#3 和 #4)。
在Activity 再次重新启动后,又创建了一个AsynkTask (#5)。
我怎样才能真正杀死任务?就像完全停止他们的执行一样?还是他们真的停止了,而我只是误解了 DDMS?
【问题讨论】:
-
当取消被调用时,asyntask doinBackground 将继续它的工作并且当它完成时,而不是 onPostExecute .. OnCancelListener 将被调用
-
好吧,在广告加载和一切之后(在完成
doInBackground中列出的事情之后),它仍然出现在DDMS中。这是为什么?为什么它不会从 DDMS 中消失?