// 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);
}
});
这是我的自定义方法来重新启动应用程序:
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);
}
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable throwable) {
// Delegate to the default uncaught exception handler provided by the system
Thread.getDefaultUncaughtExceptionHandler().uncaughtException(thread, throwable);
}
});
// Initialize Firebase Crashlytics
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);
// Set Firebase Crashlytics as the default uncaught exception handler
Thread.setDefaultUncaughtExceptionHandler(FirebaseCrashlytics.getInstance().getUncaughtExceptionHandler());
7条答案
按热度按时间lstz6jyr1#
更新
请参阅@kmityak answer,因为Crashlytics/Fabric初始化现在是异步的,我下面的解决方案不再有效。
原始答案
您可以设置自定义UncaughtExceptionHandler,前提是它会将异常传递给默认的UncaughtExceptionHandler,以便稍后通过Crashlytics处理。
下面的代码在Application子类中实现:
第二种选择是在设置了自定义UncaughtExceptionHandler之后注册Crashlytics--然后所有未捕获的异常都会被Crashlytics报告为致命异常,然后传递给自定义处理程序。
ukdjmx9f2#
由于Crashlytics的最新版本异步执行初始化,因此最好使用Fabric的初始化回调:
raogr8fs3#
是的,有可能。
在Application类中:
我之所以在5秒后安排这个是因为Crashlytics需要一些时间来设置他的东西。我使用这个代码,它工作得很好。当然,如果你的应用程序在启动时崩溃,对不起,但没有自定义处理程序;)
9gm1akwq4#
如果这些解决方案对我有效,就没有。我是这样做的:
这是我的自定义方法来重新启动应用程序:
58wvjzkj5#
1.关闭自动收集
将此添加到
AndroidManifest.xml
1.注册您的客户
UncaughtExceptionHandler
1.注册UncaughtExceptionHandler后手动启动Crashlytics
1.重建并重新安装应用程序
628mspwn6#
我找到了Fabric 2.10.1的解决方案:
dgsult0t7#