Nutzung des Bitmap-Arbeitsspeichers

Bitmaps sind oft die speicherintensivsten Objekte in einer App. Decodierungs- und Skalierungsvorgänge befinden sich häufig auf dem kritischen Pfad für das Rendern von Frames. Durch die Optimierung der Bitmap-Arbeitsspeichernutzung lassen sich die Reaktionsfähigkeit der Benutzeroberfläche, die Akkulaufzeit und die allgemeine Stabilität deutlich verbessern, da Verzögerungen, ANRs und OOM-bedingte Prozessbeendigungen reduziert werden.

Hohe Bitmap-Arbeitsspeichernutzung ermitteln

Android Vitals bietet Messwerte zum Bitmap-Speicherbedarf einer App, indem Daten von Android-Geräten aggregiert werden. Diese Messwerte werden standardmäßig als 28‑Tage-Zusammenfassung der täglichen Daten berechnet. Mithilfe dieser Daten lassen sich Trends und potenzielle Regressionen bei der Speichereffizienz auf verschiedenen Gerätetypen und ‑versionen erkennen.

In Android Vitals wird die Arbeitsspeichernutzung für Bitmaps Ihrer App nach den folgenden Prozessstatus aufgeschlüsselt:

  • Vordergrund: Der Prozess der App ist sichtbar. Es wird erwartet, dass das P99 im Vordergrund deutlich höher ist als in anderen Prozessstatus.Entwickler sollten jedoch untersuchen, ob das Verhältnis von P99 zu P50 signifikant ist (z. B.höher als 3,5), da dies oft auf ein Bitmap-Arbeitsspeicherleck hinweist. Sie können dies erkennen, indem Sie nach einer Abweichung zwischen der typischen Nutzung (P50) und der Nutzung von Ausreißern (P99) suchen. Während sich die allgemeine Asset-Aufblähung gleichmäßig auf alle Perzentile auswirkt, summieren sich Speicherlecks im Laufe der Zeit und verzerren die Daten am unteren Ende (P99) erheblich. Achten Sie darauf, dass Bitmap-Zuweisungen im Vordergrund nicht unnötig bestehen bleiben, nachdem die App in andere Zustände übergegangen ist.
  • Für Nutzer sichtbare Dienste: Der Prozess der App wird in einem wahrnehmbaren Zustand ausgeführt. Dazu gehören Vordergrunddienste, beschleunigte Jobs und vom Nutzer initiierte Datenübertragungsvorgänge. Apps dürfen keine großen Bitmap-Zuweisungen im Vordergrund beibehalten, wenn sie in diese Zustände wechseln. Da diese Dienste für lang andauernde Aufgaben konzipiert sind, beeinträchtigt das Beibehalten großer Assets die allgemeine Nutzerfreundlichkeit und zwingt den Low-Memory Killer Daemon (LMKD), Arbeitsspeicher freizugeben, indem Prozesse mit niedrigerer Priorität beendet werden.
  • Hintergrund: Die App führt einen Hintergrunddienst aus oder wurde vor Kurzem in den Hintergrund verschoben, ist aber noch nicht im Cache. Da dieser Prozessstatus weniger wichtig ist als Vordergrund- oder wahrnehmbare Prozesse, sollten Apps hier große Bitmap-Assets explizit freigeben, um den Arbeitsspeicher zu entlasten.
  • Im Cache: Die App befindet sich im Cache. Dieser Status reagiert sehr empfindlich auf den Systemarbeitsspeicher, z. B. auf LMKs. Apps müssen die Arbeitsspeichernutzung für Bitmaps in diesem Zustand proaktiv reduzieren, um zu vermeiden, dass sie vom Betriebssystem geschlossen werden.

Faktoren für eine hohe Arbeitsspeichernutzung für Bitmaps

Auch virtueller Speicher, der nie verwendet wurde, kann in die Berechnung einbezogen werden. Wenn Sie eine unerwartet hohe Bitmap-Arbeitsspeichernutzung feststellen, prüfen Sie, ob Sie Arbeitsspeicher zuweisen, der nicht verwendet wird.