码迷,mamicode.com
首页 > 系统相关 > 详细

CrashCustomActivity2

时间:2015-08-10 01:58:17      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:

自定义崩溃界面2

翻译自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实例,如果有疑问,可以去查看源代码。

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

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

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

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

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

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

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

使用混淆

不需要

内部实现原理

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

不兼容的情况

  • 在以下情况下customActivityCrash将不能正常工作:
    1. 在初始化后又设置新的UncaughtExceptionHandler,这样将不能回调一开始设置的方法。
    2. 如果ACRA可以使用,并且设置使用toast或者diolag来显示警告信息
  • 在极少数的API<14的设备上,都崩溃发生的时候将会进入一个重启APP的进程中去,所以不推荐在API<14的设备上使用
  • 如果你的APP在初始化或者错误界面出现崩溃,那么APP将可能进入无限重启的情况。
  • 这个还没有在multidex情况下测试,他是使用class.forName()去载入类的,所以可能会引起很多的问题,如果你测试过,请及时反馈给我们。
  • 还未测试过多进程的APP,如果你测试过,请反馈给我们

贡献和许可

  • 任何的贡献都是欢迎的!
  • 许可证使用Apache License 2.0.
  • bug图片来自Riff,博客地址,如果在应用中使用了它,请注明!

接着上篇

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

你可以继承下面几种资源文件去定制你的警告界面
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实例,如果有疑问,可以去查看源代码。

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

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

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

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

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

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

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

使用混淆

不需要

内部实现原理

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

不兼容的情况

  • 在以下情况下customActivityCrash将不能正常工作:
    1. 在初始化后又设置新的UncaughtExceptionHandler,这样将不能回调一开始设置的方法。
    2. 如果ACRA可以使用,并且设置使用toast或者diolag来显示警告信息
  • 在极少数的API<14的设备上,都崩溃发生的时候将会进入一个重启APP的进程中去,所以不推荐在API<14的设备上使用
  • 如果你的APP在初始化或者错误界面出现崩溃,那么APP将可能进入无限重启的情况。
  • 这个还没有在multidex情况下测试,他是使用class.forName()去载入类的,所以可能会引起很多的问题,如果你测试过,请及时反馈给我们。
  • 还未测试过多进程的APP,如果你测试过,请反馈给我们

贡献和许可

  • 任何的贡献都是欢迎的!
  • 许可证使用Apache License 2.0.
  • bug图片来自Riff,博客地址,如果在应用中使用了它,请注明!

CrashCustomActivity2

标签:

原文地址:http://blog.csdn.net/u013224148/article/details/47388331

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!