2016-03-19 4 views
0

Ich habe gerade angefangen, meine Spiele-App auf einem neuen Samsung Galaxy S6 zu testen. Es stürzte ständig mit Fehlern im Arbeitsspeicher im Protokoll ab. Meine App verwendet normalerweise etwa 215M und funktioniert gut mit dem Galaxy S4 Mini, Galaxy Tab S3 und Galaxy Tab S4, die Haufen von 256 + M, 512 + M und 512 + M haben. Das Galaxy S6 hat einen Heap von 536M. Nachdem ich meine Bitmap-Größen verkleinert hatte, um das Galaxy S6 für die App verwenden zu können, habe ich auf dem Gerätemonitor die Möglichkeit, die verschiedenen Geräte gemeinsam zu nutzen.Warum reserviert Samsung Galaxy S6 (Lollipop) den 4-fachen Speicher älterer Geräte für Bitmaps

Galaxy S4 mini, Galaxy Tab S3 und Galaxy Tab S4: enter image description here

Galaxy S6 (Lollipop): enter image description here

Warum funktioniert das neuere Gerät Verwendung der 4-fachen Haufen der anderen Geräte?

+3

Weisen Sie Bitmaps vielleicht eine Größe zu, die relativ zu den Abmessungen des Bildschirms des Geräts ist? Möchten Sie Code teilen, der Ihrer Meinung nach problematisch ist? –

+0

Woher kommen die Bilder? Wenn es sich um ausklappbare Ressourcen handelt, in welchem ​​Verzeichnis (oder in welchen Verzeichnissen) haben Sie sie? – CommonsWare

+0

Sie haben 1-Byte-Array der Größe 375 MB, Android speichert "Bitmap" in einem Byte-Array. Überprüfen Sie diese http://gokhanarik.com/android-background-image-high-memory-usage-issue/ –

Antwort

2

Es stellt sich heraus, dass das Problem etwas am Gerät Ende getan wurde, nicht in der Dokumentation zur Unterstützung unterschiedlicher Bildschirmgrößen hier erwähnt: http://developer.android.com/training/multiscreen/screensizes.html. Laut einem aufschlussreichen Artikel von Gokhan Arik, "Android Hintergrundbild hohen Speicherverbrauch Problem" bei http://gokhanarik.com/android-background-image-high-memory-usage-issue/, Verweis auf eine CommonsWare Antwort auf eine Frage ähnlich wie meine hier: Why does my 160kb app background become 49 MB at run time?, werden High-Density-Geräte Größe Bilder in einem generischen "Drawable" Ordner zu ändern eine viel größere Größe, um die höhere Bildschirmauflösung anzupassen, in meinem Fall um das Vierfache.

Die einfache Lösung bestand darin, alle meine Bitmaps (viele mehrere hundert KB groß) in einen Ordner mit dem Namen 'drawable-nodpi' zu setzen und den alten 'Drawable'-Ordner zu löschen. Ich wünschte, ich wüsste von diesem Problem, bevor ich mir endlich ein Dichte-3-Gerät zum Testen leisten könnte.

Ein Nachteil dieses ich vor kurzem festgestellt, dass Google Play nicht mehr Ihr Gerät betrachten ‚entworfen für Tabletten‘, wenn Sie nicht mehr ziehbar Ordner für verschiedene Rasterdichten verfügt. So unglaublich, möglicherweise müssen Sie leere erstellen, um diese Bezeichnung nicht zu verlieren.