@jimbo
2015-08-10T01:27:39.000000Z
字数 2191
阅读 885
翻译自github项目CrashCustomActivity 感谢作者做出的贡献,我仅仅翻译,有小幅度的修改,不明白或者感觉欠妥的同志欢迎留言,谢谢大家。
你可以继承下面几种资源文件去定制你的警告界面
Theme
你可以复写错误界面的主题,这个主题的ID是CustomActivityOnCrashTheme
Image
你可以自定义一张错误界面显示的图片,这个图片的ID是customactivityoncrash_error_image
,他必须在所有像素的文件夹中出现(mdpi, hdpi, xhdpi, xxhdpi and xxxhdpi)。
Strings
你可以翻译或者自定义错误界面显示的字符串,如下所示:
<string name="customactivityoncrash_error_activity_error_occurred_explanation">An unexpected error occurred.\nSorry for the inconvenience.</string>
<string name="customactivityoncrash_error_activity_unknown_exception">Unknown exception</string>
<string name="customactivityoncrash_error_activity_restart_app">Restart app</string>
<string name="customactivityoncrash_error_activity_close_app">Close app</string>
<string name="customactivityoncrash_error_activity_error_details">Error details</string>
<string name="customactivityoncrash_error_activity_error_details_title">Error details</string>
<string name="customactivityoncrash_error_activity_error_details_close">Close</string>
在项目中有这样的Demo实例,如果有疑问,可以去查看源代码。
如果你选择完全自定义一个错误警告界面,你或许会调用一下方法。
CustomActivityOnCrash.getStackTraceFromIntent(getIntent());
CustomActivityOnCrash.getAllErrorDetailsFromIntent(getIntent());
CustomActivityOnCrash.getRestartActivityClassFromIntent(getIntent());
CustomActivityOnCrash.restartApplicationWithIntent(activity, intent);
这个方法会杀死当前的APP进程然后去重新启动一个APP进程。必须通过这个方法去重启APP,不然最后你可能会存在多个Application的实例,在API<17的时候就会造成多进程问题。
CustomActivityOnCrash.closeApplication(activity);
你必须调用这个方法去结束这个应用,否则将会出现上面类似的问题。
在项目中存在一个demo,若有疑问可以去参考这个demo。
不需要
该库依赖Thread.setDefaultUncaughtExceptionHandler
方法,当一个异常被UncaughtExceptionHandler
捕获的时候将会做一下的事情
1. 捕获引起崩溃的堆栈信息
2. 把堆栈信息以intent参数的形式传递给错误警告Activity
3. 杀死当前的进程
内部的实现是基于ACRA's,如果想了解更过的实现细节,可以直接阅读源代码。
UncaughtExceptionHandler
,这样将不能回调一开始设置的方法。