问题:我正在处理遗留项目(这是一个非常具体的项目),要求我们有一个拦截异常的自定义异常处理程序,杀死发生崩溃之前的应用程序并重新启动应用程序(不显示崩溃对话框)。
我尝试了什么:
我使用以下自定义异常处理程序重新启动应用程序进程:
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。
所以我遇到了两个对我不起作用的场景:
我试图在我的自定义异常处理程序中使用Crashlytics中的logException
方法绕过它,记录所有内容都是非致命的错误,但它并没有很好地工作:有时它正常记录,有时候没有& #39;吨。我相信这是因为Firebase inicialization
和logException
方法中的异步。
我很感激任何帮助或建议。谢谢。