如何在应用程序崩溃之前保存堆栈跟踪



我需要存储崩溃日志并将其发送到服务器。我可以在崩溃日志存在之前将其保存在首选项中,但问题是它会重新启动应用程序并且不向用户显示默认崩溃消息。

我希望用户的崩溃流程正常。

public void registerCrash(){
    Thread.setDefaultUncaughtExceptionHandler (new Thread.UncaughtExceptionHandler()
    {
        @Override
        public void uncaughtException (Thread thread, Throwable e)
        {
            handleUncaughtException (thread, e);
        }
    });
}

public void handleUncaughtException (Thread thread, Throwable e)
{
    thread.getStackTrace();
    saveDataToFile(e.toString());
    System.exit(-1);
}

如果我更改System.exits(0),它会突然崩溃,并且不保存任何登录文件,并且使用 System.exit(-1); ,它会在崩溃时重新启动应用程序。

编辑

保存日期到文件((

SharedPreferences sharedPreferences= context.getSharedPreferences(CRASH_LOG, Context.MODE_PRIVATE);
SharedPreferences.Editor prefsEditor = sharedPreferences.edit();
prefsEditor.putString(STACK_TRACE, data);
prefsEditor.apply();

使用Fabric获取崩溃报告以及更多内容,例如安装或事件等。

它会自动将崩溃报告发送到服务器,并通过电子邮件通知您。

易于实现,只需要在此处包含SDK

即可

请查看 https://github.com/ligi/tracedroid - 它可以为您收集崩溃日志,您可以编写自己的发送模块

最新更新