Błędy i wyjątki – pakiet SDK na Androida

Ten dokument zawiera ogólny opis metod pomiaru awarii i wyjątków za pomocą pakietu SDK Google Analytics na Androida w wersji 3.

Przegląd

Pomiary awarii i wyjątków pozwalają mierzyć liczbę i rodzaje wykrytych i niewykrytych awarii oraz wyjątków, które występują w aplikacji. Wyjątkiem są te pola:

Nazwa pola Pole skryptu śledzenia Typ Wymagane Opis
Opis Fields.EX_DESCRIPTION String Nie Opis wyjątku (maksymalnie 100 znaków). Akceptuje null .
isFatal Fields.EX_FATAL boolean Tak Wskazuje, czy wyjątek był krytyczny. true oznacza błąd krytyczny.

Dane o awariach i wyjątkach są dostępne przede wszystkim w raporcie o awariach i wyjątkach.

Złapane wyjątki

Wykryte wyjątki to błędy w aplikacji, w przypadku których zdefiniujesz kod obsługi wyjątków. Może to być na przykład rzadki limit czasu połączenia z siecią podczas żądania danych.

Aby określić zarejestrowany wyjątek, ustaw wartości pól wyjątków w narzędziu do śledzenia i wyślij działanie, jak w tym przykładzie:

/*
 * 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.
}

Pomiar niewykrytych wyjątków

Nieobsłużone wyjątki to przypadki, w których aplikacja napotkała nieoczekiwane warunki w czasie działania i często są krytyczne, powodując jej awarię. Niewykryte wyjątki mogą być wysyłane automatycznie do Google Analytics za pomocą klasy EasyTracker lub klasy ExceptionReporter.

Korzystanie z EasyTracker

Aby automatycznie wysyłać wszystkie niewyłapane wyjątki w aplikacji za pomocą EasyTracker, dodaj ten wiersz do pliku analytics.xml:

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

Po wysłaniu wyjątku za pomocą automatycznego pomiaru wyjątków EasyTracker przekaże ten wyjątek do domyślnego modułu obsługi wyjątków Thread.

Korzystanie z implementacji zaawansowanej

Jeśli korzystasz z implementacji zaawansowanej i nie używasz EasyTracker, użyj klasy ExceptionReporter, aby wdrożyć automatyczny pomiar niewykrytych wyjątków.

ExceptionReporter może służyć jako domyślny moduł obsługi niewykrytych wyjątków dla określonego wątku lub wszystkich wątków w aplikacji. Po wysłaniu wyjątku do Google Analytics klasa ExceptionReporter może go opcjonalnie przekazać do podanego przez Ciebie modułu obsługi niewykrytych wyjątków.

Poniższy kod tworzy nowy obiekt ExceptionReporter i ustawia go jako nowy domyślny moduł obsługi niewykrytych wyjątków. W efekcie każdy niewykryty wyjątek będzie wysyłany do Google Analytics, a następnie przekazywany do poprzedniego modułu obsługi niewykrytych wyjątków. W przypadku większości aplikacji domyślny moduł obsługi zarejestruje wyjątek w dzienniku i zamknie aplikację.

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

Jeśli korzystasz z automatycznego pomiaru wyjątków, pamiętaj o tych kwestiach:

  • Wszystkie wyjątki wysłane za pomocą automatycznego pomiaru wyjątków są zgłaszane w Google Analytics jako krytyczne.
  • Domyślnie pole opisu jest ustawiane automatycznie z użyciem typu wyjątku, nazwy klasy, nazwy metody i nazwy wątku.

Analizowanie opisów wyjątków

Pakiet SDK udostępnia funkcję StandardExceptionParser, która upraszcza proces pobierania i wysyłania opisów wyjątków do 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.
}

Możesz też wdrożyć własny parser, implementując interfejs ExceptionParser i wywołując jego metodę setDescription podczas wysyłania wyjątku do Google Analytics.