全局异常处理

CoreLibs中的exception包下包含了全局异常处理的代码, 下面是exception包的结构:

-ExceptionDetailActivity 详细错误信息的页面
-ExceptionDialogActivity 提示xx已停止运行的对话框页面
-GlobalExceptionHandler 全局异常处理逻辑类

我们经常会遇到下面的情况, 我们给了测试一个测试包, 测试测出一个程序崩溃的bug, 但是测试不是专业的android程序员, 也不会debug, 这个时候测试只能尽可能的告诉我们如何复现闪退. 但是有时候闪退确实是很难复现,我们就需要花上很多时间去复现这个闪退. 全局异常处理就是为了这种情况而准备的. 一旦出现程序未捕获的异常导致app崩溃, 测试能及时的抓到log信息, 从而给开发人员提供充足的信息. 下面是效果:

一旦程序停止运行, 我们可以点击查看详情, 来查看具体的错误信息. 可以看到, 我正是在SplashActivity的init方法中加了一句throw new NullPointerException();

那么如何使用呢? 很简单, 首先在Application中初始化GlobalExceptionHandler:

GlobalExceptionHandler.getInstance().init(this, getResources().getString(R.string.app_name));

接着在AndroidManifest.xml中注册ExceptionDetailActivity以及ExceptionDialogActivity:

<activity
    android:name="com.corelibs.exception.ExceptionDialogActivity"
    android:theme="@style/ExceptionDialogStyle"
    android:screenOrientation="portrait" />

<activity
    android:name="com.corelibs.exception.ExceptionDetailActivity"
    android:screenOrientation="portrait" />

ExceptionDialogActivity的style属性ExceptionDialogStyle已经在CoreLibs中定义好了, 直接使用即可. 到此, 整个全局异常处理就能使用了.

GlobalExceptionHandler不仅通过UI反馈给我们错误信息, 还会收集一些手机信息, 并连同错误信息一起写入到app的缓存目录下的logs文件夹中.

但是由于现在Bugly以及Bugtags等库的出现, 使得异常捕获更为方便, GlobalExceptionHandler现在处境也颇为尴尬.

Last updated