2011-01-21 84 views
1

我有幾個簡單的問題。他們都處理1個主題,一個策略可能會處理所有事情,所以我希望我能把它們放在同一個主題下。一般Android內存泄漏,特別是谷歌分析跟蹤

我在查找垃圾收集的可靠信息時遇到了困難,所以如果有任何幫助,我想我可能並不完全瞭解我在MAT中讀到的內容。即使你可以回答1個問題,我也會非常高興

  1. 什麼是尋找Android內存泄漏的最佳策略?盡我所能說的是獲取Eclipse MAT,挑選一個沒有被垃圾收集的對象(使用dominator樹或任何最容易找到它的對象),並顯示最短的合併路徑到gc找到對象的最遠傳入引用,您可以控制並摧毀該引用。這可以殺死引用,但有時候對象仍然不會被垃圾回收。

  2. 是不是所有的處理程序/ runnables/threads/listener都會被銷燬?如果我不這樣做的話,其中一些似乎無限期地停留下來,有時甚至我會這樣做。

  3. 確保線程獲取垃圾的最好方法是什麼,即使引用沒有被引用(它們似乎有時會停留)?

  4. 爲什麼哦爲什麼我不能讓谷歌分析跟蹤器得到垃圾回收,儘管它根本沒有來自我的應用程序的參考。它似乎保持對我的活動的參考,所以我認爲這可能與我的GC問題有關。

謝謝!

回答

1
  1. 最好的策略是充分理解你從一開始就在做什麼的含義,從而避免內存泄漏。參見例如handling memory leaks in Java。否則,這似乎是一個很好的方法以及代碼檢查。你是否強迫GC證明該對象仍然不被收集?

  2. 一般來說,沒有。對於爲什麼,This article有一個很好的解釋。

  3. 不要持有任何引用它?遵循上述標準編碼實踐。

  4. 不知道。但是你不會在整個應用程序中使用它,所以它並不重要?最終,Android會殺死你的整個過程並回收內存。

+0

感謝您的提示。將瀏覽這兩篇文章。是的,我強迫gc,擺脫對象的引用。我認爲,使用線程和處理程序,我必須使它們成爲靜態和用戶更弱的引用。 – 2011-01-21 21:37:39