2012-09-03 43 views
0

我正在與內存泄漏現在戰鬥。mContext何時爲空清除? (小部件,適配器等)

只是出於好奇, 當mContext,視圖或適配器類的成員,空清除?

我無法找到一個部分做這樣的事......

編輯:

我知道GC,但例如,

一個ArrayAdapter有mContext ,如果Activity有對ArrayAdapter的引用, 是這個循環引用嗎?

+0

您是否聽說過垃圾收集器? –

+0

只要有可能就嘗試傳遞應用程序上下文('getContext()。getApplicationContext()')。它是您擁有的最持久的上下文。將活動傳遞給其他班級很可能會留下大量對活動的參考。一旦我有一個相同的Activity類的42個實例在堆中時,我應該只有一個,因爲內部類也傳遞了一個循環引用。 –

回答

1

直到垃圾收集器纔會清理它。換句話說 - 你不應該擔心清理你的變量,因爲如果沒有引用它們(不是立即的,但他們會的),它們都將被GC收集。

但是Android有一個類導致麻煩 - Bitmap。如果你的應用有內存泄漏,首先 - 看看位圖的使用情況。確保您在完成時呼叫recycle

2

檢查空變量何時會被釋放是無法控制的。但是你可以避免OOME問題。

正如德米特里所說,如果您使用的是Bitmaps,請在使用後立即調用其recycle()方法。 通過這種方式,您可以清除所擁有的資源併爲應用程序運行創建空間。

調用GC是沒有用的,因爲即使您調用它,也不確定GC是否會釋放您的資源。

同時檢查你的代碼是否沒有內存泄漏問題。由於這也可能導致OOME。您可以使用MAT(插件)進行日食檢查內存泄漏問題。

即使這不能解決您的問題,請問我們,我們會嘗試找到另一個解決方案。

謝謝:)

2

的情況下一般是所屬的活動,這是由Android的管理。它保證是活躍和有效的,直到活動激活。除非您正在做一些棘手的或相當低級的事情,否則您不應該在視圖和適配器中協調mContext

您應該關注的是將某個活動的引用(例如在Context mContext或類似字段中)存儲在可能比活動(服務,線程,應用程序類等)壽命更長的類中。這將阻止系統正確GC化該活動並導致內存泄漏和微妙的錯誤。

相關問題