android 处理器crash刊物
日志记录程序是为了方便各种异常情况,为了方便日后的维修方案进行维修,程序无法百分百健康,完美,有必要保存在日志中代码。易于维护。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刊物的更多相关文章
- Android程序crash处理
Android程序crash处理 时间 2014-11-24 13:45:37 CSDN博客 原文 http://blog.csdn.net/allen315410/article/details ...
- Android Native crash日志分析
在Android应用crash的类型中,native类型crash应该是比较难的一种了,因为大家接触的少,然后相对也要多转几道工序,所有大部分对这个都比较生疏.虽然相关文章也有很多了,但是我在刚开始学 ...
- Android程序Crash时的异常上报
转载请注明来源:http://blog.csdn.net/singwhatiwanna/article/details/17289479 前言 大家都知道,android应用不可避免的会发生crash ...
- 获取Android崩溃crash信息并写入日志发送邮件
一.实现Thread.UncaughtExceptionHandlerUnChecked异常发生时,由于没有相应的try…catch处理该异常对象,所以Java运行环境将会终止,程序将退出,也就是我们 ...
- android 之 Crash信息的持久化处理
需求: 持久化运行时异常的信息 1.CrashHandler.java import android.content.Context; import android.content.pm.Packag ...
- Android Tombstone/Crash的log分析和定位
有一句话叫做常在河边走,哪有不湿鞋.我们这些研究和开发Android的project师正应了这句话,相必大家在调试的时候常常会遇到这么个东西吧 *** *** *** *** *** *** *** ...
- Android常见Crash原因总结(二)
Android平台程序崩溃大家都应该遇到过,force close和ANR应该是大家遇到较多的. 这里把Android平台程序崩溃的各种类型做一个简述和原因列举. 1.ANR(可见ANR): 发生场景 ...
- Android 常见Crash Log汇总
一.BinderProxy@4479b390 is not valid; is your activity running? 原因分析: 因为使用了AsyncTask 异步线程在线程完成以后的onPo ...
- Android常见Crash类型分析(一)
问题1. java.lang.IllegalStateException: The specified child already has a parent. You must call remo ...
随机推荐
- Redis启动多端口,运行多实例(转)
使用redis在同一台机器上,启用多个端口,实现多个实例,完成集群的模拟实现. 启动多实例 redis默认启动端口为6379,我们可以使用 --port 来指定多个端口,如下,在linux终端命令: ...
- follow through
follow through是什么意思_follow through的翻译_音标_读音_用法_例句 - 必应 Bing Dictionary Web Images Videos Maps News D ...
- EJBTimer 使用EJB提供的定时器
一.说明 EJB提供的定时器有两种,自动定时器和自定义定时器,自动定时器设置使用简单但是扩展较为麻烦,自定义定时器有较好的扩展性. 下面的例子中是把两中方式放到了一个测试类中. 二.示例 import ...
- Spring——AOP配置时的jar包异常
首先:这不是SSH整合的,这是单独配置Spring AOP的一个小例子. 所需要的jar包:如图: 我在这里出现的两个问题: 1.没有导入asm的jar包. 所报的异常为: java.lang.Cla ...
- HUNNU11354:Is the Name of This Problem
http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11354&courseid=0 Problem des ...
- python学习笔记之一:列表与元组
最近在看<python基础教程>(基于python2.x),下面总结一下第二章列表与元组的知识: 在这章中引入了数据结构的概念.数据结构是通过某种方式组织在一起的数据元素的集合.在pyth ...
- ZOJ 2110 Tempter of the Bone(条件迷宫DFS,HDU1010)
题意 一仅仅狗要逃离迷宫 能够往上下左右4个方向走 每走一步耗时1s 每一个格子仅仅能走一次且迷宫的门仅仅在t时刻打开一次 问狗是否有可能逃离这个迷宫 直接DFS 直道找到满足条件的路径 ...
- MySQL保留关键字
今天在使用hibernate关联映射导出表的时候因为映射了一个表名为option,是MYSQL的关键字,总是生成错误,一开始以为是映射文件和代码问题,检查不出问题才想到可能用到数据库的保留关键字了,查 ...
- 设计模式(一)工厂模式Factory(创建类型)
设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.可是在一些情况下, new操作符直接生成对象会带来一些问题. ...
- Ios 该图显示其出现的相关问题定义UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'
解决这个问题 在 加上个 标示符 Cell 自己定义 customCell .h 代码例如以下 ViewController.m 文件里 代码例如以下 执行结果 吕 图坚持直接在这里 不行