日志记录程序是为了方便各种异常情况,为了方便日后的维修方案进行维修,程序无法百分百健康,完美,有必要保存在日志中代码。易于维护。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();这样就大功告成了

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

android 处理器crash刊物的更多相关文章

  1. Android程序crash处理

    Android程序crash处理 时间 2014-11-24 13:45:37  CSDN博客 原文  http://blog.csdn.net/allen315410/article/details ...

  2. Android Native crash日志分析

    在Android应用crash的类型中,native类型crash应该是比较难的一种了,因为大家接触的少,然后相对也要多转几道工序,所有大部分对这个都比较生疏.虽然相关文章也有很多了,但是我在刚开始学 ...

  3. Android程序Crash时的异常上报

    转载请注明来源:http://blog.csdn.net/singwhatiwanna/article/details/17289479 前言 大家都知道,android应用不可避免的会发生crash ...

  4. 获取Android崩溃crash信息并写入日志发送邮件

    一.实现Thread.UncaughtExceptionHandlerUnChecked异常发生时,由于没有相应的try…catch处理该异常对象,所以Java运行环境将会终止,程序将退出,也就是我们 ...

  5. android 之 Crash信息的持久化处理

    需求: 持久化运行时异常的信息 1.CrashHandler.java import android.content.Context; import android.content.pm.Packag ...

  6. Android Tombstone/Crash的log分析和定位

    有一句话叫做常在河边走,哪有不湿鞋.我们这些研究和开发Android的project师正应了这句话,相必大家在调试的时候常常会遇到这么个东西吧 *** *** *** *** *** *** *** ...

  7. Android常见Crash原因总结(二)

    Android平台程序崩溃大家都应该遇到过,force close和ANR应该是大家遇到较多的. 这里把Android平台程序崩溃的各种类型做一个简述和原因列举. 1.ANR(可见ANR): 发生场景 ...

  8. Android 常见Crash Log汇总

    一.BinderProxy@4479b390 is not valid; is your activity running? 原因分析: 因为使用了AsyncTask 异步线程在线程完成以后的onPo ...

  9. Android常见Crash类型分析(一)

    问题1.   java.lang.IllegalStateException: The specified child already has a parent. You must call remo ...

随机推荐

  1. C++实现链栈的基本操作

    之前对顺序栈写了基本操作,认为有必要也动手练练栈的链表实现. 对于链栈,一般不会出现栈满的情况. 链栈头文件定义例如以下: #ifndef CSTOCK_H_ #define CSTOCK_H_ ty ...

  2. c# winform 子窗体访问父窗体中的方法和变量

    今天的工作中突然用到这个了,不过以前没有接触过呢!不过,在有经验的同事的帮助下,这个问题也很快解决了.具体可以分为以下几种方式: 1.在父窗体中构造子窗体对象时,将父窗体传递过去: 如:FrmSub ...

  3. WPF自定义圆形按钮样式资源文件

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" x ...

  4. WebSocket API

    WebSocket API 这一章介绍如何用WebSocket API来控制协议和创建应用,运用http://websocket.org 提供的现有WebSocket服务器,我们可以收发消息.创建一些 ...

  5. SSM框架整合( Spring 、 SpringMVC 和 Mybatis )

    1.基本概念 1.1.Spring Spring 是一个开源框架, Spring 是于 2003  年兴起的一个轻量级的 Java  开发框架,由 Rod Johnson  在其著作 Expert O ...

  6. 算法学习 - 图的广度优先遍历(BFS) (C++)

    广度优先遍历 广度优先遍历是非经常见和普遍的一种图的遍历方法了,除了BFS还有DFS也就是深度优先遍历方法.我在我下一篇博客里面会写. 遍历过程 相信每一个看这篇博客的人,都能看懂邻接链表存储图. 不 ...

  7. python import media模块

    安装PyGraphics包 (python import media模块)有一段代码要import media,打开python自带的IDLE,输入: >>>import media ...

  8. C# 制作Java +Mysql+Tomcat 环境安装程序,一键式安装

    原文:C# 制作Java +Mysql+Tomcat 环境安装程序,一键式安装 要求: JDK.Mysql.Tomcat三者制作成一个安装包, 不能单独安装,安装过程不显示三者的界面, 安装完成要配置 ...

  9. [WPF]Binding的Converter和Validator

    不拘一格用数据的Converter 上篇文已经说明,Binding就是数据源与目标之间的“关联”.大多数情况下,数据从Source到Target以及从Target返回Source都是“直来直去”的,但 ...

  10. 行人检测(Pedestrian Detection)资源整合

    一.纸 评论文章分类: [1] D. Geronimo, and A. M.Lopez. Vision-based Pedestrian Protection Systems for Intellig ...