最近这两周比较累,眼睛也比较疲劳还稍微有点疼痛,本来打算早点睡觉好好休息一下,可是在例行浏览网页时发现一个刚刚发布的并且一定会提高用户体验的开源程序,这引起了我的兴趣,顿时睡意全无,开始测试起来,即使眼角还是会隐约的有点疼痛,也把内容写出来分享给大家。
先来看一下平时我们使用App遇到崩溃时的界面:
这种崩溃的情况我们经常见到的,每次看到这样的情况就会觉得这App写的真烂,又死了,用户体验非常不好,但这基本上又是不可避免的。但我们作为开发者来说,也许我们要做的就是尽量避免bug的产生,而bug你是知道的,又不是完全能避免的了的,那该怎么办?既然bug是不能完全没有的,崩溃也不会完全不会出现,那我们就去定义崩溃后的界面,看下图:
当崩溃出现时,出现这样一个界面是不是给用户的感觉好多了。
Code:
thanks to Eduard Ereza Martínez 你也可直接依赖其library,但使用library中的代码自己写可以更灵活
1 |
compile 'cat.ereza:customactivityoncrash:1.1.0' |
使用:在Application类中加入
1 2 3 4 5 6 7 8 9 10 11 12 |
@Override public void onCreate() { super.onCreate(); //Install CustomActivityOnCrash CustomActivityOnCrash.install(this); //Now initialize your error handlers as normal //i.e., ACRA.init(this); //or Crashlytics.start(this); } Note: 如果有使用ACRA等一定要保证 CustomActivityOnCrash.install(this)在其前加入, 否则Reporting工具会停止工作 |
使用中要知道的方法:
1 2 3 4 5 6 7 8 9 |
//在后台崩溃时是否启动崩溃页,默认为true,并且在你Api<14时永远都为true CustomActivityOnCrash.setLaunchActivityEvenIfInBackground(false); //是否显示崩溃信息 CustomActivityOnCrash.setShowErrorDetails(false); //设置崩溃页,如果不设置则为默认页 CustomActivityOnCrash.setRestartActivityClass(MainActivity.class); CustomActivityOnCrash.getStackTraceFromIntent(getIntent()); CustomActivityOnCrash.getAllErrorDetailsFromIntent(getIntent()); CustomActivityOnCrash.getRestartActivityClassFromIntent(getIntent()); |
另外:
1、如果ACRA启用并且讲报告模式(report mode)设置为TOAST或者DIALOG,CrashHelper将失效
2、如果自定义的UncaughtExceptionHandler在CustomActivityOnCrash.install(this)调用之前初始化,你得UncaughtExceptionHandler将不会被调用
3、在4.0以下的系统上,有极少的机型,当crash的时候,可能会不断重启,所以建议在4.0之上的系统使用。
4、要保证app在初始化和崩溃页尽量不要出现崩溃的情况,否则可能进入不断的重启中,CrashHelper对这种情况做检查,但还是会有极小可能出现这种情况。
5、CrashHelper不会避免ANR的情况
6、不能捕获Native errors
7、不能保证在每台设备上都支持
My App: 录屏(Lop)