因此,我正在努力掌握在 Android 中处理异常的最佳方式。
我目前的做法:
- 业务逻辑/库通常会在调用堆栈中抛出异常以便进行处理,除非异常是部分预期的并且可以在本地处理。
- 所有 Activity 生命周期函数,如 onPause、onResume 等都有 try catch。他们捕获异常和我的自定义 BusinessException 类。对于业务异常,我会显示一个特定的错误,Exceptions 会显示一个通用的 Oops 错误,同时在后台记录实际错误。
- 回调/监听器等也有 try/catch 和异常调用 onFail/error 回调。
我的问题是我最终遇到了很多 try catch block 。虽然这本身并不是那么糟糕,但在每个 catch block 中我都有用于记录错误的样板代码。即准备键值对等。这看起来非常重复。
其他人在做什么,或者您知道我应该关注的任何开源项目?
谢谢
最佳答案
以下主要是我的观点。
Business logic/libraries typically throw exceptions up the call stack so that can be handled, unless the exception is partially expected and can be handled locally.
本地处理很好。抛出异常以强制调用堆栈中更高的本地处理是可以的。否则,我会使用事件总线告诉我的 UI 层(如果它在附近)出现了问题,如果用户需要了解问题,可能会使用回退机制来引发 Notification
从 UI 的角度来看,我们不在前台。
All activity lifecycle functions such as onPause, onResume etc have try catch. They catch both Exception and my custom BusinessException class. For business exceptions I show a specific error and Exceptions show a generic Oops error, while logging the actual error in the background.
Callbacks/listeners etc also have try/catch and upon exception call the onFail/error callback.
我只会担心已检查的异常和预期的未检查异常(例如,调用第三方 Activity 时的 ActivityNotFoundException
),遵循我之前描述的相同方法。
对于其他一切,我会让默认的未捕获异常处理程序处理它,在我的情况下通常是 ACRA .
关于android - 在整个 Activity/Fragment 生命周期中处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27216667/