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, worin das Problem besteht 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. Mit System-Tracing lässt sich gut nachvollziehen, wie lange die Ausführung bestimmter Abschnitte Ihres Codes dauert.
Beim Methodentracing 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 einen vollständigen Überblick darüber, 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 Beeinträchtigung durch System-Tracing mit Detailebenen für das Methoden-Tracing in der Komposition.
Einrichtung des Kompositions-Tracings
Wenn Sie die Recomposition-Ablaufverfolgung in Ihrem Projekt ausprobieren möchten, müssen Sie mindestens die folgenden Versionen verwenden:
- 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 von Compose Runtime Tracing hinzufügen:
implementation("androidx.compose.runtime:runtime-tracing:1.8.1")
Wenn Sie das Compose-BOM verwenden, müssen Sie die Version nicht angeben:
val composeBom = platform("androidx.compose:compose-bom:2025.05.00")
implementation(composeBom)
// ...
// dependency without a version
implementation("androidx.compose.runtime:runtime-tracing")
Wenn Sie mit dieser Abhängigkeit einen System-Trace erstellen, der die Neuzusammensetzung umfasst, können Sie die zusammensetzbaren Funktionen automatisch sehen.
System-Trace aufzeichnen
So erstellen Sie einen System-Trace und sehen die neue Recomposition-Ablaufverfolgung 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 Benutzeroberfläche auf, die Sie analysieren möchten, wählen Sie System Trace (Systemanalyse) und Record (Aufzeichnen) aus.
Abbildung 4. Trace-Optionen – System Tracing Verwenden Sie Ihre App, um eine Neuzusammenstellung auszulösen und die Aufzeichnung zu beenden. Sobald der Trace verarbeitet wurde und angezeigt wird, sollten Sie die Composables im Recomposition-Trace sehen können. Sie können die Tastatur und Maus verwenden, um die Spur zu vergrößern und zu verschieben. Wenn Sie sich nicht mit der Navigation in einer Spur auskennen, lesen Sie die Dokumentation unter Spuren aufzeichnen.
Abbildung 5. System-Trace Wenn Sie im Diagramm auf ein Composable doppelklicken, gelangen Sie zum zugehörigen Quellcode.
Sie können Composables auch im Flammen-Diagramm zusammen mit der Datei- und Zeilennummer sehen:
Abbildung 6. Flame-Diagramm
Einschränkungen
Zusätzliche APK-Größe
Wir haben versucht, den Overhead der Funktion so weit wie möglich zu minimieren. Allerdings kommt es bei Compose-Apps zu einer Erhöhung der APK-Größe, da der Compose-Compiler Tracing-Strings in das APK einbettet. Diese Größensteigerung kann relativ gering sein, wenn Ihre App nicht viel Compose verwendet, oder größer bei Apps, die vollständig mit Compose entwickelt wurden. Diese Tracing-Strings sind zusätzlich nicht verschleiert, sodass sie in Tracing-Tools angezeigt werden können, wie oben 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, wird zwar die APK-Größe erhöht, aber das zu profilierende APK ist dasselbe, das auch von den App-Nutzern ausgeführt wird.
Genaue Zeitmessung
Für eine genaue Profilerstellung müssen Sie die App wie bei allen Leistungstests gemäß Profilerstellung für Apps profileable
und non-debuggable
.
Trace über das Terminal erfassen
Es ist möglich, einen Kompositionstrace ü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 Perfetto einen Aufzeichnungsbefehl.
Fügen Sie den Datenquellenabschnitt
track_event
manuell wie im 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 aufzeichnen
- Starten Sie die App und bereiten Sie den Bereich vor, den Sie verfolgen möchten.
Tracing in der App durch Senden eines Broadcasts aktivieren
# 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.TracingReceiver
Starten Sie den zuvor erstellten Aufzeichnungsbefehl.
Trace öffnen
adb pull <location>
– die Aufzeichnung vom Gerät (der Standort wird im Befehl „record“ angegeben).In Perfetto öffnen
Trace mit Jetpack Macrobenchmark aufzeichnen
Sie können die Leistung mit Jetpack Macrobenchmark messen. Die Ergebnisse werden in Form von Traces ausgegeben. So aktivieren Sie das Kompositionstracing mit Makrobenchmarks:
Fügen Sie dem Testmodul Macrobenchmark die folgenden 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=true
hinzu, bevor Sie Benchmarks ausführen. Weitere Informationen zu Instrumentierungsargumenten für Macrobenchmark finden Sie unter Macrobenchmark-Instrumentierungsargumente.
Feedback
Wir freuen uns auf Ihr Feedback zu dieser Funktion, auf alle Fehler, die Sie finden, und auf alle Anfragen, die Sie haben. Sie können uns Feedback über die Problemverfolgung senden.