Anleitungen

Leitfaden für die Leistungssteigerung

Lesezeit: 9 Minuten
Alice Yuan
Developer Relations Engineer

Leitfaden für die Leistungssteigerung

Willkommen zum vierten Tag der Performance Spotlight Week. Sie haben jetzt einige der tollen Tools und Best Practices kennengelernt, die wir in letzter Zeit eingeführt haben, z. B. den R8-Optimierer und die profilgesteuerte Optimierung mit Baseline Profiles und Startup Profiles. Vielleicht fragen Sie sich, wo Sie mit der Leistungsoptimierung beginnen sollen. 

Wir haben eine detaillierte Anleitung zur Leistungsoptimierung erstellt, die sich an Ihr mobiles Entwicklungsteam richtet – egal, ob Sie eine App mit einem einzelnen Entwickler haben, der mit der Leistungsoptimierung beginnen möchte, oder ob Sie ein ganzes Team haben, das sich der Verbesserung der Android-Leistung widmet. 

Der Leitfaden zur Leistungsabstufung umfasst fünf Stufen. Wir beginnen mit Stufe 1, die minimalen Aufwand für die Einführung von Leistungstools erfordert, und gehen bis zu Stufe 5, die sich ideal für Apps eignet, die über die Ressourcen verfügen, um ein maßgeschneidertes Leistungsframework zu pflegen.

 
Sie können direkt zu der Ebene springen, die für Sie am relevantesten ist:

Stufe 1:  Von der Play Console bereitgestellte Feldüberwachung verwenden

Wir empfehlen, zuerst Android Vitals in der Play Console zu nutzen, um automatisch erfasste Daten zur Feldüberwachung anzusehen. So erhalten Sie mit minimalem Aufwand Statistiken zu Ihrer Anwendung.

Android Vitals ist eine Initiative von Google, mit der diese Felddaten automatisch für Sie erhoben und angezeigt werden.

So stellen wir diese Daten bereit:

  1. Daten erheben : Wenn ein Nutzer zustimmt, werden auf seinem Android-Gerät automatisch wichtige Leistungs- und Stabilitätsereignisse aus allen Apps, einschließlich Ihrer, protokolliert.
  2. Zusammengefasste Daten:Google Play erhebt und anonymisiert diese Daten von den Nutzern Ihrer App.
  3. Insights präsentieren:Die Daten werden Ihnen in der Google Play Console im Android Vitals-Dashboard präsentiert.

Im Android Vitals-Dashboard werden viele Messwerte erfasst, einige davon sind jedoch als Core Vitals gekennzeichnet. Diese sind am wichtigsten, da sie sich auf die Sichtbarkeit und das Ranking Ihrer App im Google Play Store auswirken können.

Vitalparameter

TECHNISCHE QUALITÄTS-KERNMETRIKEN VON GOOGLE PLAY

Damit Ihre App bei Google Play möglichst gut sichtbar ist, sollten Sie die Grenzwerte zu unerwünschtem Verhalten für diese Messwerte nicht überschreiten.

Rate der vom Nutzer wahrgenommenen AbstürzeProzentsatz der aktiven Nutzer pro Tag, bei denen mindestens ein Absturz aufgetreten ist, der wahrscheinlich bemerkt wurde
Rate der vom Nutzer wahrgenommenen ANR‑FehlerProzentsatz der aktiven Nutzer pro Tag, bei denen mindestens ein ANR-Fehler aufgetreten ist, der wahrscheinlich bemerkt wurde
Übermäßige AkkunutzungDer Prozentsatz der Zifferblattsitzungen, bei denen die Akkunutzung über 4,44% pro Stunde liegt.
Neu: Übermäßige Teil-WakelocksDer Prozentsatz der Nutzersitzungen, in denen die kumulative, nicht ausgenommene Wakelock-Nutzung 2 Stunden überschreitet.

Zu den wichtigsten Vitalparametern gehören die vom Nutzer wahrgenommene Absturzrate, die ANR-Rate, übermäßiger Akkuverbrauch und der neu eingeführte Messwert zu übermäßigen partiellen Wakelocks.

Rate der vom Nutzer wahrgenommenen ANR-Fehler

Im Android Vitals-ANR-Dashboard können Sie Stacktraces von Problemen sehen, die im Feld auftreten, und erhalten Informationen und Empfehlungen zur Fehlerbehebung. 

crashesAnrs.png

Sie können einen bestimmten ANR-Fehler aufschlüsseln, um den Stacktrace sowie Informationen zur möglichen Ursache des Problems zu sehen.

insights.png

Hier finden Sie eine Anleitung zur Diagnose und Behebung häufiger ANR-Szenarien. 

Rate der vom Nutzer wahrgenommenen Abstürze

Mit dem Dashboard für Abstürze in Android Vitals können Sie Abstürze weiter debuggen und eine Stichprobe von Stacktraces ansehen, die in Ihrer App auftreten. 

In unserer Dokumentation finden Sie auch Informationen zur Fehlerbehebung bei bestimmten Abstürzen. In der Anleitung zur Fehlerbehebung bei Vordergrunddiensten werden beispielsweise Möglichkeiten zur Identifizierung und Behebung häufiger Szenarien beschrieben, in denen Abstürze auftreten.

Übermäßige Akkunutzung 

Wenn Sie die Anzahl der Zifferblattsitzungen mit übermäßiger Akkunutzung auf Wear OS-Geräten verringern möchten, lesen Sie den Wear-Leitfaden zur Verbesserung und Schonung des Akkus

[Neu] Übermäßige Teil-Wakelocks

 

Wir haben vor Kurzem angekündigt, dass Apps, die den Grenzwert für übermäßige Teil-Wakelocks überschreiten, ab dem 1. März 2026 möglicherweise zusätzlich eingeschränkt werden. 

Bei Mobilgeräten gilt die Android Vitals-Messwert für nicht ausgenommene Wakelocks, die abgerufen werden, während der Bildschirm ausgeschaltet ist und die App im Hintergrund ausgeführt wird oder einen Vordergrunddienst ausführt. In Android Vitals gilt die Verwendung von Teil-Wakelocks als übermäßig, wenn Wakelocks innerhalb eines Zeitraums von 24 Stunden mindestens zwei Stunden lang gehalten werden und dies im Durchschnitt über 28 Tage mehr als 5% der Sitzungen Ihrer App betrifft.

Informationen zum Debuggen und Beheben von Problemen mit übermäßigem Wakelock findest du in unserem technischen Blogpost.

Android Vitals-Dokumentation

Stufe 2: Aufgaben für den App-Leistungswert ausführen

Als Nächstes können Sie den App Performance Score verwenden, um die wichtigsten Maßnahmen zur Steigerung der App-Leistung zu ermitteln.

Der Android App Performance Score ist ein standardisiertes Framework zur Messung der technischen Leistung Ihrer App. Sie erhalten einen Wert zwischen 0 und 100. Je niedriger der Wert, desto mehr Optimierungspotenzial besteht.

Um schnell Erfolge zu erzielen, sollten Sie zuerst den statischen Leistungsindex optimieren. Dabei handelt es sich oft um Konfigurationsänderungen oder Tool-Updates, die die Leistung erheblich steigern.

Schritt 1: Statische Bewertung durchführen

Bei der statischen Bewertung werden die Konfiguration und die Verwendung von Tools in Ihrem Projekt geprüft. Das sind oft die schnellsten Möglichkeiten, die Leistung zu verbessern.

Rufen Sie auf der Seite „Rangliste“ den Abschnitt „Statische Punktzahl“ auf und gehen Sie so vor:

  1. Android-Gradle-Plug-in-Version (AGP) prüfen
  2. Führen Sie die R8-Minifizierung schrittweise ein oder verwenden Sie idealerweise R8 im Vollmodus, um den App-Code zu minimieren und zu optimieren.
  3. Verwenden Sie Baseline-Profile, um die Ausführungsgeschwindigkeit von Code ab dem ersten Start zu verbessern. So wird die Leistung für jede neue App-Installation und jedes App-Update verbessert.
  4. Verwenden Sie Startprofile, um das DEX-Layout zu verbessern. Startprofile werden vom Build-System verwendet, um die darin enthaltenen Klassen und Methoden weiter zu optimieren, indem das Layout des Codes in den DEX-Dateien Ihres APKs verbessert wird.
  5. Auf die neueste Version von Jetpack Compose aktualisieren

Schritt 2: Dynamische Bewertung durchführen

Nachdem Sie die statischen Easy Wins angewendet haben, können Sie die Verbesserungen mit der dynamischen Analyse auf einem echten Gerät überprüfen. Sie können dies zuerst manuell mit einem physischen Gerät und einer Stoppuhr tun.

Rufen Sie auf der Seite „Ergebnisse“ den Abschnitt „Dynamische Punktzahl“ auf und gehen Sie so vor:

  1. Richten Sie Ihre Testumgebung mit einem physischen Gerät ein. Verwenden Sie ein Low-End-Gerät, um Leistungsprobleme zu verstärken und so leichter zu erkennen.
  2. Startzeit über den Launcher messen Kaltstarten Sie Ihre App über das Launcher-Symbol und messen Sie die Zeit, bis sie interaktiv ist.
  3. Messen Sie die Startzeit der App über eine Benachrichtigung. Ziel ist es, die Startzeit der Benachrichtigung auf unter einige Sekunden zu reduzieren.
  4. Messen Sie die Rendering-Leistung, indem Sie durch Ihre wichtigsten Bildschirme und Animationen scrollen.

Nachdem Sie diese Schritte ausgeführt haben, erhalten Sie für die statischen und dynamischen Werte eine Punktzahl zwischen 1 und 100. So können Sie die Leistung Ihrer App besser nachvollziehen und wissen, worauf Sie sich konzentrieren sollten.

Stufe 3: Lokale Leistungstest-Frameworks nutzen

Wenn Sie die dynamische Leistung bewerten, kann es zu mühsam sein, die Leistung manuell zu messen. Erwägen Sie, Ihre Leistungstests mit Leistungstest-Frameworks wie Macrobenchmarks und UiAutomator zu automatisieren.

Macrobenchmark 💚 UiAutomator

Stellen Sie sich Macrobenchmark und UiAutomator als zwei Tools vor, die zusammenarbeiten: Macrobenchmark ist das Messinstrument. Es ist wie eine Stoppuhr und ein Zähler für die Framerate, der außerhalb Ihrer App ausgeführt wird. Er ist dafür verantwortlich, Ihre App zu starten, Messwerte wie die Startzeit oder verworfene Frames aufzuzeichnen und die App zu beenden. UiAutomator ist der Roboter-Nutzer. Mit der Bibliothek können Sie Code schreiben, um mit dem Display des Geräts zu interagieren. Es kann ein Symbol finden, auf eine Schaltfläche tippen,  in einer Liste scrollen und vieles mehr.

Test schreiben

Wenn Sie einen Test schreiben, umschließen Sie Ihren UiAutomator-Code mit einem Macrobenchmark-Block.

  1. Test definieren:Verwenden Sie die @MacrobenchmarkRule.
  2. Messung starten:Rufen Sie benchmarkRule.measureRepeated auf.
  3. Benutzeroberfläche steuern:Verwenden Sie in diesem Block UiAutomator-Code, um Ihre App zu starten, UI-Elemente zu finden und mit ihnen zu interagieren.

Hier ist ein Beispiel für ein Code-Snippet, mit dem eine Compose-Liste auf Ruckeln beim Scrollen getestet wird.

benchmarkRule.measureRepeated(

    // ...

    metrics = listOf(

        FrameTimingMetric(),

    ),

    startupMode = StartupMode.COLD,

    iterations = 10,

) {

    // 1. Launch the app's main activity

    startApp()

    // 2. Find the list using its resource ID and scroll down

    onElement { viewIdResourceName == "$packageName.my_list" }

        .fling(Direction.DOWN)

}

4. Ergebnisse ansehen: Jeder Testlauf liefert präzise gemessene Informationen, mit denen Sie die Leistung Ihrer App am besten nachvollziehen können.

timeToInitialDisplayMs  min  1894.4,   median 2847.4,   max  3355.6


frameOverrunMs          P50 -3.2,  P90  6.2, P95  10.4, P99  119.5

Gängige Anwendungsfälle

Macrobenchmark bietet mehrere wichtige Messwerte. Mit StartupTimingMetric können Sie den App-Start genau messen. Mit dem FrameTimingMetric können Sie die Rendering-Leistung einer App während des Tests nachvollziehen.

Wir haben einen detaillierten und vollständigen Leitfaden zur Verwendung von Macrobenchmarks und UiAutomator sowie Codebeispiele, mit denen Sie weiterlernen können.

Stufe 4: Tools zur Trace-Analyse wie Perfetto verwenden 

Trace-Analysetools wie Perfetto werden verwendet, wenn Sie mehr als nur Ihren eigenen Anwendungscode sehen möchten. Im Gegensatz zu Standard-Debuggern oder Profilern, die nur Ihren Prozess sehen, erfasst Perfetto den gesamten Gerätestatus – Kernel-Scheduling, CPU-Frequenz, andere Prozesse und Systemdienste – und bietet Ihnen so den vollständigen Kontext für Leistungsprobleme.

In unserer YouTube-Playlist zur Fehlerbehebung bei der Leistung finden Sie Videoanleitungen zur Fehlerbehebung bei der Leistung mithilfe von System-Traces, Android Studio Profiler und Perfetto.

Perfetto zur Fehlerbehebung bei der Leistung verwenden

Der allgemeine Workflow für die Fehlerbehebung bei der Leistung mithilfe von Tools zur Tracing-Analyse besteht darin, den Trace aufzuzeichnen, zu laden und zu analysieren. 

Schritt 1: Trace aufzeichnen

Es gibt mehrere Möglichkeiten, einen System-Trace aufzuzeichnen: 

Schritt 2: Trace laden

Sobald Sie die Trace-Datei haben, müssen Sie sie in das Analysetool laden.

  1. Öffnen Sie Chrome und rufen Sie ui.perfetto.dev auf.
  2. Ziehen Sie die Datei .perfetto-trace (oder .pftrace) per Drag-and-drop direkt in das Browserfenster.
  3. Die Datei wird von der Benutzeroberfläche verarbeitet und die Zeitachse wird angezeigt.

Schritt 3: Trace analysieren

Sie können die Perfetto-Benutzeroberfläche oder den Android Studio Profiler verwenden, um Leistungsprobleme zu untersuchen. In dieser Folge der MAD Skills-Reihe zum Thema Leistung spricht unsere Performance-Ingenieurin Carmen Jackson über den Perfetto-Traceviewer.

Szenarien für die Untersuchung von System-Traces mit Perfetto

Perfetto ist ein Expertentool, das Informationen zu allen Vorgängen auf dem Android-Gerät während der Erfassung eines Traces liefern kann. Das ist besonders hilfreich, wenn Sie die Ursache einer Verlangsamung nicht anhand von Standardlogs oder einfachen Profilern ermitteln können.

Debugging bei Ruckeln (verlorene Frames)

Wenn Ihre App beim Scrollen ruckelt, kann Perfetto Ihnen genau zeigen, warum ein bestimmter Frame die Deadline verpasst hat.

Wenn das Problem an der App liegt, sehen Sie möglicherweise, dass der Hauptthread über einen längeren Zeitraum hinweg ausgeführt wird und dabei viele Daten analysiert. In solchen Fällen sollten Sie die Aufgabe in die asynchrone Verarbeitung verlagern.

Wenn das Problem am System liegt, ist der Hauptthread möglicherweise bereit zur Ausführung, aber der CPU-Kernel-Scheduler hat einem anderen Systemdienst Priorität eingeräumt, sodass Ihre App warten muss (CPU-Konflikt). Dies weist auf Szenarien hin, in denen Sie die Nutzung von Plattform-APIs optimieren müssen.

Langsamen App-Start analysieren

Der Start ist komplex und umfasst die Systeminitialisierung, das Forken von Prozessen und das Laden von Ressourcen. Perfetto visualisiert diese Zeitachse genau.

Sie können sehen, ob Sie auf Binder-Aufrufe (Interprozesskommunikation) warten. Wenn Ihr onCreate lange auf eine Antwort vom System PackageManager wartet, wird dieser blockierte Status in Perfetto deutlich angezeigt. 

Sie können auch prüfen, ob Ihre App beim Start mehr Arbeit als nötig verrichtet. Wenn Sie beispielsweise mehr Ansichten erstellen und anordnen, als die App anzeigen muss, können Sie diese Vorgänge im Trace sehen.

Akkuentladung und CPU-Auslastung untersuchen

Da Perfetto das gesamte System im Blick hat, eignet es sich hervorragend, um unsichtbare Stromfresser zu finden.

In den Tracks zum Gerätestatus können Sie sehen, welche Prozesse Wakelocks halten und so verhindern, dass das Gerät in den Ruhezustand wechselt. Weitere Informationen finden Sie in unserem Blogpost zu Wake Locks. Mit Perfetto können Sie auch prüfen, ob Ihre Hintergrundjobs zu häufig ausgeführt werden oder die CPU unnötig aktivieren.

Stufe 5: Eigenes Framework zur Leistungsmessung erstellen

Die letzte Stufe ist für Apps, deren Teams über die Ressourcen verfügen, um ein Framework zur Leistungsanalyse zu pflegen. 

Um ein benutzerdefiniertes Framework zur Leistungsanalyse auf Android zu erstellen, müssen Sie mehrere System-APIs verwenden, um Daten während des gesamten Anwendungslebenszyklus zu erfassen, vom Start bis zum Beenden und in bestimmten Szenarien mit hoher Last.

Mit ApplicationStartInfo, ProfilingManager und ApplicationExitInfo können Sie ein robustes Telemetriesystem erstellen, das darüber informiert, wie Ihre App gestartet wurde, detaillierte Informationen darüber, was sie während der Ausführung getan hat, und warum sie beendet wurde.

ApplicationStartInfo: Tracking, wie die App gestartet wurde

Ab Android 15 (API 35) bietet ApplicationStartInfo detaillierte Messwerte zum App-Start in der Praxis. Die Daten enthalten Informationen dazu, ob es sich um einen Kalt-, Warm- oder Heißstart handelte, sowie die Dauer der verschiedenen Startphasen. 

So können Sie einen grundlegenden Startup-Messwert anhand von Produktionsdaten entwickeln, der sich lokal nur schwer reproduzieren lässt. Anhand dieser Messwerte können Sie A/B-Tests durchführen, um den Startablauf zu optimieren.

Ziel ist es, Startmesswerte genau zu erfassen, ohne jede Initialisierungsphase manuell zu instrumentieren.

Sie können diese Daten erst einige Zeit nach dem Start der Anwendung abfragen.

ProfilingManager: Erfassen, warum es langsam war

Mit ProfilingManager (API 35) kann Ihre App System-Traces auf Nutzergeräten programmatisch auslösen. So lassen sich vorübergehende Leistungsprobleme erkennen, die Sie lokal nicht reproduzieren können.

Ziel ist es, automatisch einen Trace aufzuzeichnen, wenn ein bestimmter, sehr kritischer Nutzerpfad langsam ausgeführt wird oder Leistungsprobleme auftreten.

Sie können einen Listener registrieren, der ausgelöst wird, wenn bestimmte Bedingungen erfüllt sind, oder ihn manuell auslösen, wenn Sie ein Leistungsproblem wie Ruckeln, übermäßigen Speicherverbrauch oder Akkuentladung erkennen.

In unserer Dokumentation finden Sie Informationen dazu, wie Sie ein Profil erfassen, Profilierungsdaten abrufen und analysieren und Debug-Befehle verwenden.

ApplicationExitInfo: Nachverfolgen, warum die App beendet wurde

ApplicationExitInfo (API 30) gibt an, warum der vorherige Prozess beendet wurde. Das ist entscheidend, um native Abstürze, ANRs oder Systembeendigungen aufgrund übermäßiger Arbeitsspeichernutzung (OOM) zu finden. Mit der API getTraceInputStream können Sie auch einen detaillierten Tombstone-Trace abrufen.

Ziel der API ist es, Stabilitätsprobleme zu erkennen, die keine standardmäßigen Java-Absturzberichte auslösen (z. B. Low Memory Kills).

Sie sollten diese API beim nächsten Start der App auslösen.

Nächste Schritte

Die Verbesserung der Android-Leistung ist ein schrittweiser Prozess. Wir sind schon gespannt, wie ihr eure Leistung mit diesen Tools steigern werdet.

Morgen bei „Ask Android“ dabei sein

Sie haben Ihre App mit R8 verkleinert und die Laufzeit mit Profile Guided Optimization optimiert. und die App-Leistung messen.

Sei morgen bei der Live-Session „Ask Android“ dabei. Stelle jetzt deine Fragen unter dem Hashtag #AskAndroid und lass sie von den Experten beantworten.

Verfasst von:

Weiterlesen