Для цього потрібно зробити дві речі:
- Уникайте "Примусового закриття" - стандартного способу збою програми.
- Налаштуйте механізм перезапуску, коли аварія все одно трапиться.
Подивіться нижче, як це зробити:
Зателефонуйте 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()методі ви можете показати діалогове вікно "Вибачте, програма розбилася, сподіваюся ніколи більше :)".