//新建一个CrasHandler雷并实现Thread.UncaughtExceptionHandler
public class CrashHandler implements Thread.UncaughtExceptionHandler{
private static CrashHandler crashHandler = new CrashHandler();
private Context mContext;
private Thread.UncaughtExceptionHandler mDefaultCaughtExceptionHandler;
@Override
public void uncaughtException(Thread thread, Throwable throwable) {
MyApplication.clearActivity();
//启动错误处理页面,你也可以在这里写上传服务器什么的
Intent intent = new Intent("com.crash.start");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("message",throwable.getMessage());
mContext.startActivity(intent);
Process.killProcess(Process.myPid());//杀掉进程
}
//使用饿汉单例模式
public static CrashHandler getInstance() {
return crashHandler;
}
public void init(Context context) { //获取默认的系统异常捕获器
mDefaultCaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
//把当前的crash捕获器设置成默认的crash捕获器
Thread.setDefaultUncaughtExceptionHandler(this);
mContext = context.getApplicationContext();
}
}
//建一个App
public class MyApplication extends Application {
private static ArrayList<Activity> activities;
@Override
public void onCreate() {
super.onCreate();
activities = new ArrayList<>();
CrashHandler.getInstance().init(this);//初始化全局异常捕获器
}
/**添加activity*/
public static void addActivity(Activity activity) {
activities.add(activity);
}
/**结束所有被添加的activity*/
public static void clearActivity() { for (Activity activity : activities) { activity.finish();
} }
}