崩溃和异常 - Android SDK v2(旧版)

本文档简要介绍了如何使用 Android 版 Google Analytics(分析)SDK v2 进行崩溃和异常衡量。

概览

崩溃和异常衡量功能可帮助您衡量您的应用中发生的崩溃和异常的次数及类型。Google Analytics(分析)中的异常包括:

  • String (可选)说明 - 对异常情况的说明(最多 100 个字符)。 接受 null
  • boolean isFatal - 指示异常是否严重。true 表示严重。

崩溃和异常数据主要在“崩溃和异常”报告中提供。

捕获的异常

捕获的异常是指您的应用中已为其定义异常处理代码的错误。这些通常是您预计会在正常使用应用期间发生的错误,而您希望应用能够从这些错误中恢复,例如在请求数据期间偶尔出现网络连接超时。

您可以将 sendException() 添加到异常处理代码的 catch 代码块中,以衡量捕获的异常。

在以下示例中,应用尝试从云端加载最高得分列表。如果请求超时(可能是由于网络连接缓慢),我们会先向 Google Analytics(分析)发送异常,然后再为用户处理该异常:

try {
  ArrayList highScores = getHighScores();            // Get scores from the cloud.
} catch (IOException e) {
  Tracker myTracker = EasyTracker.getTracker();      // Get a reference to tracker.
  myTracker.sendException(e.getMessage(), false);    // false indicates non-fatal exception.

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

衡量未捕获的异常

未捕获的异常表示应用在运行时遇到意外情况的实例,这些异常通常是严重的,会导致应用因此崩溃。您可以使用 EasyTracker 或 ExceptionReporter 类将未捕获的异常自动发送到 Google Analytics(分析)。

使用 EasyTracker

如需使用 EasyTracker 自动发送您的应用中所有未捕获的异常,请将下面这行代码添加到您的 analytics.xml 文件中:

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

在使用自动异常衡量功能发送异常后,EasyTracker 会将异常传递到 Thread 的默认异常处理程序。

使用自动异常衡量功能时,请注意以下事项:

  • 所有使用自动异常衡量功能发送的异常都会在 Google Analytics(分析)中显示为严重异常。
  • 说明字段使用堆栈轨迹自动填充。

使用ExceptionReporter

如果您未使用 EasyTracker,请使用 ExceptionReporter 类实现自动未捕获的异常衡量。这个类就是 EasyTracker 为处理其自动异常报告而实现的类。

ExceptionReporter 可以充当应用中特定线程或所有线程的默认未捕获异常处理程序。向 Google Analytics(分析)发送异常后,ExceptionReporter 类可以选择将异常传递给您提供的未捕获异常处理程序。

以下代码会创建一个新的 ExceptionReporter 对象,并将其设置为新的默认未捕获异常处理程序。结果,每个未捕获异常都会先被发送到 Google Analytics(分析),然后被传递到该未捕获异常处理程序。对于大多数应用,默认处理程序会将异常记录到日志中,然后终止应用。

UncaughtExceptionHandler myHandler = new ExceptionReporter(
    myTracker,                                        // Currently used Tracker.
    GAServiceManager.getInstance(),                   // GAServiceManager singleton.
    Thread.getDefaultUncaughtExceptionHandler());     // Current default uncaught exception handler.

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

使用 ExceptionParser

您可以实现 SDK 提供的 ExceptionParser 接口,以便在向 Google Analytics(分析)发送未捕获的异常时从堆栈轨迹中获取最相关的说明。ExceptionParser 接口有一个方法:getDescription(String threadName, Throwable t)

您可以通过调用 setExceptionParser(ExceptionParser parser)Tracker 设置为在向 Google Analytics(分析)发送未捕获的异常时使用 ExceptionParser,如下例所示:

// Where myParser represents your implementation of ExceptionParser.
ExceptionParser parser = new myParser(context);

// Where myTracker is an instance of Tracker.
myTracker.setExceptionParser(parser);

然后,您的跟踪器会使用解析器的 getDescription() 方法来填充已发送至 Google Analytics(分析)的任何未捕获异常的说明字段。