我寫了一個非常標準的Android應用程序,它在GridView中顯示一堆圖片(來自聯繫人)。應用程序沒有做任何特別的事情來嘗試在屏幕方向更改上保留數據,並且在重新創建活動時重新創建GridView,適配器和加載器。內存泄漏方向更改
但是,在一些方向改變後,應用程序變慢;再過幾次之後,它會崩潰,出現內存不足錯誤(在BitmapFactory.decodeStream()處)。如果我讓它在旋轉之間靜坐一分鐘,讓垃圾收集器做它的事,這仍然會發生。
我的印象是,當方向變化時Acitivty被破壞時,Android會釋放所有與Activity相關的內存。但是,這似乎並非如此。我的問題是:儘管存在活動破壞,我可以無意中保留哪些內存?
(請注意,應用程序運行正常,只要它不會受到太多的方向變化,所以要儘量減少內存的一般方法,我使用是足夠的。)
通常,這是通過使用成位圖靜態引用或通過將活性上下文其保持它的一個引用一些其它類引起的。你在做這樣的事嗎?發佈onCreate()和onResume()會有所幫助。 MAT會告訴你什麼沒有被收集。 PS。垃圾收集工作得很好。 – Simon
看看這個和我關於解綁定drawables的答案。 http://stackoverflow.com/questions/14759601/proper-ondestroy-how-to-avoid-memory-leaks/14759756#14759756 – Simon
@Simon:謝謝!我認爲你是對的:我按照http://developer.android.com/training/contacts-provider/display-contact-badge.html使用非靜態內部類作爲ViewHolder。但是,正如我現在理解的那樣,其中的意見將保留參考文獻的背景。我會試着將這個作爲一個靜態的內部類來重寫,看看會發生什麼。我也研究過我的onCreate和onResume,但我不認爲這裏有什麼有趣的地方。如果我知道如何在onDestroy中輕鬆地從GridView中提取屏幕位圖,我會明確地解除它們。 –