Android项目中经常闪退(anr)原因有很多种,各种没有捕获的异常都会导致项目的崩溃,对于此问题除了在写代码是要考虑全面,并对可能出现
的Exception进行捕获,同时也可以设置一个全局异常捕获的机制来保证你的疏忽(对应该捕获的异常没有做处理)。具体步骤如下:
1、首先创建一个Handler 继承java.lang.Thread.UncaughtExceptionHandler:
//未捕获异常
@Override
public void uncaughtException(Thread thread, Throwable ex) {
String threadName = thread.getName();
ItktLog.d(threadName);
//这里我们可以根据thread name来进行区别对待,同时,我们还可以把异常信息写入文件,以供后来分析
}
//单例引用,这里我们做成单例的,因为我们一个应用程序里面只需要一个UncaughtExceptionHandler实例
private static CrashHandler instance;
private CrashHandler(){}
//同步方法,以免单例多线程环境下出现异常
public synchronized static CrashHandler getInstance(){
if (instance == null){
instance = new CrashHandler();
}
return instance;
}
//初始化,把当前对象设置成UncaughtExceptionHandler处理器
public void init(Context ctx){
Thread.setDefaultUncaughtExceptionHandler(this);
}
2、在自定义Application的oncreate()方法中初始化:
CrashHandler handler = CrashHandler.getInstance();
handler.init(getApplicationContext());