【发布时间】:2017-07-04 19:02:27
【问题描述】:
使用 Java(android 但这是一个 java 问题)我在应用程序类中创建了一个默认异常处理程序,或多或少是从某个 SO 线程中获取的:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
AppInitialization();
}
private void AppInitialization() {
defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(_unCaughtExceptionHandler);
}
private UncaughtExceptionHandler defaultUEH;
// handler listener
private Thread.UncaughtExceptionHandler _unCaughtExceptionHandler = new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
ex.printStackTrace();
// TODO handle exception here
}
};
}
让我们谈谈我的目标是什么。我需要为 crashLytics 崩溃报告记录额外信息。因此,只要发生异常,就会调用钩子 uncaughtException(Thread thread, Throwable ex)。我认为这适用于崩溃和异常(不确定)。
关于此的 3 个问题:
这会影响 crashLytics 的工作方式,因为我覆盖了默认异常处理程序。
这是否允许应用程序继续运行 - 我不希望这样。我只想在其他地方记录异常并让它继续,就好像 defaultexceptionHandler 不存在一样。否则,QA 回归将很难看到错误,因此我们可以修复它们。如果我从 uncaughtException(thread,ex) 中调用 defaultUEH.uncaughtException(thread, ex) 会继续循环吗?
什么线程与 setDefaultUncaughtExceptionHandler 相关联?例如,这适用于所有线程还是仅适用于主线程?
所以要明确一点,我需要一种方法来发送有关每个 crashlytics 崩溃/异常的附加信息。怎么样?
更新:我看到here 有人找到了解决方案,但使用这种方法是否会使 crashlytics 也报告致命问题?
【问题讨论】:
-
只是想知道 - 你需要什么样的额外信息?
-
我想发送崩溃的业务逻辑。例如,应用程序状态(令牌、UUID、当前选项卡)之类的东西可以更容易地重新创建问题。
-
我明白了,你考虑过使用
Crashlytics.log吗?通过这种方式,您可以准备与崩溃一起发送的日志,例如应用中的用户行为、他打开的活动、他选择的选项卡......只是一个想法 -
是的,好点,但我试图在应用程序的一个区域完成所有操作,而不是使用 Crashlytics.log 调用污染应用程序。我认为将异常全部集中到一个区域并在那里完成工作会更干净。
-
如果您在代码的多个点发送完全相同的数据,我可以理解这可能会造成污染,这是真的......
标签: java android exception-handling crashlytics