Trace-Logs durch Instrumentieren Ihrer Anwendung generieren

Sie können Ihre App instrumentieren, um einen Methoden-Trace der Ausführung Ihrer App zu generieren mit Debug . Wenn Sie Ihre App so instrumentieren, können Sie besser steuern, wann Das Gerät startet und beendet die Aufzeichnung von Tracing-Informationen. Das Gerät speichert auch Trace-Logs mit den von Ihnen angegebenen Namen, sodass Sie jedes Log einfach identifizieren können . Anschließend können Sie sich jedes Trace-Log in Android Studio ansehen. CPU-Profiler

Sie können auch Tracing im CPU Profiler starten und beenden ohne den Code Ihrer App zu instrumentieren.

Bevor Sie Trace-Logs generieren, sollten Sie prüfen, ob Ihre App Logik Speichern von Trace-Logs im app-spezifischen Verzeichnis.

App instrumentieren

Rufen Sie zum Erstellen von Trace-Logs startMethodTracing() auf. das System mit dem Logging von Tracing-Daten beginnen soll.

Im Aufruf können Sie den Namen des .trace-Datei und das System speichert sie in einer paketspezifischen das für persistente App-Daten auf dem Zielgerät vorgesehen ist: im selben Verzeichnis, das von der getExternalFilesDir() und befindet sich auf den meisten Geräten im Verzeichnis ~/sdcard/. Diese Datei enthält die Trace-Daten der binären Methoden und eine Zuordnungstabelle mit Thread. und Methodennamen. Um das Tracing zu beenden, rufen Sie stopMethodTracing()

Im folgenden Beispiel wird die Aufzeichnung eines Trace-Logs mit dem Namen gestartet und beendet. sample.trace:

Kotlin

// Starts recording a trace log with the name you provide. For example, the
// following code tells the system to start recording a .trace file to the
// device with the name "sample.trace".
Debug.startMethodTracing("sample")

// The system begins buffering the generated trace data, until your
// application calls <code><a href="/reference/android/os/Debug.html#stopMethodTracing()">stopMethodTracing()</a></code>, at which time it writes
// the buffered data to the output file.
Debug.stopMethodTracing()

Java

// Starts recording a trace log with the name you provide. For example, the
// following code tells the system to start recording a .trace file to the
// device with the name "sample.trace".
Debug.startMethodTracing("sample");
...
// The system begins buffering the generated trace data, until your
// application calls <code><a href="/reference/android/os/Debug.html#stopMethodTracing()">stopMethodTracing()</a></code>, at which time it writes
// the buffered data to the output file.
Debug.stopMethodTracing();

Wenn Ihre App die Methode startMethodTracing() Auch ohne den Namen des Trace-Logs zu ändern, wird das vorhandene Log überschrieben. die auf dem Gerät gespeichert sind. Weitere Informationen zum dynamischen Ändern des Namens jedes Trace finden Sie im Abschnitt Mehrere Logs speichern.

Wenn das System vor dem Aufruf die maximale Puffergröße erreicht stopMethodTracing(), stoppt das System das Tracing und sendet eine Benachrichtigung an die Konsole. Die Methoden zum Starten und Beenden von Traces gelten für den gesamten App-Prozess. Das könnten Sie beispielsweise startMethodTracing() in den onCreate(Bundle) und rufen Sie stopMethodTracing() auf in onDestroy() dieser Aktivität .

Beachten Sie, dass Ihre Anwendung langsamer ausgeführt wird, wenn die Profilerstellung aktiviert ist. Das heißt, Sie sollten die Profildaten nicht zur Bestimmung absoluter Timings verwenden (z. B. "Methode foo() benötigt 2,5 Sekunden zum Ausführen“). Die Zeitinformationen in den Trace-Logs ist nur beim Vergleich mit früheren Trace-Logs nützlich. So können Sie sehen, wird Ihre App schneller oder langsamer.

Bei der Bereitstellung auf Geräten mit Android 5.0 (API-Level 21) und höher haben Sie folgende Möglichkeiten: Verwenden Sie die samplebasierte Profilerstellung, um Profile mit geringeren Auswirkungen auf die Laufzeitleistung zu erstellen. Bis Beispielprofilerstellung aktivieren, aufrufen startMethodTracingSampling() (anstatt startMethodTracing() mit einer bestimmten Stichprobenerhebung aufzurufen) Intervall. Das System erfasst regelmäßig Stichproben, bis Ihre App aufruft. stopMethodTracing()

Mehrere Logs speichern

Wenn Ihre Anwendung einen Methoden-Trace mehrmals startet und stoppt, ohne einen Wert für Name für das Trace-Log gesetzt wurde, überschreibt das Gerät das ältere Trace-Log mit dem Parameter neu, d. h., es wird nur das neueste Trace-Protokoll gespeichert. Um mehrere zu speichern Trace-Logs auf Ihr Gerät übertragen, benennen Sie das Trace-Log jedes Mal dynamisch um, wenn Ihre App ruft startMethodTracing() auf. Im folgenden Beispiel wird die Methode SimpleDateFormat verwendet. , um das aktuelle Datum und die aktuelle Uhrzeit bei der Benennung der Trace-Logs anzugeben:

Kotlin

// Uses the <code><a href="/reference/java/text/SimpleDateFormat.html">SimpleDateFormat</a></code> class to create a String with
// the current date and time.
val dateFormat: DateFormat = SimpleDateFormat("dd_MM_yyyy_hh_mm_ss", Locale.getDefault())
val logDate: String = dateFormat.format(Date())
// Applies the date and time to the name of the trace log.
Debug.startMethodTracing("sample-$logDate")

Java

// Uses the <code><a href="/reference/java/text/SimpleDateFormat.html">SimpleDateFormat</a></code> class to create a String with
// the current date and time.
SimpleDateFormat dateFormat =
        new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss", Locale.getDefault());
String logDate = dateFormat.format(new Date());
// Applies the date and time to the name of the trace log.
Debug.startMethodTracing(
        "sample-" + logDate);

Auf Trace-Logs auf dem Gerät zugreifen

Nachdem das System das Trace-Protokoll auf Ihrem Gerät erstellt hat, können Sie auf die Datei zugreifen auf eine der folgenden Arten:

  • Geräte-Explorer verwenden Klicke zum Öffnen des Geräte-Explorers auf Ansicht > Tool-Fenster > Geräte-Explorer (oder klicken Sie auf das Geräte-Explorer in der Symbolleiste des Toolfensters. Wie in Abbildung 1 dargestellt, findest du die .trace-Dateien auf der paketspezifischen Verzeichnisses an.

    Abbildung 1: Trace-Logs mit dem Geräte-Explorer ermitteln

  • Kopieren Sie die Datei mit dem Befehl adb pull auf Ihren lokalen Computer. Mit dem folgenden Befehl wird ein Trace-Log mit dem Namen sample.trace vom Gerät kopiert: das Verzeichnis ~/Documents/trace-logs/ Ihres lokalen Computers.

    adb pull path-on-device/sample.trace ~/Documents/trace-logs/

Sie können dann importieren Sie die Ablaufverfolgungsdatei mit dem CPU-Profiler