To accomplish this you have to do two things:
- Avoid the “Force close” – standard way of application crash.
- Setup a restart mechanism when the crash happens anyway.
See below how to do these:
-
Call
Thread.setDefaultUncaughtExceptionHandler()
in order to catch all uncaught exception, in which caseuncaughtException()
method will be called. “Force close” will not appear and the application will be unresponsive, which is not a quite good thing.
In order to restart your application when it crashed you should do the following : -
In the
onCreate
method, in your main activity initialize aPendingIntent
member:Intent intent = PendingIntent.getActivity( YourApplication.getInstance().getBaseContext(), 0, new Intent(getIntent()), getIntent().getFlags());
Then put the following in your uncaughtException()
method:
AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 2000, intent);
System.exit(2);
You also must call System.exit()
, otherwise will not work.
In this way your application will restart after 2 seconds.
Eventually you can set some flag in your intent that the application crashed and in your onCreate()
method you can show a dialog “I’m sorry, the application crashed, hope never again :)”.