2012-05-06 11 views
5

Hier sind einige Neulinge Speicherverwaltung Beobachtungen, zu denen ich möchte eine erfahrene Meinung hören.Android-Bitmaps in XML-Leckspeicher?

Es scheint, dass die Einstellung Android: Backgound = "@ Drawable/XYZ" in einem XML Layout Speicherverlust in meiner App verursacht. Die entsprechenden Aktivitäten halten stapeln, bis ich einen OOM-Fehler bekomme. Dies gilt insbesondere, wenn ich die Geräteausrichtung rotiere.

Wenn ich jedoch die gleiche Ressource mit setBackgoundResource() laden und dann den Rückruf lösche und die Hintergrundreferenz auf null setze, gibt es keinerlei Leck.

, das heißt, zunächst in onCreate()

mMainLayout.setBackgroundResource(R.drawable.background_general_android); 

und dann in onDestroy()

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

Ist das etwa richtig, oder bin ich etwas fehlt wesentlich?

+0

Ich habe das gleiche Problem von Zeit zu Zeit. Ich werde versuchen, Bitmap in OnCrate und OnDestroy zu verwalten. ty – guness

Antwort

1

Dies ist nur möglich, wenn Sie beispielsweise eine Kopie der Zeichen in einem statischen Cache speichern. Sie könnten auch Ihre Aktivitäten verlieren und das Festlegen der Zeichen auf null verbirgt das Problem einfach etwas länger. Sie sollten ein Werkzeug wie MAT verwenden, um den Inhalt Ihres Heaps zu untersuchen und herauszufinden, was vor sich geht.

+1

Die obige Beobachtung basiert auf einem langen und schmerzhaften Wochenende mit MAT :) Im Wesentlichen habe ich ein lineares Barebone-Layout mit nur 500 k Hintergrundressourcebitmap gemacht, und eine Aktivität, die nur das xml mit setContentView() geladen hat. Wenn die Bitmap in xml gesetzt wurde => Speicherverlust und OOM. Wenn programmgesteuert geladen und gelöscht in onDestroy(), keine Probleme. Allerdings sollte ich erwähnen, dass der Rest der App außerhalb dieser minimalen Testaktivität ziemlich groß ist, was sich auf die Ergebnisse auswirken kann. Ich wollte es speziell in "Inside Real App" testen. Android-Version ist 2.2 (Stufe 8). – perza