【发布时间】:2015-10-03 23:45:19
【问题描述】:
在我的应用程序中,我想将日志发送到远程服务器以防崩溃。我添加了 try-catch 块,并且在 catch 中我将日志发送到服务器。我想知道我应该捕获哪些异常。我需要日志以防每次崩溃,以便我可以修复它。捕获所有异常会是一个好习惯吗?
提前致谢。
【问题讨论】:
标签: java android exception-handling
在我的应用程序中,我想将日志发送到远程服务器以防崩溃。我添加了 try-catch 块,并且在 catch 中我将日志发送到服务器。我想知道我应该捕获哪些异常。我需要日志以防每次崩溃,以便我可以修复它。捕获所有异常会是一个好习惯吗?
提前致谢。
【问题讨论】:
标签: java android exception-handling
以下是我从其他优秀答案中整理的建议的摘要列表:
捕获所有未处理的异常。
创建一个实现java.lang.Thread.UncaughtExceptionHandler 的ExceptionHandler。您可以使用此类来自定义和记录错误。
把这个:Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler(this)); 放在每个 Activity 类的 OnCreate() 方法中(在 super() 之后)。
详情请参考Android exception handling best practice的这个精彩回答。
在所有外部/外部运行的代码周围加上 try/catch。 (例如 - 使用 3rd 方组件的代码)
在你知道的所有代码周围加上 try/catch,在某些情况下可能会失败
在顶层使用 try/catch,因为所有异常都会冒泡到顶层。所以,在内部函数中,如果需要,可以考虑使用throw异常。然后,在顶层,捕获特定异常并在 catch 块中正确对异常类型进行排序。 (参考这个很棒的答案:How using try catch for exception handling is best practice
对于 UI,您应该通过提供“有限功能”版本的应用程序来提供“持续可用性”,即使发生错误(如果错误是由于,例如,没有互联网连接)。
过分急于向用户报告错误并不是一个好主意。
持续错误消息是错误的。用消息通知用户并让用户关闭/删除它。
Reference 1 | Reference 2 | Reference 3 | Further Reading 1 | Further Reading 2 | Further Reading 3
对于远程记录未处理异常的 Android 库,您可以查看:android-remote-stacktrace。
添加 INTERNET 权限:uses-permission android:name="android.permission.INTERNET"
在你的活动或服务的OnCreate方法中,放入'ExceptionHandler.register(this, "http://your.domain/path");'
【讨论】:
nullwire.com 现在好像死了
【讨论】: