Android: How to auto-restart an application after it has been "force closed"?
The trick is make sure it doesn't Force Close in the first place.
If you use the Thread.setDefaultUncaughtExceptionHandler()
method you can catch the Exceptions that are causing your application to Force Close.
Have a look at this question for an example of using an UncaughtExceptionHandler
to log the Exceptions raised by an application.
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 :)".