Genera log di traccia strumentando la tua app

Per generare una traccia del metodo di esecuzione dell'app, puoi eseguire l'applicazione utilizzando la classe Debug. Se esegui l'instrumentazione dell'app in questo modo, hai un maggiore controllo su quando esattamente il dispositivo avvia e interrompe la registrazione delle informazioni di monitoraggio. Il dispositivo salva anche i log traccia utilizzando i nomi specificati, in modo da poter identificare facilmente ogni log in un secondo momento. Puoi quindi visualizzare ogni log traccia utilizzando il profilatore della CPU di Android Studio.

Puoi anche avviare e interrompere il monitoraggio nel profiler della CPU senza eseguire l'instrumentazione del codice dell'app.

Prima di iniziare a generare log di traccia, assicurati che l'app abbia aggiunto logica salvare i log di traccia nel file specifico Google Cloud.

Instrumenta l'app

Per creare log di traccia, chiama startMethodTracing() in cui vuoi che il sistema inizi a registrare i dati di tracciamento.

Nella chiamata, puoi specificare il nome del .trace file e il sistema lo salva in una directory specifica del pacchetto destinada ai dati delle app permanenti sul dispositivo di destinazione. Si tratta della stessa directory restituita da getExternalFilesDir() e si trova nella directory ~/sdcard/ sulla maggior parte dei dispositivi. Questo file contiene i dati di traccia del metodo binario e una tabella di mappatura con thread e i nomi dei metodi. Per interrompere il tracciamento, chiama stopMethodTracing().

Il seguente esempio avvia e interrompe la registrazione di un log di traccia con il nome 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();

Tieni presente che se l'app richiama nuovamente startMethodTracing() senza modificare il nome del log traccia, sovrascrive il log esistente salvato sul dispositivo. Per scoprire come modificare dinamicamente il nome di ogni log delle tracce, vai alla sezione relativa al salvataggio di più log.

Se il sistema raggiunge la dimensione massima del buffer prima di chiamare stopMethodTracing(), il sistema smette di tracciare e invia una notifica alla console. I metodi che avviano e interrompono le tracce funzionano nell'intero processo dell'app. In altre parole, puoi chiamare startMethodTracing() nel metodo onCreate(Bundle) della tua attività e chiamare stopMethodTracing() nel metodo onDestroy() della stessa attività.

Tieni presente che l'app funziona più lentamente quando il profiling è abilitato. In altre parole, non devi utilizzare i dati di profilazione per determinare i tempi assoluti (ad esempio, "l'esecuzione del metodo foo() richiede 2,5 secondi"). Le informazioni sui tempi nei log traccia sono utili solo se confrontate con i log traccia precedenti, in modo da poter vedere se le modifiche recenti rendono l'app più veloce o più lenta.

Quando esegui il deployment su dispositivi con Android 5.0 (livello API 21) e versioni successive, puoi utilizzare il profiling basato su sample per eseguire il profiling con un impatto inferiore sulle prestazioni di runtime. Per attivare il profiling dei campioni, chiama startMethodTracingSampling() (anziché startMethodTracing()) con un intervallo di campionamento specificato. Il sistema raccoglie i campioni periodicamente finché l'app non chiama stopMethodTracing().

Salvare più log

Se l'app avvia e interrompe un rilevamento di metodo più volte senza specificare un nuovo nome per il log di traccia, il dispositivo sovrascrive il log di traccia precedente con uno nuovo, ovvero conserva solo il log di traccia più recente. Per salvare più log di traccia sul dispositivo, rinominali dinamicamente ogni volta che l'app chiama startMethodTracing(). L'esempio seguente utilizza SimpleDateFormat per includere la data e l'ora correnti nella denominazione di ogni log di traccia:

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);

Accedere ai log delle tracce sul dispositivo

Dopo che il sistema ha creato il log di traccia sul dispositivo, puoi accedere al file in uno dei seguenti modi:

  • Utilizza lo Spazio di esplorazione dei dispositivi. Per aprire Esplora dispositivi, fai clic su Visualizza > Finestre degli strumenti > Esplora dispositivi (oppure fai clic su Esplorazione dispositivi nella barra della finestra degli strumenti). Come mostrato nella Figura 1 puoi trovare i file .trace andando alla sezione una directory specifica per il pacchetto.

    Figura 1. Individuare i log di traccia utilizzando Device Explorer.

  • Copia il file nella tua macchina locale utilizzando il comando adb pull. Il comando seguente copia un log traccia denominato sample.trace dal dispositivo alla directory ~/Documents/trace-logs/ della tua macchina locale.

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

Puoi quindi importa il file di traccia con il Profiler della CPU.