日志记录程序是为了方便各种异常情况,为了方便日后的维修方案进行维修,程序无法百分百健康,完美,有必要保存在日志中代码。易于维护。Java了一个接口UncaughtExceptionHandler,Thread.setDefaultUncaughtExceptionHandler(handler)设置当线程因为未捕获到异常而突然终止,而且没有为该线程定义其它处理程序时所调用的默认处理程序。

所以我们能够继承UncaughtExceptionHandler。 在handler实现对日志的读写

   public class CrashHandler implements UncaughtExceptionHandler {
// 系统默认的UncaughtException处理
private Thread.UncaughtExceptionHandler mDefaultHandler; public CrashHandler() {
mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
} @Override
public void uncaughtException(Thread thread, Throwable ex) {
try {
// 创建日志文件
File file = createCreashLogFile(); // 写入日志文件
if (file != null && file.exists()) {
writeLog(file, ex);
}
} catch (Exception e) {
LogUtils.w("", e);
} // 将异常抛给系统处�? mDefaultHandler.uncaughtException(thread, ex);
} private void writeLog(File logFile, Throwable ex) {
PrintStream printStream = null;
FileOutputStream fos = null; // 写入日志文件
try {
fos = new FileOutputStream(logFile);
printStream = new PrintStream(fos);
ex.printStackTrace(printStream);
} catch (Exception e) {
LogUtils.w("", e);
} finally {
closeQuietly(printStream);
closeQuietly(fos);
}
} private void closeQuietly(OutputStream os) {
if (os != null) {
try {
os.close();
} catch (IOException e) {
LogUtils.w("", e);
}
}
} /** 创建�?个空白的崩溃日志文件 */
public static File createCreashLogFile() throws IOException {
if (!isExternalStorageAvaliable()) { // �? 查存储是否可�?
return null;
} File directory = new File(Environment.getExternalStorageDirectory()
+ "/ViolationQuery/crash_log");
if (!directory.exists()) {
directory.mkdirs();
}
File file = new File(directory, createCrashLogFileName());
if (file.exists()) {
file.delete();
}
file.createNewFile(); return file;
} /** 存储是否可用 */
public static boolean isExternalStorageAvaliable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
} else {
return false;
}
} private static String createCrashLogFileName() {
String dateString = new SimpleDateFormat("yyyyMMdd_HHmmss",
Locale.getDefault()).format(new Date());
return "CrashLog_" + dateString + ".txt";
}
}
<pre name="code" class="java">public class CrashManager {
public static void start() {
// 设置异常处理实例
CrashHandler handler = new CrashHandler();
Thread.setDefaultUncaughtExceptionHandler(handler);
}
}

 然后在Application中调用Application中CrashManager.start();这样就大功告成了

版权声明:本文博主原创文章。博客,未经同意不得转载。

最新文章

  1. HD2222 Keywords Search(AC自动机入门题)
  2. meta 360极速模式
  3. 优化MySchool数据库(四)
  4. Oracle 11g新特性
  5. BZOJ3588 : fx
  6. ArcGIS AddIN开发之COM对象写入注册表
  7. HTML5&amp;CSS3经典动态表单-2
  8. Core Java Volume I — 4.7. Packages
  9. 工欲善其事必先利其器-Notepad++使用小记(Python)
  10. JSON和XML:不可同日而语
  11. 模型类中 Parcelable 接口使用
  12. 让Sqlite脱离VC++ Runtime独立执行
  13. C++ ofstream和ifstream具体的方法和C语言file说明
  14. hrbustoj 1125 循环小数 II(小数变分数+极限思想)
  15. HUST 1351 Group
  16. 数据库中WITH CHECK OPTION的用法
  17. linux(centos)下mysql忘记root密码
  18. CNN卷积神经网络
  19. java实验-3
  20. MTK-TP(触屏)解读一

热门文章

  1. Android数据库hibernate框架
  2. zoj1610(线段树)
  3. JAVA邮件收发实现(待)
  4. sql server 行列互转
  5. [C++基金会]位计算 游戏开发中的应用
  6. JSP与ASP.PHP的比較
  7. [置顶] 如何vs在cocos2dx项目中打印中文
  8. KMP求字符串最小循环节
  9. Windows Phone开发(6):处理屏幕方向的改变
  10. hdu 4464 水