lightbulb_outline Help shape the future of the Google Play Console, Android Studio, and Firebase. Start survey

Genera registros de seguimiento mediante la instrumentación de tu app

Para generar un seguimiento de métodos de la ejecución de tu app, puedes instrumentarla usando la clase Debug . Al instrumentar tu app de esta manera, tienes más control sobre el momento exacto en el cual el dispositivo inicia y finaliza el registro de la información de seguimiento. El dispositivo también guarda tus registros de seguimiento con los nombres que especifiques, por lo que podrás identificar fácilmente cada registro más adelante. Luego puedes ver cada registro de seguimiento usando Android Studio o Traceview.

Otra forma de hacer el seguimiento de tu app, sin necesidad de instrumentar el código de esta, es iniciar y detener el seguimiento de métodos usando CPU Profiler de Android Studio. Para obtener más información, consulta Inspeccionar la actividad de la CPU y los seguimientos de métodos con CPU Profiler.

Antes de comenzar a generar registros de seguimiento, asegúrate de que tu app tenga permisos de escritura en medios de almacenamiento externo (WRITE_EXTERNAL_STORAGE) para que pueda guardar los registros de seguimiento en el dispositivo.

Instrumenta tu app

Para crear registros de seguimiento, llama a startMethodTracing() donde desees que el sistema comience a registrar datos de seguimiento.

En la llamada, puedes especificar el nombre para el archivo .trace; el sistema lo guardará en un directorio específico del paquete destinado a datos persistentes de la app en el dispositivo de destino. Este es el mismo directorio que muestra getExternalFilesDir() y se encuentra en el directorio ~/sdcard/ en la mayoría de los dispositivos. Este archivo contiene los datos binarios del seguimiento de métodos y una tabla de asignación con nombres de métodos y subprocesos. Para detener el seguimiento, llama a stopMethodTracing().

En el siguiente ejemplo, se inicia y detiene la grabación del registro de seguimiento con el nombre sample.trace:

// 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 stopMethodTracing(), at which time it writes
// the buffered data to the output file.
Debug.stopMethodTracing();

Ten en cuenta que si tu app llama a startMethodTracing() nuevamente sin cambiar el nombre del registro de seguimiento, reemplaza el registro existente guardado en el dispositivo. Si deseas aprender a cambiar de forma dinámica el nombre de cada registro de seguimiento, visita la sección sobre cómo guardar varios registros.

Si el sistema alcanza el tamaño de búfer máximo antes de que llames a stopMethodTracing(), detiene el seguimiento y envía una notificación a la consola. Los métodos que inician y detienen los seguimientos funcionan durante todo el proceso de tu app. Es decir, puedes llamar a startMethodTracing() en el método onCreate(Bundle) de tu actividad y a stopMethodTracing() en el método onDestroy() de esa actividad.

Ten en cuenta que tu app se ejecuta con mayor lentitud cuando la generación de perfiles se encuentra activada. Es decir, no debes usar los datos de generación de perfiles para determinar sincronizaciones absolutas (por ejemplo, “el método foo() tarda 2,5 segundos en ejecutarse”). La información de sincronización de los registros de seguimiento es útil solo cuando se compara con datos de registros de seguimiento anteriores; esto te permite ver si los cambios recientes hacen a tu app más rápida o lenta.

Al realizar implementaciones en dispositivos con Android 5.0 (nivel de API 21) o versiones posteriores, puedes usar generación de perfiles basada en muestras para generar perfiles con menor impacto en el rendimiento durante el tiempo de ejecución. Para habilitar la generación de perfiles basada en muestras, llama a startMethodTracingSampling() (en vez de llamar a startMethodTracing()) con un intervalo de muestreo especificado. El sistema reúne ejemplos de forma periódica hasta que tu app llama a stopMethodTracing().

Guarda varios registros

Si tu app inicia y detiene un seguimiento de métodos varias veces sin especificar un nuevo nombre para el registro de seguimiento, el dispositivo reemplaza el registro de seguimiento más antiguo por el nuevo; es decir, solo conserva el más reciente. Para guardar varios registros de seguimiento en tu dispositivo, cambia el nombre de los registros de seguimiento de forma dinámica cada vez que tu app llame a startMethodTracing(). En el siguiente ejemplo se usa la clase SimpleDateFormat para incluir la fecha y hora actuales al nombrar a cada registro de seguimiento:

// Uses the SimpleDateFormat class to create a String with
// the current date and time.
SimpleDateFormat date =
        new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss");
String logDate = date.format(new Date());
// Applies the date and time to the name of the trace log.
Debug.startMethodTracing(
        "sample-" + logDate);

Accede a los registros de seguimiento en el dispositivo

Luego de que el sistema cree un registro de seguimiento en tu dispositivo, podrás acceder al archivo de una de las siguientes maneras:

  • Usa el explorador de archivos de dispositivos. Para abrir el explorador de archivos de dispositivos, haz clic en View > Tool Windows > Device File Explorer (o en el botón Device File Explorer en la barra de la ventana de herramientas). Como se muestra en la figura 1, puedes encontrar los archivos .trace si navegas al directorio específico del paquete de tu app.

    Figura 1: Cómo encontrar los registros de seguimiento usando el explorador de archivos de dispositivos.

    • Para ver rápidamente el registro de seguimiento dentro de la ventana del editor del IDE, como se muestra en la figura 2, haz doble clic en el archivo. También puedes hacer clic con el botón secundario en el archivo para guardarlo en tu disco local y luego usar Traceview para inspeccionar información más detallada, como los métodos principales y secundarios, los tiempos de ejecución promedio por llamada al método y el tiempo de CPU en comparación con el tiempo real. Si no ves los archivos de registro, prueba haciendo clic con el botón secundario en el directorio en el que esperabas verlos y selecciona Synchronize.

      Figura 2: Vista de un archivo .trace en Android Studio.

  • Copia el archivo a tu máquina local usando el comando adb pull. El siguiente comando copia un registro de seguimiento con el nombre sample.trace del dispositivo al directorio ~/Documents/trace-logs/ de tu máquina local. Luego, puedes ver el archivo .trace usando Traceview.

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