4

在我的 Android 应用程序中,我利用setDefaultUncaughtExceptionHandler在用户设备上本地存储有关未处理异常的信息。经过一些反馈后,我怀疑此代码阻止了内置的 Google 错误报告功能,因为我在开发者控制台中看不到错误报告,而用户​​报告了异常。他们的设备远远超过了 2.2,其中引入了错误报告。可能是具有 4.0.3 的特定设备不支持此功能吗?如果是,我如何以编程方式检测到这一点?

我在 Android 文档中找不到与此相关的信息。我希望标准错误报告和我的自定义处理一起工作。在我的自定义异常处理程序中,我调用Thread.getDefaultUncaughtExceptionHandler()以获取默认处理程序,并且在我的实现中,uncaughtException我也将异常传播到此默认处理程序。

4

2 回答 2

2

我首先尝试按此 S​​O answerSystem.exit(1);中所述进行呼叫,但这没有用。

uncaughtException(Thread thread, Throwable ex)最后通过在 Androids default 上调用再次解决它UncaughtExceptionHandler(通过检查ACRA 源代码找到它。

示例活动

public class MainActivity extends Activity implements Thread.UncaughtExceptionHandler {
    private Thread.UncaughtExceptionHandler _androidUncaughtExceptionHandler;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        _androidUncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
        Thread.setDefaultUncaughtExceptionHandler(this);

        // Rest onCreate
        setContentView(R.layout.main_activity);
    }

    //@Override
    public void uncaughtException(Thread thread, Throwable ex) {
        try {
            // Do your stuff with the exception
        } catch (Exception e) {
            /* Ignore */
        } finally {
            // Let Android show the default error dialog
            _androidUncaughtExceptionHandler.uncaughtException(thread, ex);
        }
    }
}
于 2014-09-11T22:39:49.580 回答
0

是的,这将停止内置的错误报告。当您的应用崩溃时,用户会看到一个对话框,其中包含通过 Google Play 报告错误的选项。但是,如果您使用setDefaultUncaughtExceptionHandler()该异常,则会在您的应用程序中处理该异常,并且不会给出报告它的选项。

我建议您将ACRA集成到您的项目中,因为它可以让您在崩溃时轻松接收错误报告。

于 2012-09-21T18:59:05.450 回答