2013-03-18 46 views
0

我在調試一個在位圖上運行一系列內存密集型操作的Android應用程序時遇到了一些問題。從谷歌的Debugging tips,我知道有沒有辦法在Android中進行調試時釋放線程使用的內存?

調試器和垃圾回收器目前鬆散集成。虛擬機確保調試器知道的任何對象在調試器斷開連接之後才被垃圾收集。當調試器連接時,這可能導致對象隨着時間的推移累積。例如,如果調試器看到正在運行的線程,則即使在線程終止後,相關聯的線程對象也不會被垃圾收集。

不幸的是,這意味着,在我的應用程序運行在釋放模式精細,在調試模式下運行的任何內存密集型線程會被垃圾收集器忽略,保持周圍所以越來越多的內存用作越來越會創建更多的內存密集型線程,導致應用程序崩潰,因爲它無法分配所需的內存。

有沒有什麼辦法可以明確告訴垃圾收集器應該收集這些線程還是其他方式解決這個問題?

回答

0

我最終通過產卵AsyncTask而不是Thread解決了這個問題。似乎AsyncTasks被垃圾收集器更容易清理,因此我能夠在調試模式下運行應用程序而沒有問題。

AsyncTask是產生後臺操作的推薦方式。任何要在後臺完成的工作都應該放在任務的doInBackground(Params...)方法中。 AsyncTasks通常打算在完成後在UI線程上執行操作,但是可以通過簡單地將onPostExecute(Result)方法留空或不存在來避免干擾UI線程。

相關問題