Trace-Logs durch Instrumentieren Ihrer Anwendung generieren

Wenn Sie einen Methoden-Trace der Ausführung Ihrer Anwendung generieren möchten, können Sie Ihre Anwendung mit der Klasse Debug instrumentieren. Wenn Sie Ihre App auf diese Weise instrumentieren, erhalten Sie mehr Kontrolle darüber, wann das Gerät die Aufzeichnung von Tracinginformationen startet und beendet. Außerdem speichert das Gerät die Trace-Logs mit den von Ihnen angegebenen Namen, sodass Sie die einzelnen Logs später leicht identifizieren können. Anschließend können Sie jedes Trace-Log mit dem CPU-Profiler von Android Studio ansehen.

Sie können das Tracing auch im CPU-Profiler starten und beenden, ohne den Code Ihrer Anwendung zu instrumentieren.

Bevor Sie mit dem Generieren von Trace-Logs beginnen, prüfen Sie, ob Ihrer Anwendung Logik zum Speichern von Trace-Logs im anwendungsspezifischen Verzeichnis hinzugefügt wurde.

App instrumentieren

Rufen Sie zum Erstellen von Trace-Logs startMethodTracing() auf und zwar dort, wo das System das Logging von Tracing-Daten starten soll.

Im Aufruf kannst du den Namen für die Datei .trace angeben. Diese Datei wird dann vom System in einem paketspezifischen Verzeichnis gespeichert, das für persistente App-Daten auf dem Zielgerät vorgesehen ist. Dies ist dasselbe Verzeichnis, das von getExternalFilesDir() zurückgegeben wird und sich auf den meisten Geräten im Verzeichnis ~/sdcard/ befindet. Diese Datei enthält die Trace-Daten der binären Methode und eine Zuordnungstabelle mit Thread- und Methodennamen. Wenn Sie das Tracing beenden möchten, rufen Sie stopMethodTracing() auf.

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

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 startMethodTracing() noch einmal aufruft, ohne den Namen des Trace-Logs zu ändern, wird das auf dem Gerät gespeicherte Log überschrieben. Informationen zum dynamischen Ändern des Namens jedes Trace-Logs finden Sie im Abschnitt Mehrere Logs speichern.

Wenn das System die maximale Puffergröße erreicht, bevor Sie stopMethodTracing() aufrufen, beendet das System das Tracing und sendet eine Benachrichtigung an die Console. Die Methoden zum Starten und Stoppen von Traces funktionieren für den gesamten Anwendungsprozess. Das heißt, Sie könnten startMethodTracing() in der Methode onCreate(Bundle) Ihrer Aktivität und stopMethodTracing() in der Methode onDestroy() dieser Aktivität aufrufen.

Beachten Sie, dass Ihre Anwendung langsamer ausgeführt wird, wenn die Profilerstellung aktiviert ist. Sie sollten also nicht die Profildaten verwenden, um absolute Zeitangaben zu ermitteln (z. B. „Die Ausführung der Methode foo() dauert 2,5 Sekunden“). Die Zeitinformationen in den Trace-Logs sind nur für den Vergleich mit vorherigen Trace-Logs nützlich. So können Sie sehen, ob kürzlich vorgenommene Änderungen Ihre Anwendung schneller oder langsamer machen.

Bei der Bereitstellung auf Geräten mit Android 5.0 (API-Level 21) und höher können Sie die beispielbasierte Profilerstellung verwenden, um ein Profil zu erstellen, das sich weniger auf die Laufzeitleistung auswirkt. Wenn Sie die Beispielprofilerstellung aktivieren möchten, rufen Sie startMethodTracingSampling() (anstatt startMethodTracing()) mit einem angegebenen Stichprobenintervall auf. Das System erfasst regelmäßig Stichproben, bis Ihre Anwendung stopMethodTracing() aufruft.

Mehrere Logs speichern

Wenn Ihre App ein Methoden-Trace mehrmals startet und beendet, ohne einen neuen Namen für das Trace-Log anzugeben, überschreibt das Gerät das ältere Trace-Log mit dem neuen, d. h. es enthält nur das neueste Trace-Log. Wenn Sie mehrere Trace-Logs auf Ihrem Gerät speichern möchten, benennen Sie das Trace-Log jedes Mal dynamisch um, wenn Ihre App startMethodTracing() aufruft. Im folgenden Beispiel wird die Klasse SimpleDateFormat verwendet, um das aktuelle Datum und die aktuelle Uhrzeit beim Benennen der einzelnen Trace-Logs miteinzubeziehen:

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-Protokolle auf dem Gerät zugreifen

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

  • Geräte-Explorer verwenden Klicken Sie zum Öffnen des Geräte-Explorers auf Ansicht > Toolfenster > Geräte-Explorer (oder klicken Sie in der Symbolleiste der Symbolleiste auf die Schaltfläche Geräte-Explorer ). Wie in Abbildung 1 gezeigt, können Sie die .trace-Dateien im paketspezifischen Verzeichnis Ihrer App finden.

    Abbildung 1: Die Trace-Protokolle über den Geräte-Explorer finden

  • 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 in das Verzeichnis ~/Documents/trace-logs/ Ihres lokalen Computers kopiert.

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

Anschließend können Sie mit CPU Profiler die Trace-Datei importieren.