android - robar - como hackear wifi
cómo implementar uncaughtException android (2)
Encontré este Android: ¿Cómo reiniciar automáticamente la aplicación después de que se haya "forzado a cerrar"?
Pero no sé dónde y cómo poner el gestor de alarmas.
Gracias
Básicamente, debes implementar tu propia instancia de UncaughtExceptionHandler , luego tendrás que asegurarte de que para cada subproceso que ejecuta tu aplicación llames setUncaughtExceptionHandler .
Luego, cuando ocurra una excepción no detectada en cualquiera de esos subprocesos, se llamará a su propio UncaughtExceptionHandler
y podrá programar desde allí el reinicio de su aplicación o lo que sea antes de pasar la excepción.
Sin embargo, no sé si realmente tiene sentido reiniciar la aplicación en ese caso. El usuario puede estar bastante "sorprendido" si, en medio de su interacción, la aplicación se "reinicia" y no se reanuda donde estaba hace apenas un segundo, posiblemente incluso perdiendo la entrada anterior del usuario, etc.
Editar:
Vea aquí , la respuesta de Gyuri. Aparte de eso, solo necesitas implementar una interfaz , es decir, UncaughtExceptionHandler
, y ''pegar'' el código de Gyuri en eso.
Edición # 2:
Para referencia: un servicio iniciado "sticky" podría lograr el resultado deseado.
Puede capturar todas las excepciones no detectadas en su clase de extensión de aplicación. En el controlador de excepciones, haga algo al respecto y trate de configurar AlarmManager para reiniciar su aplicación. Aquí está un ejemplo de cómo lo hago en mi aplicación, pero solo registro una excepción en una base de datos.
public class MyApplication extends Application {
// uncaught exception handler variable
private UncaughtExceptionHandler defaultUEH;
// handler listener
private Thread.UncaughtExceptionHandler _unCaughtExceptionHandler =
new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
// here I do logging of exception to a db
PendingIntent myActivity = PendingIntent.getActivity(getContext(),
192837, new Intent(getContext(), MyActivity.class),
PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmManager;
alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
15000, myActivity );
System.exit(2);
// re-throw critical exception further to the os (important)
defaultUEH.uncaughtException(thread, ex);
}
};
public MyApplication() {
defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
// setup handler for uncaught exception
Thread.setDefaultUncaughtExceptionHandler(_unCaughtExceptionHandler);
}
}