Firebase Crashlytics使用自定义异常处理程序重新启动应用程序

时间:2018-04-11 15:44:39

标签: java android firebase crashlytics crashlytics-android

问题:我正在处理遗留项目(这是一个非常具体的项目),要求我们有一个拦截异常的自定义异常处理程序,杀死发生崩溃之前的应用程序并重新启动应用程序(不显示崩溃对话框)。

我尝试了什么:

我使用以下自定义异常处理程序重新启动应用程序进程:

public class UncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {

    (…)

    @Override
    public void uncaughtException(final Thread thread, final Throwable throwable) {
        (…)

        AppUtils.restartApplication(context);
    }

}

这是AppUtils.restartApplication(context)代码:

public final class AppUtils {

    (…)

    public static void restartApplication(@NonNull final Context context) {
        startApplication(context);
        closeApplication();
    }

    private static void startApplication(@NonNull final Context context) {
        final Intent rescueIntent = new Intent(context, Activity.class);
        rescueIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        final PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, rescueIntent, rescueIntent.getFlags());
        final AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        alarmManager.set(AlarmManager.RTC, DateTime.now().plusSeconds(1).getMillis(), pendingIntent);
    }

    private static void closeApplication() {
        Process.killProcess(Process.myPid());
        System.exit(SYSTEM_EXIT_STATUS_FORCE_QUIT);
    }

}

在我们使用Splunk之前,它的工作非常好。但现在我需要添加对 Firebase Crashlytics Crashlytics 的支持,因为它拥有ExceptionHandler。

所以我遇到了两个对我不起作用的场景:

  1. 不要重新启动应用,因此我可以使用Firebase正常登录;
  2. 重新启动应用,因此我无法使用Firebase进行日志记录;
  3. 我试图在我的自定义异常处理程序中使用Crashlytics中的logException方法绕过它,记录所有内容都是非致命的错误,但它并没有很好地工作:有时它正常记录,有时候没有& #39;吨。我相信这是因为Firebase inicializationlogException方法中的异步。

    我很感激任何帮助或建议。谢谢。

0 个答案:

没有答案