Ich entwickle gerade ein Spiel und versuche mit einem AnimationDrawable eine Animation in meinem Hauptmenü anzuzeigen. Wenn ich das Spiel einmal ausführe, funktioniert es perfekt. Aber wenn ich auf den Zurück-Knopf tippe, wenn ich das Spiel wieder öffne, bekomme ich OutOfMemorryError. Wenn ich nach Hause komme und zum Spiel zurückgehe, lädt es, aber zeigt die Animation nicht, es ist leer, wo es sein sollte.
Ich denke, wenn es das Spiel wieder öffnet, versucht es, die Animation zu laden, aber es ist bereits aus dem vorherigen Lauf geladen, kann ich diesen Speicher irgendwie befreien? Wie kann ich diese Ausnahme behandeln?
Durch die Suche kann ich herausfinden, dass dies ein häufiges Problem in Android ist, aber ich konnte nichts Nützliches finden.
Wenn es relevant ist, sind meine Bilder 310x316 und ich habe 114 Frames zu laden, die Animation wird in ein xml geladen.
Meine MainMenu-Klasse:
%Vor%Das Fehlerprotokoll:
%Vor%Bearbeiten:
Nach dem Vorschlag von @OleGG und jetzt geht der zweite Lauf gut, aber beim dritten Lauf versuche ich anscheinend, eine recycelte Bitmap zu verwenden.
Also habe ich die Verwendung von AnimationDrawable aufgegeben und AsncTask verwendet, um mein Problem zu lösen. Jetzt ändere ich den Hintergrund des ImageView auf meinem onProgressUpdate (). Vielleicht nicht der beste Ansatz, aber jetzt habe ich keine Probleme! Hier ist mein AsyncTask-Code, falls jemand das gleiche Problem hat!
%Vor%Sie müssen den Speicher freigeben, der von Bitmaps verwendet wird, wenn Sie diesen Bildschirm verlassen. Leider für frühere Versionen von Android (afaik das war seit 3.0 "behoben", aber ich kann falsch liegen) Speicher für Bitmaps wird durch nativen Code zugewiesen und, was traurig ist, sollte Speicher explizit freigegeben werden.
Also, ich nehme an, Sie versuchen diesen Ansatz:
Fügen Sie folgenden Code für die Freigabe von Speicher auf onPause () hinzu.
%Vor%Ich hoffe, es wird dir helfen.
So schaffe ich es, mein Problem mit diesem Ansatz zu lösen:
Erstellt eine AsyncTask zum Zeichnen
%Vor%und starten Sie es auf WindowsFocusChanged
%Vor%Hoffe es hilft jemandem!
fügen Sie einfach "android: largeHeap=" true "" im Anwendungs-Tag android manifest hinzu! :)
füge diese beiden Zeilen in deine Android-Manifest-Datei ein android: hardwareAccelerated="true" und android: largeHeap="true"
%Vor%Ich hoffe, das wird dir helfen.
Tags und Links android android-layout android-animation