2011-04-21 59 views
2

我目前使用asyncTask()做一些背景交換位圖圖像,隨着我的活動進展,所有的作品都很好;直到我結束任務所在的活動。任務的線程進入「等待」狀態而不是被破壞?我已經取消了,並且也檢查了返回值.isCancelled()。除非當我從MAIN活動再次重新開始活動時,這實際上不會成爲問題,它實際上會爲新的asyncTask()生成一個新線程;從而讓坐在那裏的老人在後臺「等待」?這是一個錯誤,還是我不正確地使用這個功能?Android:正確銷燬asyncTask?

+1

看看Droid-fu庫。它簡化了與asyncTask的工作。 – karnage 2011-04-21 09:16:45

回答

3

AsyncTask使用線程池。在調試面板中看到4/5異步任務是正常的。只要確保您的異步任務不會對活動持有強烈的引用(嘗試將這些異步任務設置爲靜態內部類(或事件單獨類),並讓它們對該活動持有一個弱引用而不是強引用。

+0

因此,理論上這可能會導致某種線程混亂,當一個新的活動被創建並且它想使用那個'Tid'時,這個線程已經存在並且正在等待'Tid'? – 2011-04-21 09:23:40

+0

查看編輯答案。有些鏈接在那裏。 – 2011-04-21 10:54:34

+0

感謝您的信息馬文。 – 2011-04-21 19:51:27

0

我認爲你應該在doInBackground函數中使用靜態標誌變量來終止操作或循環。這樣你就可以完成你的任務

+0

我試過這個,與isCancelled()一起無濟於事。 – 2011-04-21 09:41:32