虽然我们的APP在发布之前会经过层层的测试,保证万无一失,但是人算不如天算,总有一些异常是没法避免的。所以,对于开发者而言,收集这些异常变得尤为重要了,处理这些异常可是我们的应用更加健壮。对于异常反馈的机制如下:
Thread类中有一个静态方法Thread.setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh),当线程由于位被捕获的异常而突然终止的时候,就会调用传进去的Thread.UncaughtExceptionHandler接口,那么我就在这个接口的uncaughtException(Thread t, Throwable e)方法中手机放生的异常,上传到服务器。
通用做法:
一、创建一个类继承Application类,并在配置文件中配置
<application android:name="com.example.crashtest.app.CrashApplicaiton"/>
二、写一个类实现Thread.UncaughtExceptionHandler接口。
public static class CrashHandler implements UncaughtExceptionHandler{
private static final CrashHandler INSTANCE = null;
public static CrashHandler getInstance(){
if(INSTANCE != null){
return INSTANCE;
}else{
return new CrashHandler();
}
}
public void init(){
Thread.setDefaultUncaughtExceptionHandler(this);
}
@Override
public void uncaughtException(Thread thread, Throwable ex) {
thread.interrupt();
System.out.println("程序崩溃了,请在此处进行处理");
//关闭打开的Activity,根据自己的需求在这里面进行具体的处理。
for(int i = 0;i<activitys.size();i++){
Activity act = activitys.get(i);
act.finish();
}
}
}
三、Application的onCreate()方法中初始化CrashHandler
@Override
public void onCreate() {
CrashHandler ch = CrashHandler.getInstance();
ch.init();
if(activitys == null){
activitys = new ArrayList<Activity>();
}
super.onCreate();
}