Bloqueos y excepciones

En este documento se ofrece una descripción general de la medición de bloqueos y de excepciones con la versión 4 del SDK de Google Analytics para Android.

Descripción general

La medición de los bloqueos y de las excepciones permite calcular el número y el tipo de bloqueos y excepciones detectados y no detectados que ocurren en tu aplicación. Una excepción tiene los siguientes campos:

Nombre del campo Tipo Obligatorio Descripción
Description String No Descripción de la excepción (hasta 100 caracteres). Admite null.
isFatal boolean Indica si la excepción ha sido irrecuperable. Con true se indica que sí lo es.

Los datos de bloqueos y de excepción se encuentran disponibles principalmente en el informe de bloqueos y de excepciones.

Excepciones detectadas

Las excepciones detectadas, como el tiempo de espera ocasional de una conexión de red durante una solicitud de datos, son errores de la aplicación que pueden gestionarse mediante el código que has implementado.

Mide una excepción detectada definiendo los valores del campo de excepción en el objeto de seguimiento y enviando el hit, tal como se indica en este ejemplo:

// Get tracker.
Tracker t =
    ((AnalyticsSampleApp) getActivity().getApplication()).getTracker(TrackerName.APP_TRACKER);

// Build and send exception.
t.send(new HitBuilders.ExceptionBuilder()
    .setDescription(getExceptionMethod() + ":" + getExceptionLocation())
    .setFatal(getExceptionFatal())
    .build());

Consulta la sección Configuración avanzada para obtener información detallada sobre el método getTracker.

Medir excepciones no detectadas

Las excepciones no detectadas representan instancias en las que tu aplicación ha detectado condiciones inesperadas durante la ejecución, a menudo irrecuperables, que bloquean la aplicación. Las excepciones no detectadas se pueden enviar a Google Analytics automáticamente estableciendo un valor de ga_reportUncaughtExceptions o usando la clase ExceptionReporter.

Configuración automática

Para enviar de forma automática a Google Analytics todas las excepciones no detectadas en tu aplicación, agrega esta línea al archivo de configuración XML:

<bool name="ga_reportUncaughtExceptions">true</bool>

Una vez enviada la excepción mediante la medición de excepciones automática, esta se enviará al controlador de excepciones predeterminado de Thread.

Usar una implementación avanzada

Usa la clase ExceptionReporter para implementar la medición automática de excepciones no detectadas si usas una implementación avanzada y no usas un valor para ga_reportUncaughtExceptions.

Se puede usar ExceptionReporter como controlador predeterminado de excepciones no detectadas tanto para un subproceso específico como para todos los subprocesos de la aplicación. Una vez enviada una excepción a Google Analytics, la clase ExceptionReporter puede enviar la excepción a cualquier controlador de excepciones no detectadas que especifiques.

Con el siguiente código podemos crear un nuevo objeto ExceptionReporter y definirlo como nuevo controlador predeterminado de excepciones no detectadas. Por lo tanto, cada excepción no detectada se enviará a Google Analytics y, a continuación, se enviará al controlador de excepciones no detectadas anterior. En la mayoría de las aplicaciones, el controlador predeterminado registrará la excepción en el registro y finalizará la aplicación.

Thread.UncaughtExceptionHandler myHandler = new ExceptionReporter(
    myTracker,
    Thread.getDefaultUncaughtExceptionHandler(),
    context);

// Make myHandler the new default uncaught exception handler.
Thread.setDefaultUncaughtExceptionHandler(myHandler);

Cuando uses la medición automática de excepciones, recuerda lo siguiente:

  • Todas las excepciones que se envían usando la medición automática de excepciones aparecen como críticas en los informes de Google Analytics.
  • De forma predeterminada, el campo de descripción se establece automáticamente usando el tipo de excepción, el nombre de la clase, el nombre del método y el nombre de subproceso.

Análisis de las descripciones de las excepciones

El SDK proporciona un StandardExceptionParser para simplificar el proceso de obtención y envío de las descripciones de excepciones a Google Analytics:

// Get tracker.
Tracker t = ((AnalyticsSampleApp) getActivity().getApplication()).getTracker(
    TrackerName.APP_TRACKER);

// Using StandardExceptionParser to get an Exception description.
try {
    // Request some scores from the network.
    ArrayList<Integer> highScores = getHighScoresFromCloud();
} catch (IOException e) {
    t.send(new HitBuilders.ExceptionBuilder()
        .setDescription(new StandardExceptionParser(this, null)
            .getDescription(Thread.currentThread().getName(), e))
        .setFatal(false)
        .build()
    );

    ... // Display alert to user that high scores are currently unavailable.
}

Además, puedes implementar tu propio analizador con la interfaz ExceptionParser y llamando a su método setDescription cuando se envíe una excepción a Google Analytics.