本文档将大略介绍如何使用 Android 版 Google Analytics(分析)SDK v4 对崩溃和异常进行衡量。
概览
崩溃和异常衡量功能可帮助您衡量您的应用中发生的崩溃和异常的数量及类型。例外包含以下字段:
字段名称 | 类型 | 必需 | 说明 |
---|---|---|---|
说明 | String |
否 | 异常的相关说明(最多 100 个字符)。接受 null 。 |
isFatal | boolean |
是 | 指示异常是否严重。
true 表示严重。 |
崩溃和异常数据主要在“崩溃和异常”报告中提供。
捕获的异常
捕获的异常(例如在请求数据的过程中偶然出现网络连接超时)是您已经实现代码进行处理的应用中的错误。
为了对捕获的异常进行衡量,您应当在跟踪器上设置异常字段值并发送匹配,如下例所示:
// 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());
如需详细了解 getTracker
方法,请参阅
高级配置。
衡量未捕获的异常
未捕获的异常表示您的应用在运行时遇到的意外错误,此类异常通常是严重的,会导致应用崩溃。您可以通过设置 ga_reportUncaughtExceptions
配置值或使用 ExceptionReporter
类,自动向 Google Analytics(分析)发送未捕获的异常。
自动配置
要将您的应用中所有未捕获的异常自动发送到 Google Analytics(分析),请将下面这行代码添加到您的 XML 配置文件中:
<bool name="ga_reportUncaughtExceptions">true</bool>
在使用自动异常衡量功能发送异常后,相应异常会被传递到 Thread
的默认异常处理程序。
使用高级实现
如果您使用高级实现,并且未使用 ga_reportUncaughtExceptions
配置值,请使用 ExceptionReporter
类来实现自动未捕获异常衡量。
ExceptionReporter
可以充当应用中特定线程或所有线程的默认未捕获异常处理程序。向 Google Analytics(分析)发送异常后,ExceptionReporter
类可以选择将异常传递给您提供的未捕获异常处理程序。
以下代码会创建一个新的 ExceptionReporter
对象,并将其设置为新的默认未捕获异常处理程序。结果,每个未捕获异常都会先被发送到 Google Analytics(分析),然后被传递到该未捕获异常处理程序。对于大多数应用,默认处理程序会将异常记录到日志中,然后终止应用。
Thread.UncaughtExceptionHandler myHandler = new ExceptionReporter( myTracker, Thread.getDefaultUncaughtExceptionHandler(), context); // Make myHandler the new default uncaught exception handler. Thread.setDefaultUncaughtExceptionHandler(myHandler);
在使用自动异常衡量功能时,请注意以下事项:
- 所有使用自动异常衡量功能发送的异常都会在 Google Analytics(分析)中显示为严重异常。
- 默认情况下,说明字段会自动填充以下信息:异常类型、类名称、方法名称和线程名称。
解析异常说明
SDK 提供的 StandardExceptionParser
可简化获取异常说明并将其发送到 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. }
您也可以实现自己的解析器,方法是实现 ExceptionParser
接口,并在向 Google Analytics(分析)发送异常时调用该接口的 setDescription
方法。