1、使用Thread.setDefaultUncaughtExceptionHandler()进行设置未捕获异常处理
Thread.setDefaultUncaughtExceptionHandler(uncaughtExceptionHandler);
2、重写Thread.UncaughtExceptionHandler中的public void uncaughtException(Thread t, final Throwable e)方法进行处理,
重点是e.printStackTrace(writer)
Thread.UncaughtExceptionHandler uncaughtExceptionHandler = new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, final Throwable e) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
if (e == null) {
return;
}
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
Date time = calendar.getTime();
String fileName = new SimpleDateFormat("yyyyMMddhhmmss.txt").format(time);
File dir = new File(CRASH_PATH);
if (!dir.exists()) {
dir.mkdirs();
}
File crashFile = new File(dir, fileName);
PrintWriter writer = null;
try {
writer = new PrintWriter(new FileOutputStream(crashFile));
e.printStackTrace(writer);
writer.flush();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} finally {
writer.close();
}
}
});
thread.setPriority(Thread.MIN_PRIORITY);
thread.start();
Thread.getDefaultUncaughtExceptionHandler().uncaughtException(t, e);
}
};