2012-05-06 320 views
5

這裏有一些新手的內存管理觀察,我想 聽到有經驗的意見。xml中的Android位圖泄漏內存?

看來,在xml 佈局中設置android:backgound =「@ drawable/xyz」會在我的應用程序中導致內存丟失。相應的活動保持 疊加,直到出現OOM錯誤。如果我將設備方向旋轉 ,情況尤其如此。

但是,如果我用setBackgoundResource()加載相同的資源,然後清除 回調並將背景參考設置爲null,則不會有任何泄漏。

即先在的onCreate()

mMainLayout.setBackgroundResource(R.drawable.background_general_android); 

,然後在的onDestroy()

mMainLayout.getBackground().setCallback(null); 
mMainLayout.setBackgroundDrawable(null); 

這是大致正確的,還是我失去了一些東西必不可少的?

+0

我的確會面對非常相同的問題。我將嘗試在onCrate和onDestroy中管理位圖。 ty – guness

回答

1

這隻會發生,如果你保存在一個靜態緩存drawables副本爲例。您也可能泄漏您的活動,並將drawables設置爲null,將問題隱藏一段時間。你應該使用像MAT這樣的工具來檢查你的堆的內容並找出發生了什麼。

+1

上面的觀察是基於一個漫長而痛苦的MAT週末:)本質上,我做了只有500 k背景資源位圖的barebone線性佈局,以及一個除了用setContentView()加載xml之外什麼都沒做的活動。當位圖被設置在xml =>內存丟失和OOM中時。當以編程方式加載並在onDestroy()中清除時,沒有問題。但是,我應該提到,除了這個最小的測試活動之外,其他應用程序相當大,可能會影響結果。我特別想在「真實應用內」進行測試。 Android版本是2.2(8級)。 – perza