2012-05-06 12 views
5

Oto kilka obserwacji zarządzania pamięcią początkujących, na które chciałbym usłyszeć doświadczoną opinię od .Android mapy bitowe w pamięci wycieku xml?

Wygląda na to, że ustawienie android: backgound = "@ drawable/xyz" w układzie xml powoduje utratę pamięci w mojej aplikacji. Odpowiednie działania powodują, że układa się w stos, dopóki nie otrzymam błędu OOM. Jest to szczególnie ważne, jeśli obrócę orientację urządzenia na .

Jeśli jednak załaduję ten sam zasób za pomocą metody setBackgoundResource(), a następnie wyczyściłem wywołanie zwrotne i ustawię odwołanie w tle na wartość null, nie ma żadnego wycieku.

czyli pierwszy w onCreate()

mMainLayout.setBackgroundResource(R.drawable.background_general_android); 

a następnie w onDestroy()

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

Jest to z grubsza poprawne, czy jestem brakuje czegoś istotnego?

+0

Mam do czynienia z tym samym problemem od czasu do czasu. Spróbuję zarządzać bitmapą w onCrate i onDestroy. ty – guness

Odpowiedz

1

Stanie się tak tylko wtedy, gdy na przykład przechowujesz kopię rysunków w statycznej pamięci podręcznej. Możesz także przeciekać swoje działania, a ustawienie narysów na wartość null po prostu ukrywa problem przez nieco dłużej. Powinieneś użyć narzędzia takiego jak MAT, aby sprawdzić zawartość sterty i dowiedzieć się, co się dzieje.

+1

Powyższa obserwacja oparta jest na długim i bolesnym weekendzie z MAT :) Zasadniczo wykonałem liniowy układ barebone z bitmapą zasobów tła o wielkości 500k i działaniem, które nie wykonało niczego oprócz załadowania xml z setContentView(). Kiedy bitmapa została ustawiona wewnątrz xml => utrata pamięci i OOM. Po załadowaniu programowym i wyczyszczeniu w onDestroy(), nie ma problemów. Powinienem jednak wspomnieć, że reszta aplikacji, poza tą minimalną aktywnością testową, jest dość duża, co może wpływać na wyniki. Chciałem go przetestować w "prawdziwej aplikacji". Wersja Androida to 2.2 (poziom 8). – perza

Powiązane problemy