Traces sind oft die beste Informationsquelle, wenn Sie sich zum ersten Mal mit einem Leistungsproblem befassen. Sie können damit eine Hypothese darüber aufstellen, was das Problem ist und wo Sie mit der Suche beginnen sollten.
Unter Android werden zwei Tracing-Ebenen 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 dem System-Tracing können Sie 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 beeinträchtigt die Leistung Ihrer App erheblich. Sie erhalten jedoch ein Gesamtbild 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.
Mit dem Kompositions-Tracing werden zusammensetzbare Funktionen in System-Traces angezeigt. Die Funktion bietet die geringe Aufdringlichkeit des System-Tracing, wobei die Detailebenen des Methoden-Tracing in der Zusammensetzung enthalten sind.
Kompositions-Tracing einrichten
Wenn Sie das Rekompositions-Tracing 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 für Compose Runtime Tracing hinzufügen:
implementation("androidx.compose.runtime:runtime-tracing:1.12.1")
Wenn Sie die Compose-BOM verwenden, müssen Sie die Version nicht angeben:
val composeBom = platform("androidx.compose:compose-bom:2026.09.00")
implementation(composeBom)
// ...
// dependency without a version
implementation("androidx.compose.runtime:runtime-tracing")
Wenn Sie mit dieser Abhängigkeit einen System-Trace erstellen, der eine Neuzusammensetzung enthält, werden die zusammensetzbaren Funktionen automatisch angezeigt.
System-Tracing durchführen
So erstellen Sie einen System-Trace und sehen sich das neue Rekompositions-Tracing an:
Ö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 verfolgen möchten, und wählen Sie dann System-Trace und Aufzeichnen aus.
Abbildung 4: Trace-Optionen – System-Trace Verwenden Sie Ihre App, um eine Neuzusammensetzung auszulösen, und beenden Sie die Aufzeichnung. Sobald der Trace verarbeitet wurde und angezeigt wird, sollten Sie die Composables im Rekompositions-Trace sehen können. Sie können mit der Tastatur und der Maus im Trace zoomen und schwenken. Wenn Sie mit der Navigation in einem Trace nicht vertraut sind, lesen Sie die Dokumentation zu Traces aufzeichnen.
Abbildung 5. System Tracing Wenn Sie im Diagramm auf ein Composable doppelklicken, gelangen Sie zum zugehörigen Quellcode.
Sie können Composables auch im Flame-Diagramm zusammen mit der Datei und der Zeilennummer sehen:
Abbildung 6. Flame-Diagramm
Vorsichtsmaßnahmen
Beachten Sie bei der Verwendung von Composition Tracing die folgenden Einschränkungen hinsichtlich APK-Größe und Leistung.
APK-Größen-Overhead
Wir haben versucht, den Overhead der Funktion so weit wie möglich zu minimieren. Dennoch erhöht sich die APK-Größe für Compose-Apps aufgrund von Tracing-Strings, die vom Compose-Compiler in das APK eingebettet werden. Diese Größenzunahme kann relativ gering sein, wenn Ihre App nicht viel Compose verwendet, oder größer, wenn es sich um eine vollständige Compose-App handelt. Diese Tracing-Strings sind außerdem nicht verschleiert, sodass sie wie oben gezeigt in Tracing-Tools angezeigt werden können. 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, erhöht sich zwar die APK-Größe, aber Sie können sicher sein, dass das APK, für das ein Profil erstellt wird, mit dem APK übereinstimmt, das die App-Nutzer ausführen.
Genaues Timing
Für ein genaues Profiling müssen Sie die App wie bei jedem Leistungstest gemäß Profilierbare Anwendungen profileable und non-debuggable machen.
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 erledigt.
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")
Befehl zum Aufzeichnen generieren
- Generieren Sie einen Aufzeichnungsbefehl in Perfetto.
Fügen Sie den Datenquellenabschnitt
track_eventmanuell hinzu, wie im folgenden Beispiel gezeigt: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
- Öffnen 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.TracingReceiverStarten Sie den zuvor erstellten Aufzeichnungsbefehl.
Trace öffnen
adb pull <location>den Trace vom Gerät (Speicherort im Befehl „record“ angegeben).Öffnen Sie die Datei in Perfetto.
Trace mit Jetpack Macrobenchmark erfassen
Die Leistung lässt sich mit Jetpack Macrobenchmark messen. Als Ergebnis werden Traces ausgegeben. So aktivieren Sie das Kompositions-Tracing mit Makro-Benchmarks:
Fügen Sie dem Macrobenchmark-Testmodul 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=truehinzu, bevor Sie Benchmarks ausführen. Weitere Informationen zu den Instrumentierungsargumenten für Macrobenchmark finden Sie unter Instrumentierungsargumente für Macrobenchmark.
Feedback
Wir freuen uns über Ihr Feedback zu dieser Funktion, über Fehler, die Sie finden, und über Ihre Anfragen. Sie können uns Feedback über den Issue Tracker senden.