Для этого вам нужно сделать две вещи:
- Избегать «принудительного закрытия» - стандартного способа сбоя приложения.
- Настройка механизма перезапуска, если сбой все равно произойдет.
Ниже описано, как это сделать:
Вызвать Thread.setDefaultUncaughtExceptionHandler()
, чтобы перехватить все необработанные исключения, и в этом случае будет вызван метод uncaughtException()
,«Принудительное закрытие» не появится, и приложение не будет отвечать, что не очень хорошая вещь.Чтобы перезапустить приложение в случае его сбоя, вы должны сделать следующее:
В методе onCreate
в своей основной деятельности инициализировать элемент PendingIntent
:
Intent intent = PendingIntent.getActivity(
YourApplication.getInstance().getBaseContext(),
0,
new Intent(getIntent()),
getIntent().getFlags());
Затем введите в метод uncaughtException()
следующее:
AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 2000, intent);
System.exit(2);
Вы также должны вызвать System.exit()
, иначе не будет работать.Таким образом, ваше приложение будет перезапущено через 2 секунды.
В конце концов вы можете установить какой-либо флаг в своем намерении, что приложение потерпело крах, и в вашем методе onCreate()
вы можете отобразить диалоговое окно «Извините, приложениеразбился, надеюсь, никогда больше :) ".