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.

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.

Ressourcen

Bitmaps in Android Studio analysieren

Android Studio-Profiling für Bitmaps

Mit dem Speicher-Profiler können Sie Arbeitsspeicherzuweisungen in Echtzeit prüfen, Heap-Dumps erfassen und Objekte auf Speicherlecks analysieren. Außerdem können Sie mit dem Heap Analyzer Speicherlecks erkennen, doppelte Bitmap-Zuweisungen identifizieren und die Objektbeibehaltung visualisieren.

Automatische Speicherleckerkennung mit LeakCanary

Binden Sie die LeakCanary-Bibliothek ein, um die Erkennung von Speicherlecks in Ihrer App zu automatisieren. LeakCanary bietet eine automatische Heap-Analyse und identifiziert Objekte, die eigentlich durch Garbage Collection entfernt werden sollten, aber weiterhin im Speicher gehalten werden, z. B. Bitmaps, die von zerstörten Komponenten beibehalten werden.

Dokumentation zur Bitmap-Leistung

Diese Ressourcen bieten umfassende Anleitungen zu Best Practices für die effiziente Bitmap-Verarbeitung in verschiedenen Android-Komponenten.

Checkliste für Entwickler zur Optimierung der Bitmap-Arbeitsspeichernutzung

Um die Arbeitsspeichereffizienz von Bitmaps zu optimieren, sollten Sie die drei Grundsätze „Reduzieren“, „Wiederverwenden“ und „Wiederaufbereiten“ beachten.

  • Reduzieren: Minimieren Sie den anfänglichen Speicherbedarf beim Laden oder Anzeigen von Bitmaps.
  • Wiederverwendung: Implementieren Sie Caching-Mechanismen, um redundante Bitmap-Zuweisungen zu vermeiden.
  • Wiederverwenden: Ressourcen proaktiv freigeben, damit der Arbeitsspeicher für aktive Prozesse neu zugewiesen werden kann.

Die folgende Checkliste für Entwickler kann Ihnen helfen, die Arbeitsspeichernutzung von Bitmaps zu optimieren.

Grundprinzip Region Beschreibung
Einschränken Doppelte Bitmaps entfernen Analysieren Sie Heap-Dumps mit dem Speicher-Profiler, um redundante Bitmap-Zuweisungen zu erkennen. Weitere Informationen finden Sie im Leitfaden Bitmap-Arbeitsspeicher verwalten.
Bibliotheken zum Laden von Bildern nutzen Verwenden Sie Bibliotheken wie Glide und Coil, um Threading, Caching und effizientes Decodieren zu automatisieren.
Downsampling implementieren Bilder dekodieren, damit sie den Abmessungen des Ziel-UI-Containers entsprechen, anstatt Assets in voller Auflösung zu laden.
RGB_565 für undurchsichtige Bilder verwenden Reduzieren Sie den Speicherbedarf um 50 %, indem Sie für Bilder ohne Transparenz von ARGB_8888 auf eine 16-Bit-Konfiguration umstellen.
VectorDrawables priorisieren Verwenden Sie Vektoren für Symbole und einfache Grafiken, um eine scharfe Skalierung mit minimalem Speicherbedarf zu gewährleisten.
Serverseitige Bildübermittlung optimieren Konfigurieren Sie Backend-APIs, um Bilder bereitzustellen, die auf die Gerätedichte und die Abmessungen des UI-Containers zugeschnitten sind.
Transparente Ränder entfernen Vermeiden Sie die Zuweisung von Arbeitsspeicher für „unsichtbare“ Pixel, indem Sie InsetDrawable oder Layout-Padding anstelle von integrierten Rändern verwenden. Weitere Informationen finden Sie unter Speichereffiziente Android-Apps entwickeln.
Wiederverwenden Optimale Cache-Größen konfigurieren Passen Sie die Grenzwerte für Arbeitsspeicher und Datenträger-Cache an den RAM und die Bildschirmauflösung des Geräts an. Weitere Informationen finden Sie unter Bitmaps im Cache speichern.
Recyceln Ressourcen im Hintergrund dauerhaft löschen TRIM_MEMORY_BACKGROUND implementieren, um Caches zu leeren und die Überlebensfähigkeit von Prozessen bei hohem Systemarbeitsspeicher zu verbessern.
Infos zur Veröffentlichung, wenn die Benutzeroberfläche ausgeblendet ist Verwenden Sie TRIM_MEMORY_UI_HIDDEN, um Bitmap-Caches freizugeben, wenn die App für den Nutzer nicht mehr sichtbar ist.
Auf Speicherlecks prüfen Mit LeakCanary und Speicher-Profiler können Sie Bitmaps finden, die nach dem Zerstören des LifecycleOwner beibehalten werden. Weitere Informationen finden Sie unter Arbeitsspeicher der App verwalten.