Actividad global de manejo de errores e informes de Android

¿Hay alguna forma de registrar un controlador de errores global que evitará que la aplicación se bloquee? La notificación de fallos se describe aquí: ¿Cómo obtengo datos de fallos de mi aplicación de Android? . Un pensamiento que tenía era extender estas soluciones para tener en el contexto de la aplicación para un reorientación a una actividad de reporte particular podría hacerse? ¿Pero no está seguro de si el contexto de la aplicación es válido en este momento una vez que hay un fallo al informar?

Pero, ¿cómo puede redirigir al usuario a un mensaje de error global Actividad cuando hay un bloqueo? ¿Existe alguna forma de alto nivel para registrar un controlador de errores que capturará todos los errores y prevendrá un fallo? ¿Hay una manera de registrar tal manejador de modo que previene o sobrevive a un desplome y entonces redirige al usuario a una actividad particular que muestre el mensaje de error en la pregunta?

Aquí está mi modificación al manejador de errores:

1) Simplemente pasar applicationContext en constructor como ctx

2) add reportError(stackTrace) método para transferir el control a la página de mensaje de error

 private void reportError(String stackTrace){ Intent i = new Intent(ctx, DisplayErrorActivity.class); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.setAction("DISPLAY_ERROR_ACTIVITY"); Bundle b = new Bundle(); b.putString("STACKTRACE", stackTrace); i.putExtras(b); try{ Log.d("MyErrorHandler","reportError ctx="+ctx); ctx.startActivity(i); } catch (Exception e) { Exception ex = e; e.printStackTrace(); } } 

Y llame a reportError continuación:

 public void uncaughtException(Thread t, Throwable e) { Log.d("MyUncoughtExceptionHandler", "uncoughtException ctx="+ctx); String timestamp=getDateTime(); final Writer result = new StringWriter(); final PrintWriter printWriter = new PrintWriter(result); e.printStackTrace(printWriter); String stacktrace = result.toString(); printWriter.close(); String filename = timestamp + ".stacktrace"; Log.d("MyexceptionHanlder","UncoughtException: "+stacktrace); if (localPath != null) { writeToFile(stacktrace, filename); } if (url != null) { sendToServer(stacktrace, filename); } reportError(stacktrace); // defaultUEH.uncaughtException(t, e); } 

Si dejo comentado defaultUEH muestra el cuadro de diálogo habitual. Sin ella – pantalla en blanco. El registro indica que ErrorMessageActivity se cierra con fuerza junto con el proceso.

Para poner a prueba simplemente coloco divide por cero en el método de creación de la actividad principal justo después de registrar el controlador de errores con el hilo. Si tuviera un bloque try-catch sobre esto, no se bloquearía, pero el controlador de errores global no parece impedir el bloqueo. Comprobado ctx y parece válido en un depurador.

    2 Solutions collect form web for “Actividad global de manejo de errores e informes de Android”

    Al implementar ACRA , nunca he sido capaz de iniciar una nueva Actividad después de recibir una excepción no detectada. Parece que todo el proceso es cambiado por el sistema a un estado especial que le impide permitir cualquier recurso nuevo.

    La única opción que he encontrado por el momento es enviar una notificación de barra de estado que es guardada por el sistema después de reiniciar la aplicación. La notificación activa entonces una intención para una actividad de diálogo cuando el usuario la selecciona.

    Alexey Yakovlev estudió en mucho más detalles este problema y llegó a la conclusión de que podría haber una oportunidad de desencadenar una nueva actividad cuando el accidente se produce en un hilo que no es el hilo de interfaz de usuario. Aunque no encontramos una solución simple suficiente para iniciar directamente una actividad en todos los casos.

    Me deshice del cuadro de diálogo de cierre de la fuerza por omisión al matar el proceso sin invocar el manejador de excepciones sin precedentes orginial.

    Usted puede setUncaughtExceptionHandler para su hilo.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.