设为首页 加入收藏

TOP

CrashCustomActivity2
2015-11-21 00:55:45 来源: 作者: 【 】 浏览:1
Tags:CrashCustomActivity2

自定义崩溃界面2

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

接着上篇

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

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


   
    An unexpected error occurred. Sorry for the inconvenience.
   
    
   
    Unknown exception
   
    
   
    Restart app
   
    
   
    Close app
   
    
   
    Error details
   
    
   
    Error details
   
    
   
    Close
   

在项目中有这样的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将不能正常工作:
在初始化后又设置新的 UncaughtExceptionHandler,这样将不能回调一开始设置的方法。 如果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
你可以翻译或者自定义错误界面显示的字符串,如下所示:


   
    An unexpected error occurred. Sorry for the inconvenience.
   
    
   
    Unknown exception
   
    
   
    Restart app
   
    
   
    Close app
   
    
   
    Error details
   
    
   
    Error details
   
    
   
    Close
   

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

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇UVALive - 3523 Knights of the R.. 下一篇LeetCode240――Search a 2D Matr..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: