我的问题是如何在Android应用程序中捕获未处理的错误并进一步传递它们,这样它确实会使应用程序崩溃。
我正在为Android创建SDK,我仍然希望开发人员处理他们的错误,但我也希望了解我的崩溃。
我知道要捕获我可以使用的错误:
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
}
});
但是如何进一步传递呢?如何崩溃申请?如果我使用:
throw new RuntimeException(ex);
它不会使应用程序崩溃,而是导致ANR错误。
第二个问题是Fabric(Crashlytics)库如何工作?请注意,如果它也存在于应用程序中,我也不想破坏Fabric的工作流程。
在低级别UncaughtExceptionHandler
是捕获所有应用程序错误的机制,以防UncaughtExceptionHandler
的实例附加到应用程序线程。
如何崩溃申请?
使用这个thread
它不会使应用程序崩溃,而是导致ANR错误。
发生这种情况是因为你抛出异常并进入uncaughtException
方法,再次抛出异常。所以你有一个周期。
但是如何进一步传递呢?
我想你需要将异常数据保存到某个存储 - SD卡,将崩溃信息发送到电子邮件等。
在这种情况下,您需要在uncaughtException
方法中实现您的逻辑。
你不需要再进一步传递它!
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
// put your save logic here
// save to file, send to email, etc.
// Also you can get information about throwed exception
// for example : ex.getMessage();
}
});
您需要将Thread.setDefaultUncaughtExceptionHandler(...)放到Application类中以获得最佳情况。
第二个问题是Fabric(Crashlytics)库如何工作?请注意,如果它也存在于应用程序中,我也不想破坏Fabric的工作流程。
Fabric还使用UncaughtExceptionHandler
来捕获应用中的所有错误。
只需通过Answers
标记过滤logcat。或者通过System.exit
但是如何进一步传递呢?
在致电setDefaultUncaughtExceptionHandler()
之前,请致电getDefaultUncaughtExceptionHandler()
。抓住新的未捕获的异常处理程序。当你使用uncaughtException()
调用时,做你自己的工作,并在旧处理程序上调用uncaughtException()
。
如何崩溃申请?
我通常将一些数字除以零。