抛出未捕获的异常时是否可以阻止或重新启动主线程

时间:2017-04-21 08:53:12

标签: android uncaughtexceptionhandler android-thread

我目前有一个应用程序,如果用户多次崩溃,则启动不同的Activity。但是,由于后台服务/推送服务,应用程序仍然可能在此备用活动中崩溃。

有没有办法防止主线程死亡并仍然保留其消息队列。我正在使用Thread.setDefaultUncaughtExceptionHandler()并吞下异常但似乎线程仍然冻结或终止。我尝试了thread.start(),但是发布到MessageQueue的所有UI事件都不再起作用(视图被冻结)

1 个答案:

答案 0 :(得分:0)

在这种情况下,我不认为Thread.start()就足够了。如果我理解了这个问题,你就无法在未捕获的异常处理程序之后处理未捕获的异常。我认为最好的方法是开始你的"不同的活动"在另一个过程中。 Here is explained how to do that

我已从该答案中复制了一些来源。您首先准备待定意图。

intent = PendingIntent.getActivity(/*Applcation context*/, 0,
        /*Intent to 'different activity'*/, /*flags*/);

然后在未捕获的异常处理程序中设置警报管理器,让我们说2秒。

AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 2000, intent);
System.exit(2);