我正在使用Thread.setDefaultExceptionHandler()嘗試啓動新的活動,有效地重新啓動應用程序。但是,似乎ActivityManager剛剛啓動後正在殺死新的應用程序進程。Android uncaughtException後,ActivityManager強制停止新進程
我試過了一些實驗。最成功的是這個代碼,在異常處理程序中:
public void handleUncaughtException (Thread thread, Throwable e)
{
Intent intent = new Intent (getBaseContext(), RestartActivity.class);
intent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_CLEAR_TASK |
Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pending =
PendingIntent.getActivity (getBaseContext(), 0, intent, PendingIntent.FLAG_ONE_SHOT);
try {
pending.send();
}
catch (PendingIntent.CanceledException e1) {
logE ("send pending intent:" + e1); // logE is a wrapper for Log.e().
}
System.exit (1);
}
在這種情況下,RestartActivity啓動並顯示,但僅一秒鐘。然後,應用程序完全消失,Android顯示之前的應用程序。
日誌文件包含此(注意PID是略有不同):
05-29 22:46:28.429 1465-3665/? I/ActivityManager: Force stopping com.perinote.crashtest appid=10170 user=0: from pid 14484
05-29 22:46:28.429 1465-3665/? I/ActivityManager: Killing 14486:com.perinote.crashtest/u0a170 (adj 0): stop com.perinote.crashtest
我也嘗試使用AlarmManager,在這個變體:
public void handleUncaughtException (Thread thread, Throwable e)
{
Intent intent = new Intent (getBaseContext(), RestartActivity.class);
intent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_CLEAR_TASK |
Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pending =
PendingIntent.getActivity (getBaseContext(), 0, intent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarm = (AlarmManager)getSystemService (Context.ALARM_SERVICE);
alarm.set (AlarmManager.RTC, System.currentTimeMillis() + 3000, pending);
System.exit (1);
}
在這種情況下,沒有按RestartActivity根本沒有顯示,我看到這樣的logcat行:
05-29 22:06:46.841 1465-11842/? I/ActivityManager: Force stopping com.perinote.crashtest appid=10170 user=0: from pid 12551
什麼是causin g Android非常想要殺死剛開始的進程?
你有沒有嘗試過使用** android.os.Process.killProcess **? –
我不這麼認爲,但已經有一段時間了。目前這並不是我的優先考慮事項,所以在我嘗試其他任何事情之前,這將是一段「時間」。謝謝。 –
請勿使用** System.exit(1)**,因爲它不會清理任務堆棧,也不會讓操作系統有機會徹底退出您的應用程序。在這裏閱讀關於任務堆棧的更多信息:https://developer.android.com/guide/components/activities/tasks-and-back-stack.html –