其实 ACRA 是一个崩溃处理的类库,其功能就是收集App崩溃堆栈信息,生成报告并发送到指定端,当然它也可以自己定制对应的操作,所以是个处理崩溃很不错的库。
ACRA Application Crash Reports for Android
GitHub:https://github.com/ACRA/acra
其实在规定时间内崩溃次数超过规定值就自动清理 APP 数据这个功能在一些大型APP上都会有,因为这对于解决某些因本地数据导致的崩溃有很好的作用,用户没必要再进行卸载重装,算是一个细节加分。
本文实现的是清理 APP 自身 data 目录下的数据以及 SharedPreferences 里面的数据,如需清理其它目录下的数据请参考代码进行修改。
下面就说说怎么去实现:
首先我们先在 build.gradle 里面添加依赖:
dependencies {
...
compile 'ch.acra:acra:4.7.0'
...
}
这里要声明一下为什么要用4.7.0,写这篇文章的时候最新的版本是4.9.2,其实几个版本都试过,4.7.0最合我心意,因为这个版本在 Application 初始化数据崩溃也会被收集,4.7.0之后就不行,所以为了多一层保障而选择了4.7.0。
接下来是自定义 Application:
@ReportsCrashes(
//一些ACRA的设置,具体参考ACRA文档,因为我们使用自定义Sender,所以这里完全可以不用设置
// mailTo = "bugs@treeholeapp.cn",
// mode = ReportingInteractionMode.TOAST,
// resToastText = R.string.crash_toast_text
)
public class MyApplication extends Application {
private static Context context;
@Override
public void onCreate() {
initACRA();
super.onCreate();
context = getApplicationContext();
}
public void initACRA() {
if (!BuildConfig.DEBUG) { //这里判断只有在非DEBUG下才清除数据,主要是为了在开发过程中能够保留线程。
ACRA.init(this);
CrashHandler handler = new CrashHandler();
ACRA.getErrorReporter().setReportSender(handler); //在闪退时检查是否要清空数据
}
}
public static Context getContext(){
return context;
}
}
然后在 AndroidManifest.xml 里面设置 Application:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package&#