2013-03-09 20 views
0

我正在使用廣告網絡在我的應用中顯示一些廣告。他們庫中的loadAd函數有時會導致模擬器凍結(可能是因爲某些防火牆問題)。Android。 AsyncTasks

無論如何,我已經轉移到使用AsyncTasks,其中我做了loadAd方法的實際調用(所以UI不再起作用),它要求橫幅或其他服務器上的任何內容。

無論何時我重新啓動我的Activity,調用ActivityonDetroy方法。在那裏,我打電話AscynTask'scancel方法,所以它會取消任務和...大概停止/刪除線程。

通過DDMS心中已經注意到看下面的事情:

查看快照:http://bayimg.com/EAkBaAaEH

每次我打電話AsyncTaskexecute方法中,兩個AsynkTasks創建(#1和#2)當我在`onDestroy()中調用cancel(true)方法時,它似乎不會消失(被殺死)。

Activity重新啓動後,會創建另外兩個AsyncTasks線程(#3和#4)。

在另一個Activity重新啓動之後,又創建了一個AsynkTask(#5)。

我該如何殺死任務?像在完全停止執行一樣?或者他們真的停止了,我只是誤解了DDMS?

+1

當取消被稱爲asyntask doinBackground將繼續它的工作,當它完成時,而不是onPostExecute .. OnCancelListener將被稱爲 – baboo 2013-03-09 09:33:14

+0

那麼,在廣告負載和所有東西后(列出的東西在'doInBackground'中完成),它仍然出現在'DDMS'中。這是爲什麼?爲什麼它不從DDMS中消失? – AndreiBogdan 2013-03-09 09:36:48

回答

1

請確保你沒有在Asynctask doinBackground中做一段時間(true)(長時間連續任務)的事情,asynctask shld不能用於後臺線程中的長/連續進程,如果它的一個小的後臺任務它會完成,而不是onPostExecute如果取消doinbackground執行過程中被稱爲oncancellistener將被稱爲...

如在DDMS尚存檢查: AsyncTask thread still there after execute, is that normal?

它沒有驚人的只是空閒線程,如asynctasks在運行一個線程池。空閒線程等待下一個asynctask被執行

+0

還有一件快事...當調用'AsyncTask'的onCancelled方法時,該強制會停止執行'doInBackground'方法中的任何事情嗎?如果在那裏有一個「while(1)」,當我調用'cancel(true)'時,會「殺死」一切,不管它是什麼?這是保證線程會停止嗎?或者我必須在'onCancelled'方法中強制停止代碼(取決於'doInBackground'中的代碼。也許設置一個標誌或其他東西)? – AndreiBogdan 2013-03-09 09:43:00

+1

有一種方法isCancelled()在Asyntask中檢查它的布爾值在while(true)循環如果真突破.. ... http://developer.android.com/reference/android/os/AsyncTask.html#isCancelled () – baboo 2013-03-09 09:46:23

+0

是的,我剛剛在1分鐘前看過。 :) 優秀。非常感謝您的寶貴時間。 – AndreiBogdan 2013-03-09 09:48:42