Aby to osiągnąć, musisz zrobić dwie rzeczy:
- Unikaj „Wymuś zamknięcie” - standardowego sposobu awarii aplikacji.
- Skonfiguruj mechanizm ponownego uruchamiania, gdy awaria mimo wszystko nastąpi.
Zobacz poniżej, jak to zrobić:
Wywołaj Thread.setDefaultUncaughtExceptionHandler(), aby złapać wszystkie nieprzechwycone wyjątki, w którym to przypadku uncaughtException()zostanie wywołana metoda. „Wymuś zamknięcie” nie pojawi się, a aplikacja nie będzie odpowiadać, co nie jest całkiem dobrą rzeczą. Aby ponownie uruchomić aplikację po awarii, wykonaj następujące czynności:
W onCreatemetodzie w głównym działaniu zainicjuj PendingIntentczłonka:
Intent intent = PendingIntent.getActivity(
YourApplication.getInstance().getBaseContext(),
0,
new Intent(getIntent()),
getIntent().getFlags());
Następnie umieść następujące w swojej uncaughtException()metodzie:
AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 2000, intent);
System.exit(2);
Musisz też zadzwonić System.exit(), inaczej nie zadziała. W ten sposób Twoja aplikacja uruchomi się ponownie po 2 sekundach.
W końcu możesz ustawić flagę w zamiarze, że aplikacja się zawiesiła, aw Twojej onCreate()metodzie możesz wyświetlić okno dialogowe „Przepraszam, aplikacja się zawiesiła, mam nadzieję, że nigdy więcej :)”.