谷歌分析会发送两次未捕获的异常

3
为了将未捕获异常的堆栈跟踪包含在Google Analytics中,我使用自定义的 ExceptionParser 替换了默认的 ExceptionParser。 现在,我可以得到带有堆栈跟踪的异常信息,同时也可以得到不带堆栈跟踪的异常信息(默认情况下)。 请问我做错了什么?
public class AnalyticsHelper
{
    /**
    * This method is called in my Application#onCreate(..)
    **/
    public static void initAnalytics(Context c)
    {
        GoogleAnalytics analytics = GoogleAnalytics.getInstance(c);
        analytics.setAppOptOut(PreferenceManager.getDefaultSharedPreferences(c).getBoolean(PreferencesActivity.KEY_ANAYLTICS_OPT_OUT, false));

        // setting uncaught exception handler
        ExceptionReporter reporter = new ExceptionReporter(analytics.getInstance(c).newTracker(R.xml.tracker), Thread.getDefaultUncaughtExceptionHandler(), c);
        reporter.setExceptionParser(new ExceptionParser()
        {
            @Override
            public String getDescription(String p_thread, Throwable throwable)
            {
                StringWriter trace = new StringWriter();
                throwable.printStackTrace(new PrintWriter(trace));
                String stacktrace = trace.toString();

                String message = (throwable.getMessage() == null) ? "no message" : throwable.getMessage();
                return "Message: " + message
                        + ", Stacktrace: " + stacktrace;
            }
        });

        Thread.setDefaultUncaughtExceptionHandler(reporter);
    }
}

tracker.xml

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
           tools:ignore="TypographyDashes">
    <integer name="ga_sessionTimeout">300</integer>
    <bool name="ga_reportUncaughtExceptions">true</bool>
    <bool name="ga_autoActivityTracking">false</bool>
    <integer name="ga_dispatchPeriod">5</integer>
    <string name="ga_trackingId">XXXXXX</string>
</resources>
1个回答

3
Google Analytics文档中可以得知:
要使用EasyTracker自动发送应用程序中的所有未捕获异常,请将以下行添加到您的analytics.xml文件中: <bool name="ga_reportUncaughtExceptions">true</bool> 当使用自动异常测量发送异常后,EasyTracker将将异常传递给线程的默认异常处理程序。
通过将ga_reportUncaughtExceptions设置为truetracker将自动发送异常,这样您就会得到一个额外的没有stacktrace的报告。如果删除它,则只会得到一个报告。

你如何确认/验证这个? - Jared Burrows
你是指 ga_reportUncaughtExceptions 的行为吗?我已经在答案中添加了文档的参考链接。 - goofyz
不,你说通过删除“ga_reportUncaughtExceptions”,它只会发送一个异常而不是两个。 - Jared Burrows

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接