Para lograr esto hay que hacer dos cosas:
- evitar el "force close" - forma estándar de bloqueo de la aplicación.
- Configure un mecanismo de reinicio cuando ocurra el bloqueo de todos modos.
Véase más adelante cómo hacer esto:
llamada Thread.setDefaultUncaughtExceptionHandler()
con el fin de coger todos excepción no detectada, en el que será llamado método del caso uncaughtException()
. "Force close" no aparecerá y la aplicación no responderá, lo cual no es algo bastante bueno. Con el fin de reiniciar la aplicación cuando se estrelló usted debe hacer lo siguiente:
En el método onCreate
, en su actividad inicializar un miembro de PendingIntent
:
Intent intent = PendingIntent.getActivity(
YourApplication.getInstance().getBaseContext(),
0,
new Intent(getIntent()),
getIntent().getFlags());
continuación, poner el siguiente en uncaughtException()
su método:
AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 2000, intent);
System.exit(2);
también debe llamar System.exit()
De lo contrario, no funcionará. De esta forma, su aplicación se reiniciará después de 2 segundos.
Finalmente, puede establecer alguna bandera en su intento de que la aplicación se bloquee y en su método onCreate()
puede mostrar un cuadro de diálogo "Lo siento, la aplicación se colgó, espero nunca más :)".
Intente obtener las excepciones correctas.Una aplicación que se reinicia automáticamente puede ser molesta para los usuarios. –
Solo quiero reiniciar mi aplicación si se cuelga. Creo que sería más amigable que molesto, especialmente cuando el usuario está en mi aplicación. Y sí, estoy tratando de obtener todas las excepciones correctas. :) – Johnny
@Johnny: Por favor, comparta la solución para su problema. –