1

如果用户在使用我的应用程序时发生异常,我希望能够确定异常发生的确切位置。我想做一些类似的 ti printStackTrace() 方法。(所以这是在构建模式,而不是调试模式)

目前,我已经将所有类中的几乎所有方法都放在了 try-catch 语句中(每个方法都有一个包含所有指令的 try-catch 语句),此时我可以显示“树”或堆栈发生异常时的方法。但是有没有办法确定某事物的行号以更准确地指示异常发生在方法内部的哪个位置?类似于使用 printStackTrace() 时显示的内容。

我并没有真正使用异常处理,这样做的最佳实践是什么并且可以做到?

编辑

还有一件事。当我在构建模式下使用 printStackTrace() 时,它在哪里显示内容,因为 Logcat 不可用?我可以检索该信息并对其进行处理吗? 或者 更好的是,我可以在构建模式下使用 getStackTrace() 并将那里的内容转换为 String 并可能将其输出到某个地方吗?

4

1 回答 1

3

所有未由您的代码处理并导致您的应用程序在发布模式下崩溃的异常都将出现在您的应用程序附近的 android 开发者控制台中。

为此,您需要回溯混淆的堆栈跟踪。

关于异常处理:例如,我建议您阅读内容。如果你用 try/catch 块包围你的所有代码,那么你在异常处理方面犯了一个错误。

异常处理比这更微妙,并且经常受到设计考虑的影响(无论是在本地处理异常还是将它们返回给调用者)。

总结一下:在你的应用程序的核心:不要处理异常,而是抛出它们或让它们被抛出,使用你的方法签名的 throws 子句。在上层,更靠近 UI,使用 try/catch 处理异常,如果发生错误,请确保您的应用处于稳定状态并向用户显示一些有用的消息。

更多细节(但不是那么多)

  • 在数据库层:抛出异常。您仍然可以捕获它们以记录它们,但抛出或重新抛出它们以告诉调用者出了点问题。
  • 在业务层:捕获它们,确保您的业务/域模型处于稳定状态并从错误中恢复,然后将它们返回给调用者。
  • 在 UI 层:捕获异常并向用户显示一些消息。
于 2012-04-26T19:39:28.603 回答