[关闭]
@jimbo 2015-08-10T01:27:39.000000Z 字数 2191 阅读 885

自定义崩溃界面2

翻译自github项目CrashCustomActivity 感谢作者做出的贡献,我仅仅翻译,有小幅度的修改,不明白或者感觉欠妥的同志欢迎留言,谢谢大家。

接着上篇

自定义默认的错误警告页面

你可以继承下面几种资源文件去定制你的警告界面
Theme
你可以复写错误界面的主题,这个主题的ID是CustomActivityOnCrashTheme
Image
你可以自定义一张错误界面显示的图片,这个图片的ID是customactivityoncrash_error_image,他必须在所有像素的文件夹中出现(mdpi, hdpi, xhdpi, xxhdpi and xxxhdpi)。
Strings
你可以翻译或者自定义错误界面显示的字符串,如下所示:

  1. <string name="customactivityoncrash_error_activity_error_occurred_explanation">An unexpected error occurred.\nSorry for the inconvenience.</string>
  2. <string name="customactivityoncrash_error_activity_unknown_exception">Unknown exception</string>
  3. <string name="customactivityoncrash_error_activity_restart_app">Restart app</string>
  4. <string name="customactivityoncrash_error_activity_close_app">Close app</string>
  5. <string name="customactivityoncrash_error_activity_error_details">Error details</string>
  6. <string name="customactivityoncrash_error_activity_error_details_title">Error details</string>
  7. <string name="customactivityoncrash_error_activity_error_details_close">Close</string>

项目中有这样的Demo实例,如果有疑问,可以去查看源代码。

完全自定义一个错误警告界面

如果你选择完全自定义一个错误警告界面,你或许会调用一下方法。

1.得到错误的堆栈轨迹(stack trace)
  1. CustomActivityOnCrash.getStackTraceFromIntent(getIntent());
2.获取详细的错误信息
  1. CustomActivityOnCrash.getAllErrorDetailsFromIntent(getIntent());
3.获得重启APP的activity列表,如果没有设置,将会返回null值
  1. CustomActivityOnCrash.getRestartActivityClassFromIntent(getIntent());
4.重启APP
  1. CustomActivityOnCrash.restartApplicationWithIntent(activity, intent);

这个方法会杀死当前的APP进程然后去重新启动一个APP进程。必须通过这个方法去重启APP,不然最后你可能会存在多个Application的实例,在API<17的时候就会造成多进程问题。

5.结束应用
  1. CustomActivityOnCrash.closeApplication(activity);

你必须调用这个方法去结束这个应用,否则将会出现上面类似的问题。

项目中存在一个demo,若有疑问可以去参考这个demo。

使用混淆

不需要

内部实现原理

该库依赖Thread.setDefaultUncaughtExceptionHandler方法,当一个异常被UncaughtExceptionHandler捕获的时候将会做一下的事情
1. 捕获引起崩溃的堆栈信息
2. 把堆栈信息以intent参数的形式传递给错误警告Activity
3. 杀死当前的进程
内部的实现是基于ACRA's,如果想了解更过的实现细节,可以直接阅读源代码。

不兼容的情况

贡献和许可

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注