2011-12-06 40 views
0

我正在對抗內存泄漏,我在eclipse中使用了Heap工具。什麼是Android SDK的Heap工具中可見的「非Java對象」類型?

正如你可以在這張截圖http://hpics.li/b7c60de看,我的記憶中的更大一部分用於通過非Java對象,但我不知道那是什麼類型。它是C++代碼,像圖像資源對象...?

+0

應用程序的241 megs很多。我假設你已經打開了3.0+的大堆請求?你真的需要那麼多,還是你泄漏的結果? – FunkTheMonk

+0

要添加到@ FunkTheMonk的評論,如果你正在構建一個遊戲,你通常會想要使用Android NDK(原生代碼 - C我認爲)。 – Phil

+0

@FunkTheMonk:是的,我知道這很多。是的,這是泄漏的結果。在開始我的應用程序需要大約20Mb。每次我切換到另一個活動時,這個數字都會增加大約10個Mo。 – anadobes

回答

0

您的評論意味着您至少泄露了一次對每項活動的引用。你有任何靜態的Drawables,Views,Contexts等嗎? 你有沒有內部的非靜態類(它們保留對外部類的引用)? 您是否在應用程序或其他任何比Activity更長的生命週期中保留Drawables,Views,Contexts等。

這些是通常會泄漏活動的3件主要事情。

Drawables,Views,Adapters和其他各種東西都保留了它們在其中創建的Context(它是父級Activity)的引用,所以如果讓它們的存活時間比Activity本身更長,則Activity將保留在內存中。

這個video解釋了這一切,以及如何使用一些工具來幫助您調試問題。

+0

感謝您的回答。 是的我至少有一個類(但不是活動)具有靜態上下文。我也有一個使用外部類的屬性(上下文對象)的非靜態內部類。 我使用一些適配器,也許問題出在這。 有關信息,我試圖解除所有引用的每個活動,當他們銷燬自己,但它沒有奏效([想法在這裏找到](http://1gravity.com/index.php?option=com_content&view=article&id=71 ))。 最後,我看了一個我已經看過的視頻。我將嘗試查看HPROF文件。 – anadobes

相關問題