Abstürze und Ausnahmen – Android SDK

Dieses Dokument bietet eine allgemeine Übersicht über die Messung von Abstürzen und Ausnahmen mit dem Google Analytics SDK for Android Version 3.

Überblick

Mit der Absturz- und Ausnahmemessung können Sie die Anzahl und Art der erfassten und nicht abgefangenen Abstürze und Ausnahmen in Ihrer App messen. Eine Ausnahme hat folgende Felder:

Feldname Tracker-Feld Typ Erforderlich Beschreibung
Beschreibung Fields.EX_DESCRIPTION String Nein Eine Beschreibung der Ausnahme (bis zu 100 Zeichen). Akzeptiert null .
isFatal Fields.EX_FATAL boolean Ja Gibt an, ob es sich um einen schwerwiegenden Ausnahmefehler handelt. true weist auf einen schwerwiegenden Fehler hin.

Absturz- und Ausnahmedaten sind hauptsächlich im Absturz- und Ausnahmebericht verfügbar.

Abgefangene Ausnahmen

Abgefangene Ausnahmen sind Fehler in Ihrer App, für die Sie einen Code zur Ausnahmebehandlung definiert haben, z. B. die gelegentliche Zeitüberschreitung einer Netzwerkverbindung während einer Datenanfrage.

Zum Messen einer erkannten Ausnahme legen Sie die Ausnahmefeldwerte auf dem Tracker fest und senden den Treffer, wie in diesem Beispiel:

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

Messung nicht abgefangener Ausnahmen

Nicht abgefangene Ausnahmen stellen Instanzen dar, bei denen während der Laufzeit unerwartete Bedingungen in der App aufgetreten sind. Diese sind häufig schwerwiegend und führen zum Absturz der App. Nicht abgefangene Ausnahmen können mithilfe von EasyTracker oder der ExceptionReporter-Klasse automatisch an Google Analytics gesendet werden.

Verwenden von EasyTracker

Wenn Sie automatisch alle nicht erfassten Ausnahmen in Ihrer App mit EasyTracker senden möchten, fügen Sie diese Zeile in die Datei analytics.xml ein:

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

Nachdem Sie eine Ausnahme mithilfe der automatischen Ausnahmemessung gesendet haben, übergibt EasyTracker die Ausnahme an den standardmäßigen Ausnahme-Handler des Thread.

Verwenden einer erweiterten Implementierung

Verwenden Sie die Klasse ExceptionReporter, um die automatische Messung nicht abgefangener Ausnahmen zu implementieren, wenn Sie eine erweiterte Implementierung anstelle von EasyTracker verwenden.

ExceptionReporter kann als standardmäßiger nicht abgefangener Ausnahme-Handler für einen bestimmten Thread oder für alle Threads in Ihrer Anwendung dienen. Nachdem eine Ausnahme an Google Analytics gesendet wurde, kann die ExceptionReporter-Klasse die Ausnahme optional an einen nicht abgefangenen Ausnahme-Handler übergeben, den Sie bereitstellen.

Mit dem folgenden Code wird ein neues ExceptionReporter-Objekt erstellt und als neuer standardmäßiger nicht abgefangener Ausnahme-Handler festgelegt. Daher wird jede nicht erfasste Ausnahme an Google Analytics gesendet und dann an den vorherigen nicht abgefangenen Ausnahme-Handler übergeben. Bei den meisten Anwendungen protokolliert der Standard-Handler die Ausnahme im Log und beendet die Anwendung.

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

Beachten Sie Folgendes, wenn Sie die automatische Ausnahmemessung verwenden:

  • Alle Ausnahmen, die mit der automatischen Ausnahmemessung gesendet werden, werden in Google Analytics als schwerwiegend gemeldet.
  • Standardmäßig wird das Beschreibungsfeld automatisch anhand des Ausnahmetyps, des Klassennamens, des Methodennamens und des Thread-Namens festgelegt.

Beschreibungen von Ausnahmen parsen

Das SDK bietet ein StandardExceptionParser-Objekt, um das Abrufen und Senden von Ausnahmebeschreibungen an Google Analytics zu vereinfachen:

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

Sie können auch einen eigenen Parser implementieren, indem Sie die ExceptionParser-Schnittstelle implementieren und deren Methode setDescription aufrufen, wenn eine Ausnahme an Google Analytics gesendet wird.