我目前有一个应用程序,如果用户多次崩溃,则启动不同的Activity。但是,由于后台服务/推送服务,应用程序仍然可能在此备用活动中崩溃。
有没有办法防止主线程死亡并仍然保留其消息队列。我正在使用Thread.setDefaultUncaughtExceptionHandler()
并吞下异常但似乎线程仍然冻结或终止。我尝试了thread.start()
,但是发布到MessageQueue的所有UI事件都不再起作用(视图被冻结)
答案 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);