Traces sind oft die beste Informationsquelle, wenn Sie sich zum ersten Mal mit einem Leistungsproblem befassen. Sie ermöglichen es Ihnen, eine Hypothese zu formulieren, was das Problem ist und wo Sie mit der Suche beginnen sollten.
Unter Android werden zwei Arten von Tracing unterstützt: System-Tracing und Methoden-Tracing.
Da beim System-Tracing nur Bereiche erfasst werden, die speziell für das Tracing markiert sind, ist der Aufwand gering und die Leistung Ihrer App wird nicht wesentlich beeinträchtigt. Das System-Tracing eignet sich hervorragend, um zu sehen, wie lange die Ausführung bestimmter Abschnitte Ihres Codes dauert.
Beim Methoden-Tracing wird jeder Funktionsaufruf in Ihrer App erfasst. Das ist sehr aufwendig und wirkt sich daher stark auf die Leistung Ihrer App aus. Sie erhalten jedoch ein vollständiges Bild davon, was passiert, welche Funktionen aufgerufen werden und wie oft sie aufgerufen werden.
Standardmäßig enthalten System-Traces keine einzelnen zusammensetzbaren Funktionen. Sie sind in Methoden-Traces verfügbar.
Beim Kompositions-Tracing werden zusammensetzbare Funktionen in System-Traces angezeigt. Die Funktion bietet die geringe Intrusivität des System-Tracing mit der Detailgenauigkeit des Methoden-Tracing bei der Komposition.
Kompositions-Tracing einrichten
Wenn Sie das Recomposition-Tracing in Ihrem Projekt ausprobieren möchten, müssen Sie mindestens auf die folgenden Versionen aktualisieren:
- Android Studio Flamingo
- Compose UI: 1.3.0
- Compose Compiler: 1.3.0
Das Gerät oder der Emulator, auf dem Sie den Trace ausführen, muss mindestens API-Level 30 haben.
Außerdem müssen Sie eine neue Abhängigkeit für Compose Runtime Tracing hinzufügen:
implementation("androidx.compose.runtime:runtime-tracing:1.11.1")
Wenn Sie die Compose BOM verwenden, müssen Sie die Version nicht angeben:
val composeBom = platform("androidx.compose:compose-bom:2026.05.00")
implementation(composeBom)
// ...
// dependency without a version
implementation("androidx.compose.runtime:runtime-tracing")
Mit dieser Abhängigkeit können Sie die zusammensetzbaren Funktionen automatisch sehen, wenn Sie einen System-Trace erstellen, der Recomposition enthält.
System-Trace erstellen
So erstellen Sie einen System-Trace und sehen das neue Recomposition-Tracing in Aktion:
Öffnen Sie den Profiler:
Abbildung 2. Android Studio – Profilerstellung starten Klicken Sie auf CPU-Zeitachse.
Abbildung 3. Android Studio Profiler – CPU-Zeitachse Rufen Sie in Ihrer App die UI auf, die Sie verfolgen möchten, und wählen Sie dann System-Trace und Aufzeichnen aus.
Abbildung 4. Trace-Optionen – System-Trace Verwenden Sie Ihre App, um Recomposition zu verursachen, und beenden Sie die Aufzeichnung. Sobald der Trace verarbeitet wurde und angezeigt wird, sollten Sie die zusammensetzbaren Funktionen im Recomposition-Trace sehen können. Sie können mit der Tastatur und der Maus in den Trace hinein- und herauszoomen und ihn verschieben . Wenn Sie mit der Navigation in einem Trace nicht vertraut sind, lesen Sie die Dokumentation zu Traces aufzeichnen.
Abbildung 5. System-Trace Wenn Sie im Diagramm auf eine zusammensetzbare Funktion doppelklicken, gelangen Sie zu ihrem Quellcode.
Sie können zusammensetzbare Funktionen auch im Flame-Diagramm zusammen mit der Datei- und Zeilennummer sehen:
Abbildung 6. Flame-Diagramm
Vorsichtsmaßnahmen
Beachten Sie bei der Verwendung des Kompositions-Tracing die folgenden Vorsichtsmaßnahmen in Bezug auf APK-Größe und Leistung.
Zusätzlicher Aufwand für die APK-Größe
Wir haben versucht, den Aufwand der Funktion so gering wie möglich zu halten. Es gibt jedoch eine Zunahme der APK-Größe für Compose-Apps, die auf Tracing-Strings zurückzuführen ist, die vom Compose-Compiler in die APK eingebettet werden. Diese Zunahme kann relativ gering sein, wenn Ihre App nicht viel Compose verwendet, oder größer für vollständige Compose-Apps. Diese Tracing-Strings sind außerdem nicht verschleiert, sodass sie in Tracing-Tools angezeigt werden können, wie bereits gezeigt. Der Compose-Compiler fügt sie ab Version 1.3.0 in alle Apps ein.
Die Tracing-Strings können in Ihrem Produktions-Build entfernt werden, indem Sie die folgende ProGuard-Regel hinzufügen:
-assumenosideeffects public class androidx.compose.runtime.ComposerKt {
boolean isTraceInProgress();
void traceEventStart(int,int,int,java.lang.String);
void traceEventStart(int,java.lang.String);
void traceEventEnd();
}
Diese Funktionen können sich in Zukunft ändern. Alle Änderungen werden jedoch in den Versionshinweisen zu Compose erwähnt.
Wenn Sie die Funktionen beibehalten, entstehen zwar einige Kosten für die APK-Größe, aber so ist sichergestellt, dass die APK, die profiliert wird, mit der APK identisch ist, die von den App-Nutzern ausgeführt wird.
Genaue Zeitangaben
Für eine genaue Profilerstellung müssen Sie wie bei jedem Leistungstest die
App profileable und non-debuggable gemäß Profilierbare Anwendungen festlegen.
Trace über das Terminal erfassen
Es ist möglich, einen Kompositions-Trace über das Terminal zu erfassen. Dazu müssen Sie die Schritte ausführen, die Android Studio normalerweise automatisch für Sie ausführt.
Abhängigkeiten hinzufügen
Fügen Sie zuerst die zusätzlichen Abhängigkeiten zu Ihrer App hinzu.
implementation("androidx.tracing:tracing-perfetto:1.0.0")
implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
Aufzeichnungsbefehl generieren
- Generieren Sie mit in Perfetto einen Aufzeichnungsbefehl.
Fügen Sie den Datenquellenabschnitt
track_eventmanuell gemäß dem folgenden Beispiel hinzu:adb shell perfetto \ -c - --txt \ -o /data/misc/perfetto-traces/trace \ <<EOF buffers: { size_kb: 63488 fill_policy: RING_BUFFER } buffers: { size_kb: 2048 fill_policy: RING_BUFFER } data_sources: { config { name: "track_event" } } duration_ms: 10000 flush_period_ms: 30000 incremental_state_config { clear_period_ms: 5000 } EOF
Trace erfassen
- Starten Sie die App und bereiten Sie den Abschnitt vor, den Sie verfolgen möchten.
Aktivieren Sie das Tracing in der App, indem Sie eine Broadcast-Nachricht senden.
# set app package variable, e.g. com.google.samples.apps.nowinandroid.debug # can be found through `adb shell ps -ef` or `adb shell cmd package list packages` package=<your app process> # issue a broadcast to enable tracing adb shell am broadcast \ -a androidx.tracing.perfetto.action.ENABLE_TRACING \ $package/androidx.tracing.perfetto.TracingReceiverStarten Sie den zuvor erstellten Aufzeichnungsbefehl.
Trace öffnen
adb pull <location>den Trace vom Gerät ab (der Speicherort wird im Aufzeichnungsbefehl angegeben).Öffnen Sie ihn in Perfetto.
Trace mit Jetpack Macrobenchmark erfassen
Sie können die Leistung mit Jetpack Macrobenchmark, das Traces als Ergebnisse liefert. So aktivieren Sie das Kompositions-Tracing mit Macrobenchmarks:
Fügen Sie dem Testmodul Macrobenchmark diese zusätzlichen Abhängigkeiten hinzu:
implementation("androidx.tracing:tracing-perfetto:1.0.0") implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")Fügen Sie das Instrumentierungsargument
androidx.benchmark.fullTracing.enable=truehinzu, bevor Sie Benchmarks ausführen. Weitere Informationen zu Macrobenchmark Instrumentierungsargumenten finden Sie unter Macrobenchmark-Instrumentierungsargumente.
Feedback
Wir freuen uns über Ihr Feedback zu dieser Funktion, alle Fehler, die Sie finden, und alle Anfragen, die Sie haben. Sie können uns Feedback über die Problemverfolgung senden.