Сбои и исключения — Android SDK

В этом документе представлен общий обзор измерения сбоев и исключений с помощью Google Analytics SDK для Android v3.

Обзор

Измерение сбоев и исключений позволяет измерить количество и тип обнаруженных и необнаруженных сбоев и исключений, возникающих в вашем приложении. Исключение имеет следующие поля:

Имя поля Поле трекера Тип Необходимый Описание
Описание Fields.EX_DESCRIPTION String Нет Описание исключения (до 100 символов). Принимает null .
isFatal Fields.EX_FATAL boolean Да Указывает, было ли исключение фатальным. true указывает на фатальный исход.

Данные о сбоях и исключениях доступны в основном в отчете о сбоях и исключениях.

Обнаруженные исключения

Перехваченные исключения — это ошибки в вашем приложении, для которых вы определили код обработки исключений, например периодический тайм-аут сетевого подключения во время запроса данных.

Измерьте перехваченное исключение, установив значения полей исключения на трекере и отправив обращение, как в этом примере:

/*
 * An app tries to load a list of high scores from the cloud. If the request
 * times out, an exception is sent to Google Analytics
 */
try {

  // Request some scores from the network.
  ArrayList highScores = getHighScoresFromCloud();

} catch (IOException e) {

  // May return null if EasyTracker has not yet been initialized with a
  // property ID.
  EasyTracker easyTracker = EasyTracker.getInstance(this);

  // StandardExceptionParser is provided to help get meaningful Exception descriptions.
 	easyTracker.send(MapBuilder
      .createException(new StandardExceptionParser(this, null)              // Context and optional collection of package names
                                                                            // to be used in reporting the exception.
                       .getDescription(Thread.currentThread().getName(),    // The name of the thread on which the exception occurred.
                                       e),                                  // The exception.
                       false)                                               // False indicates a nonfatal exception
      .build()
  );


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

Измерение неперехваченных исключений

Неперехваченные исключения представляют собой случаи, когда ваше приложение сталкивалось с непредвиденными условиями во время выполнения, которые часто были фатальными и приводили к сбою приложения. Неперехваченные исключения можно отправлять в Google Analytics автоматически с помощью EasyTracker или класса ExceptionReporter .

Использование EasyTracker

Чтобы автоматически отправлять все неперехваченные исключения в вашем приложении с помощью EasyTracker, добавьте следующую строку в файл analytics.xml :

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

После отправки исключения с использованием автоматического измерения исключений EasyTracker передаст исключение обработчику исключений Thread по умолчанию.

Использование расширенной реализации

Используйте класс ExceptionReporter для реализации автоматического измерения неперехваченных исключений, если вы используете расширенную реализацию и не используете EasyTracker.

ExceptionReporter может служить обработчиком неперехваченных исключений по умолчанию для определенного потока или для всех потоков в вашем приложении. После отправки исключения в Google Analytics класс ExceptionReporter может дополнительно передать исключение предоставленному вами обработчику неперехваченных исключений.

Следующий код создает новый объект ExceptionReporter и устанавливает его в качестве нового обработчика неперехваченных исключений по умолчанию. В результате каждое неперехваченное исключение будет отправлено в Google Analytics, а затем передано предыдущему обработчику неперехваченных исключений. Для большинства приложений обработчик по умолчанию записывает исключение в журнал и завершает приложение.

UncaughtExceptionHandler myHandler = new ExceptionReporter(
    GoogleAnalytics.getInstance(this).getDefaultTracker(), // Tracker, may return null if not yet initialized.
    GAServiceManager.getInstance(),                        // GAServiceManager singleton.
    Thread.getDefaultUncaughtExceptionHandler());          // Current default uncaught exception handler.

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

При использовании автоматического измерения исключений имейте в виду следующее:

  • Все исключения, отправленные с использованием автоматического измерения исключений, в Google Analytics считаются фатальными.
  • По умолчанию поле описания автоматически задается с использованием типа исключения, имени класса, имени метода и имени потока.

Анализ описаний исключений

SDK предоставляет StandardExceptionParser для упрощения процесса получения и отправки описаний исключений в Google Analytics:

// Using StandardExceptionParser to get an Exception description.
try {

  // Request some scores from the network.
  ArrayList highScores = getHighScoresFromCloud();

} catch (IOException e) {

  // May return null if EasyTracker has not yet been initialized with a
  // property ID.
  EasyTracker easyTracker = EasyTracker.getInstance(this);

 	easyTracker.send(MapBuilder
      .createException(new StandardExceptionParser(this, null)              // Context and optional collection of package names
                                                                            // to be used in reporting the exception.
                       .getDescription(Thread.currentThread().getName(),    // The name of the thread on which the exception occurred.
                                       e),                                  // The exception.
	                     false)                                               // False indicates a fatal exception
      .build()
  );

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

Вы также можете реализовать свой собственный парсер, реализовав интерфейс ExceptionParser и вызвав его метод setDescription при отправке исключения в Google Analytics.