Best Practices für die App-Optimierung

Die folgenden Best Practices helfen dir, deine App ohne Qualitätsverlust zu optimieren.

Basisprofile verwenden

Baseline-Profile können die Geschwindigkeit der Codeausführung ab dem ersten Start um 30% verbessern und alle Nutzerinteraktionen ab der ersten Ausführung reibungsloser gestalten, z. B. App-Start, Navigation zwischen Bildschirmen oder Scrollen durch Inhalte. Wenn eine App schneller und reaktionsschneller ist, führt dies zu mehr aktiven Nutzern pro Tag und einer höheren durchschnittlichen Rückkehrrate.

Start-up-Profil verwenden

Ein Startprofil ähnelt einem Baseline-Profil, wird jedoch während der Kompilierung ausgeführt, um das DEX-Layout für einen schnelleren Anwendungsstart zu optimieren.

App-Start-Bibliothek verwenden

Mit der App-Start-Bibliothek können Sie Komponenteninitialisierer mit einem einzigen Contentanbieter definieren, anstatt für jede zu initialisierende Komponente separate Contentanbieter festzulegen. Dies kann die Startzeit der Anwendung erheblich verkürzen.

Bibliotheken langsam laden oder automatische Initialisierung deaktivieren

Apps verbrauchen viele Bibliotheken, von denen einige für den Start obligatorisch sein können. Es können jedoch viele Bibliotheken vorhanden sein, bei denen sich die Initialisierung bis nach dem Zeichnen des ersten Frames verzögert. Einige Bibliotheken bieten eine Option zum Deaktivieren der automatischen Initialisierung beim Start oder eine On-Demand-Initialisierung. Mit dieser Option können Sie die Initialisierung auf später verschieben, bis es erforderlich ist, um die Leistung zu steigern. Sie können die On-Demand-Initialisierung beispielsweise verwenden, um WorkManager nur aufzurufen, wenn die Komponente erforderlich ist.

ViewStubs verwenden

Ein ViewStub ist eine unsichtbare View-Größe von null, mit der Sie Layoutressourcen während der Laufzeit langsam aufblähen können. So können Sie das Aufblähen von Ansichten, die beim Start nicht erforderlich sind, erst später verzögern.

Wenn Sie Jetpack Compose verwenden, kann sich ein ähnliches Verhalten wie bei ViewStub mithilfe des Status verhalten, um das Laden einiger Komponenten zu verzögern:

var shouldLoad by remember {mutableStateOf(false)}

if (shouldLoad) {
   MyComposable()
}

Laden Sie die zusammensetzbaren Funktionen in den bedingten Block, indem Sie shouldLoad ändern:

LaunchedEffect(Unit) {
   shouldLoad = true
}

Dies löst eine Neuzusammensetzung aus, bei der der Code im bedingten Block im ersten Snippet enthalten ist.

Ladebildschirm optimieren

Ladebildschirme sind ein wesentlicher Bestandteil beim App-Start und die Verwendung eines gut gestalteten Ladebildschirms kann dazu beitragen, den App-Startvorgang insgesamt zu verbessern. Android 12 (API-Level 31) und höher enthält einen Ladebildschirm zur Verbesserung der Leistung. Weitere Informationen finden Sie unter Ladebildschirm.

Skalierbare Image-Typen verwenden

Wir empfehlen die Verwendung von Vektor-Drawables für Bilder. Wenn dies nicht möglich ist, verwenden Sie WebP-Images. WebP ist ein Bildformat, das eine erstklassige verlustfreie und verlustbehaftete Komprimierung von Bildern im Web bietet. Sie können vorhandene BMP-, JPG-, PNG- oder statische GIF-Bilder mit Android Studio in das WebP-Format konvertieren. Weitere Informationen finden Sie unter WebP-Images erstellen.

Minimieren Sie außerdem die Anzahl und Größe der Bilder, die beim Start geladen werden.

Performance APIs verwenden

Die Performance API für die Medienwiedergabe ist ab Android 12 (API-Level 31) verfügbar. Mit dieser API erhalten Sie einen Überblick über die Gerätefunktionen und können Vorgänge entsprechend ausführen.

Kaltstart-Traces priorisieren

Ein Kaltstart bezieht sich auf eine App, die bei null beginnt. Das bedeutet, dass der Prozess der Anwendung noch nicht durch den Prozess des Systems erstellt wurde. Ihre App startet in der Regel kalt, wenn Sie sie zum ersten Mal nach dem Start des Geräts starten oder wenn das System das Beenden der App erzwungen hat. Kaltstarts sind viel langsamer, da die App und das System mehr Aufgaben ausführen müssen, die bei anderen Starttypen wie Warm- und Heißstarts nicht erforderlich sind. Die Systemverfolgung bei Kaltstarts gibt Ihnen einen besseren Überblick über die Anwendungsleistung.