Saltar al contenido

cómo implementar uncaughtException android

Solución:

Puede capturar todas las excepciones no detectadas en su clase de extensión de aplicación. En el controlador de excepciones, haga algo sobre la excepción e intente configurar AlarmManager para reiniciar su aplicación. Aquí hay 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);
    }
}

Básicamente, debe implementar su propia instancia de UncaughtExceptionHandler, luego deberá asegurarse de que por cada hilo que ejecute su aplicación, llame a setUncaughtExceptionHandler.

Luego, cuando ocurre una excepción no detectada en cualquiera de esos subprocesos, su propio UncaughtExceptionHandler será llamado y desde allí puede programar 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 App se ‘reinicia’ y no se reanuda donde estaba hace apenas un segundo, posiblemente incluso perdiendo la entrada anterior del usuario, etc.

Editar:

Mira aquí la respuesta de Gyuri. Aparte de eso, solo necesitas implementar una interfaz, a saber UncaughtExceptionHandlery ‘pegue’ el código de Gyuri en eso.

Editar # 2:

Como referencia: un servicio iniciado “pegajoso” también podría lograr el resultado deseado.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *