Leistung für Bilder optimieren

Wenn Sie nicht vorsichtig sind, können beim Arbeiten mit Bildern schnell Leistungsprobleme auftreten. Bei der Arbeit mit großen Bitmaps kann es sehr leicht zu einem OutOfMemoryError kommen. Mit diesen Best Practices können Sie die Leistung Ihrer App optimieren.

Nur die benötigte Größe der Bitmap laden

Die meisten Smartphones haben Kameras mit hoher Auflösung, die große Bilddateien erzeugen. Wenn Sie ein Bild auf dem Bildschirm anzeigen, müssen Sie entweder die Auflösung des Bildes reduzieren oder das Bild nur bis zur Größe des Bildcontainers laden. Das ständige Laden von Bildern, die größer als nötig sind, kann die GPU-Caches erschöpfen und zu einem weniger leistungsfähigen UI-Rendering führen.

So verwalten Sie Bildgrößen:

  • Skalieren Sie Ihre Bilddateien so klein wie möglich, ohne das Ausgabebild zu beeinträchtigen.
  • Sie können Ihre Bilder in das WEBP-Format konvertieren, anstatt sie als JPEG- oder PNG-Dateien zu speichern.
  • Kleinere Bilder für unterschiedliche Bildschirmauflösungen bereitstellen (siehe Tipp 3),
  • Verwenden Sie eine Bibliothek zum Laden von Bildern, die das Bild so skaliert, dass es zur Größe der Ansicht auf dem Bildschirm passt. Dadurch lässt sich die Ladeleistung des Bildschirms verbessern.

Nach Möglichkeit Vektoren anstelle von Bitmaps verwenden

Wenn Sie etwas visuell auf dem Bildschirm darstellen, müssen Sie entscheiden, ob es als Vektor dargestellt werden kann oder nicht. Verwenden Sie Vektorbilder anstelle von Bitmaps, da sie nicht zu Pixeln werden, wenn Sie sie auf unterschiedliche Größen skalieren. Nicht alles kann jedoch als Vektor dargestellt werden. Bilder, die mit einer Kamera aufgenommen wurden, können nicht in einen Vektor umgewandelt werden.

Alternative Ressourcen für verschiedene Bildschirmgrößen bereitstellen

Wenn Sie Bilder mit Ihrer App bereitstellen, sollten Sie Assets in verschiedenen Größen für unterschiedliche Geräteauflösungen bereitstellen. So lässt sich die Downloadgröße Ihrer App auf Geräten reduzieren und die Leistung verbessern, da auf einem Gerät mit niedriger Auflösung ein Bild mit niedrigerer Auflösung geladen wird. Weitere Informationen zum Bereitstellen alternativer Bitmaps für verschiedene Gerätegrößen finden Sie in der Dokumentation zu alternativen Bitmaps.

Bei Verwendung von ImageBitmap prepareToDraw vor dem Zeichnen aufrufen

Wenn Sie ImageBitmap verwenden, müssen Sie ImageBitmap#prepareToDraw() aufrufen, bevor Sie die Textur auf die GPU hochladen, um mit dem Zeichnen zu beginnen. So kann die GPU die Textur vorbereiten und die Leistung der Darstellung eines visuellen Elements auf dem Bildschirm verbessern. Die meisten Bibliotheken zum Laden von Bildern führen diese Optimierung bereits durch. Wenn Sie jedoch selbst mit der ImageBitmap-Klasse arbeiten, sollten Sie dies berücksichtigen.

Übergeben Sie stattdessen Int, DrawableRes oder eine URL als Parameter an das Composeable anstelle von Painter.

Aufgrund der Komplexität der Bildverarbeitung (z. B. wäre das Schreiben einer Gleichheitsfunktion für Bitmaps rechenintensiv) ist die Painter API ausdrücklich nicht als Stable-Klasse gekennzeichnet. Instabile Klassen können zu unnötigen Neuzusammensetzungen führen, da der Compiler nicht leicht ableiten kann, ob sich die Daten geändert haben.

Daher sollten Sie Ihrem Composeable eine URL oder eine drawable-Ressourcen-ID als Parameter übergeben, anstatt Painter als Parameter zu übergeben.

// Prefer this:
@Composable
fun MyImage(url: String) {

}
// Over this:
@Composable
fun MyImage(painter: Painter) {

}

Eine Bitmap nicht länger im Arbeitsspeicher speichern, als sie benötigt wird

Je mehr Bitmaps Sie in den Arbeitsspeicher laden, desto wahrscheinlicher ist es, dass der Arbeitsspeicher des Geräts aufgebraucht wird. Wenn Sie beispielsweise eine große Liste von Bild-Kompositionen auf dem Bildschirm laden, können Sie mit LazyColumn oder LazyRow dafür sorgen, dass beim Scrollen durch eine große Liste Arbeitsspeicher freigegeben wird.

Fügen Sie Ihrer AAB-/APK-Datei keine großen Bilder hinzu.

Eine der Hauptursachen für eine große Downloadgröße von Apps sind Grafiken, die in der AAB- oder APK-Datei verpackt sind. Verwenden Sie das Tool APK-Analysator, um sicherzustellen, dass Sie keine größeren als die erforderlichen Bilddateien verpacken. Verringern Sie die Größe oder legen Sie die Bilder auf einem Server ab und laden Sie sie nur bei Bedarf herunter.