Crashlytics Android SDK – personalizado UncaughtExceptionHandler
¿Es posible incorporar UncaughtExceptionHandler personalizado junto con crashlytics en una aplicación? En caso afirmativo, ¿cómo?
- Crashlytics desarrollador error de herramientas al construir android -grado proyecto
- ¿Tiene crashlytics una API pública?
- Android Jenkins construir falla con crashlytics
- La aplicación de depurador de Android Studio se bloquea con InterruptedException
- Se rechazó la conexión Crashlytics - no se pudo conectar con no conectar a api.crashlytics.com
- ¿Cómo puedo integrar Crashlytics con Android Apps Instant?
- Crashlytics Gradle Plugin - Las propiedades adicionales de la dimensión del sabor no funcionan
- Manera correcta de inicializar Fabric.io para depurar / liberar
- Crashlytics encontró una clave de API no válida - AndroidStudio build
- Crashlytics deprecating logException () ¿cuál es el reemplazo?
- Anular el nombre del paquete android para los informes de Crashlytics
- Android Studio Gradle Fabric con configuraciones de proxy "No se puede conectar a la red"
- Cómo enviar el registro de Crashlitycs
Puede configurar su UncaughtExceptionHandler personalizado siempre que pase la excepción al predeterminado UncaughtExceptionHandler para ser manejado posteriormente a través de Crashlytics.
El código debajo se implementa dentro de la subclase de la aplicación:
private static Thread.UncaughtExceptionHandler mDefaultUEH; private static Thread.UncaughtExceptionHandler mCaughtExceptionHandler = new Thread.UncaughtExceptionHandler() { @Override public void uncaughtException(Thread thread, Throwable ex) { // Custom logic goes here // This will make Crashlytics do its job mDefaultUEH.uncaughtException(thread, ex); } }; @Override public void onCreate() { super.onCreate(); // Order is important! // First, start Crashlytics Crashlytics.start(this); // Second, set custom UncaughtExceptionHandler mDefaultUEH = Thread.getDefaultUncaughtExceptionHandler(); Thread.setDefaultUncaughtExceptionHandler(mCaughtExceptionHandler); }
La segunda opción es registrar Crashlytics después de configurar su UncaughtExceptionHandler personalizado – entonces todas las excepciones no detectadas serán reportadas por Crashlytics como fatals, y después de que pasó a su controlador personalizado.
Sí, es posible.
En su clase de aplicación:
@Override public void onCreate() { super.onCreate(); Crashlytics.start(this); initUncaughtExceptionHandler(); } private void initUncaughtExceptionHandler() { final ScheduledThreadPoolExecutor c = new ScheduledThreadPoolExecutor(1); c.schedule(new Runnable() { @Override public void run() { final UncaughtExceptionHandler defaultHandler = Thread.getDefaultUncaughtExceptionHandler(); Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() { @Override public void uncaughtException(Thread paramThread, Throwable paramThrowable) { // do my amazing stuff here System.err.println("Error!"); //then pass the job to the previous handler defaultHandler.uncaughtException(paramThread, paramThrowable); } }); } }, 5, TimeUnit.SECONDS); }
La razón por la que estoy programando esto después de 5 segundos es porque Crashlytics necesita algún tiempo para configurar sus cosas. Estoy usando este código y funciona perfectamente. Por supuesto, si su aplicación se bloquea al iniciar, lo siento, pero no un controlador personalizado;)
Ninguna si esas soluciones funcionaban para mí. Lo hice de la siguiente manera:
// Setup handler for uncaught exceptions. Thread.setDefaultUncaughtExceptionHandler (new Thread.UncaughtExceptionHandler() { @Override public void uncaughtException (Thread thread, Throwable e) { //Send Report to Crashlytics. Crashlytics will send it as soon as it starts to work Crashlytics.logException(e); //Your custom codes to Restart the app or handle this crash HandleCrashes(thread, e); } });
Y aquí está mi método personalizado para reiniciar el APP:
private void HandleCrashes(Thread t, Throwable e) { Intent i = new Intent(mContext, frmLogin.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.putExtra("JustLogin", true); startActivity(i); System.exit(1); }
- Android Lollipop recents / estilo de cabecera multitarea, texto siempre negro
- 'Org.apache.http.HttpEntity' está obsoleto. ¿Cómo solucionar este error en android studio?