如果用户在使用我的应用程序时发生异常,我希望能够确定异常发生的确切位置。我想做类似 ti printStackTrace() 方法的事情。 (所以这是在构建模式下,而不是 Debug模式下)
目前,我已经将我所有类中的几乎所有方法都放在一个 try-catch 语句中(每个方法都有一个包含所有指令的 try-catch 语句),此时我可以显示“树”或方法堆栈(如果发生异常)。但是有没有办法确定某个行号以更准确地指示方法内部发生异常的位置?类似于使用 printStackTrace() 时显示的内容。
我并没有真正使用异常处理,执行此操作的最佳实践是什么并且可以完成?
编辑
还有一件事。当我在构建模式下使用 printStackTrace() 时,它在哪里显示内容,因为 Logcat 不可用?我可以检索该信息并用它做点什么吗? 或 更好的是,我可以在构建模式期间使用 getStackTrace() 并将其中的内容转换为 String 并可能将其输出到某个地方吗?
最佳答案
所有未被您的代码处理并使您的应用程序在 Release模式下崩溃的异常将出现在 Android 开发人员控制台中,靠近您的应用程序。
为此,您需要 retrace obfuscated stack traces.
关于异常处理:我建议你阅读this例如。如果你用 try/catch block 包围你的所有代码,你就犯了异常处理的错误。
异常处理比这更微妙,并且经常受到设计考虑的影响(是在本地处理异常还是将它们返回给调用者)。
总结:在您的应用程序的核心:不处理异常,而是抛出它们或让它们被抛出,使用方法签名的 throws 子句。在上层,靠近 UI,使用 try/catch 处理异常,如果发生错误,请确保您的应用处于稳定状态并向用户显示一些有用的消息。
更多细节(但不是那么多):
- 在数据库层:抛出异常。您仍然可以捕获它们以记录它们,但抛出或重新抛出它们以告诉调用者出现问题。
- 在业务层:捕获它们,确保您的业务/领域模型处于稳定状态并从错误中恢复,然后将它们返回给调用者。
- 在 UI 层:捕获异常并向用户显示一些消息。
关于安卓。异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10340164/