今天看到迅雷动漫里面一个CrashHandler 的类,我猜是崩溃处理类。进去一看。果然。顺便学习一下。

Android系统的“程序异常退出”,给应用的用户体验造成不良影响。为了捕获应用执行时异常并给出友好提示,便可继承UncaughtExceptionHandler类来处理。

通过Thread.setDefaultUncaughtExceptionHandler()方法将异常处理类设置到线程上就可以。

代码:

public class CrashHandler implements UncaughtExceptionHandler {
private static final Logger LOG = Logger.getLogger(CrashHandler.class); private final Application mApplication;
private Handler mUIHandler;
private Thread mUiThread; public CrashHandler(Application app) {
mApplication = app;
mUIHandler = new Handler();
mUiThread = Thread.currentThread();
} @Override
public void uncaughtException(Thread thread, Throwable e) {
LOG.error(e);
Throwable cause = e.getCause();
while (cause != null) {
LOG.error(cause);
cause = cause.getCause();
} writeCrashInfoToFile(e); if (Thread.currentThread() != mUiThread) {
mUIHandler.post(new Runnable() { @Override
public void run() {
mApplication.onTerminate();
}
});
} else {
mApplication.onTerminate();
}
} private void writeCrashInfoToFile(Throwable t) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
t.printStackTrace(pw);
Throwable cause = t.getCause();
while (cause != null) {
cause.printStackTrace(pw);
cause = cause.getCause();
}
String crashInfo = sw.toString();
pw.close(); try {
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
File file = mApplication.getApplicationContext().getExternalCacheDir();
if (file != null) {
file = FileUtils.getFile(file, "crash");
file.mkdirs();
FileUtils.writeStringToFile(FileUtils.getFile(file, "crash.log"), crashInfo);
}
}
} catch (IOException e) {
LOG.warn(e);
}
}
}

两个能够看的參考:

http://blog.csdn.net/hehe9737/article/details/7662123

http://blog.csdn.net/wangbole/article/details/8161524

代码是自己的。尽管简单,算我是原创吧。不然。真的非常难装逼。

android捕获程序异常退出的更多相关文章

  1. Android系统的“程序异常退出”[转]

    在应用运行过程中,有很多异常可能会发生,而我们希望在异常发生的时候第一时间的保存现场. 如何处理未捕获的异常呢? 首先我们要实现一个接口  java.lang.Thread.UncaughtExcep ...

  2. Android捕获全局异常

    Android捕获全局异常 程序避免不了出现bug,导致程序崩溃,为了尽量不影响用户体验,可以全局捕获异常 效果图 异常捕获处理前 异常捕获处理后(将程序重新启动) 捕获异常的工具类 package ...

  3. 程序异常退出 却没有产生core文件

    程序异常退出  却没有产生core文件 http://www.cnblogs.com/my_life/articles/4107333.html

  4. Linux C程序异常退出怎么办——core文件帮你忙

    Linux C程序异常退出怎么办——core文件帮你忙 http://blog.csdn.net/zhu2695/article/details/51512138

  5. main()如果返回0,则代表程序正常退出,返回非零代表程序异常退出。

    读到这里,大家应该了解了main函数返回值的来龙去脉了.下面介绍一下main函数返回值的作用以及如何获得这个返回值.main函数的返回值用于说明程序的退出状态.如果返回0,则代表程序正常退出.返回其它 ...

  6. .NETCore在析构函数(Finalize)在Linux下引起程序异常退出现象

    目       录 1.      现象概述... 1 2.      操作数据库的代码... 2 3.      引起的异常... 2 4.      异常信息分析... 3 5.      分析结 ...

  7. C#WinForm程序异常退出的捕获、继续执行与自动重启

    本文参考网上搜索的信息,并做了适当修改可以让捕捉到异常之后阻止程序退出. 另给出了通过命令行自动重启的方法. 如果一个线程里运行下面的代码 ; / a; 将会导致程序自动结束,而且没有任何提示信息 但 ...

  8. Android捕获崩溃异常

    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面.而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里.但平时使用的时候给你闹崩溃,那你就欲哭无泪了. ...

  9. Android企业级程序完全退出的解决方案

    一.问题描述 在平常开发的过程中可以发现,很多开发者对于程序的退出都没有去认真的解决.一般要么是一个简单的finish(只是退出当前的activity),要么是其他的方法,比如: 1.第一种方法:首先 ...

随机推荐

  1. js 中的switch

    前言 switch 这种表达式在很多语言中都有,比如java, C等待, 使用switch比使用if else 来得方便,来得清晰. 使用语法很简单: switch(n) { case 1: 执行代码 ...

  2. Unix/Linux环境C编程入门教程(34) 编程管理系统中的用户

    1.用户管理相关函数介绍 geteuid(取得有效的用户识别码) 相关函数 getuid,setreuid,setuid 表头文件 #include<unistd.h> #include& ...

  3. Eclipse setting Java code style and codetemplate

    1.open the eclipse tool window First click the Window menu,then check the children's menu which name ...

  4. poj 2975 Nim_最经典的Nim取石子

    题意:给你n堆石头,每次只能在一堆取最少一个石子,最后拿走最后一堆的为胜者,问胜者有多少种赢得取法 #include <iostream> #include<cstdio> u ...

  5. word2vec 入门(三)模型介绍

    两种模型,两种方法 模型:CBOW和Skip-Gram 方法:Hierarchical Softmax和Negative Sampling CBOW模型Hierarchical Softmax方法 C ...

  6. Unity 之 Redux 模式(第二篇)—— Rigidbody 改造,摄像机控制

    作者:软件猫 日期:2016年12月8日 转载请注明出处:http://www.cnblogs.com/softcat/p/6144041.html 上一篇文章中存在一个很严重的问题,首先我们先让 M ...

  7. Ajax请求ashx返回各类数据的常见处理方式

    .请求text数据,在success事件中手动解析 前台: $.ajax({ type: "post", url: "checkFile.ashx", data ...

  8. MIN (Transact-SQL)【转】

    MIN (Transact-SQL)   其他版本 SQL Server 2005   此主题尚未评级 - 评价此主题   返回表达式中的最小值. 后面可能跟随 OVER 子句. Transact-S ...

  9. Oracle SecureFiles 说明(转)

    Oracle SecureFiles 说明 Oracle Database 11g 将LOB 数据类型作为Oracle SecureFiles 进行了完全重新设计,显著改进了应用程序开发的性能.可管理 ...

  10. php的SQL连接操作的方法

    初学php,于是一开始就在sql(具体点说是mysql)里受挫严重.于是这里记下一些方法. 首先是基本方法.基本方法现在我不用了,所以我就附一下hustoj中的部分吧 基本方法的数据库连接操作: if ...