我正在與內存泄漏現在戰鬥。mContext何時爲空清除? (小部件,適配器等)
只是出於好奇, 當mContext,視圖或適配器類的成員,空清除?
我無法找到一個部分做這樣的事......
編輯:
我知道GC,但例如,
一個ArrayAdapter有mContext ,如果Activity有對ArrayAdapter的引用, 是這個循環引用嗎?
我正在與內存泄漏現在戰鬥。mContext何時爲空清除? (小部件,適配器等)
只是出於好奇, 當mContext,視圖或適配器類的成員,空清除?
我無法找到一個部分做這樣的事......
編輯:
我知道GC,但例如,
一個ArrayAdapter有mContext ,如果Activity有對ArrayAdapter的引用, 是這個循環引用嗎?
直到垃圾收集器纔會清理它。換句話說 - 你不應該擔心清理你的變量,因爲如果沒有引用它們(不是立即的,但他們會的),它們都將被GC收集。
但是Android有一個類導致麻煩 - Bitmap
。如果你的應用有內存泄漏,首先 - 看看位圖的使用情況。確保您在完成時呼叫recycle
。
檢查空變量何時會被釋放是無法控制的。但是你可以避免OOME問題。
正如德米特里所說,如果您使用的是Bitmaps
,請在使用後立即調用其recycle()
方法。 通過這種方式,您可以清除所擁有的資源併爲應用程序運行創建空間。
調用GC是沒有用的,因爲即使您調用它,也不確定GC是否會釋放您的資源。
同時檢查你的代碼是否沒有內存泄漏問題。由於這也可能導致OOME。您可以使用MAT(插件)進行日食檢查內存泄漏問題。
即使這不能解決您的問題,請問我們,我們會嘗試找到另一個解決方案。
謝謝:)
的情況下一般是所屬的活動,這是由Android的管理。它保證是活躍和有效的,直到活動激活。除非您正在做一些棘手的或相當低級的事情,否則您不應該在視圖和適配器中協調mContext
。
您應該關注的是將某個活動的引用(例如在Context mContext
或類似字段中)存儲在可能比活動(服務,線程,應用程序類等)壽命更長的類中。這將阻止系統正確GC化該活動並導致內存泄漏和微妙的錯誤。
您是否聽說過垃圾收集器? –
只要有可能就嘗試傳遞應用程序上下文('getContext()。getApplicationContext()')。它是您擁有的最持久的上下文。將活動傳遞給其他班級很可能會留下大量對活動的參考。一旦我有一個相同的Activity類的42個實例在堆中時,我應該只有一個,因爲內部類也傳遞了一個循環引用。 –