1、创建一个类为CrashHandler

 import android.content.Context;
import android.os.Looper;
import android.util.Log;
import android.widget.Toast; import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Locale; /**
* author: Created by zzl on 15/11/3.
*/
public class CrashHandler implements Thread.UncaughtExceptionHandler {
private static final String TAG = CrashHandler.class.getSimpleName(); private static CrashHandler instance; // 单例模式 private Context context; // 程序Context对象
private Thread.UncaughtExceptionHandler defalutHandler; // 系统默认的UncaughtException处理类
private DateFormat formatter = new SimpleDateFormat(
"yyyy-MM-dd_HH-mm-ss.SSS", Locale.CHINA); private CrashHandler() { } /**
* 获取CrashHandler实例
*
* @return CrashHandler
*/
public static CrashHandler getInstance() {
if (instance == null) {
synchronized (CrashHandler.class) {
if (instance == null) {
instance = new CrashHandler();
}
}
} return instance;
} /**
* 异常处理初始化
*
* @param context
*/
public void init(Context context) {
this.context = context;
// 获取系统默认的UncaughtException处理器
defalutHandler = Thread.getDefaultUncaughtExceptionHandler();
// 设置该CrashHandler为程序的默认处理器
Thread.setDefaultUncaughtExceptionHandler(this);
} /**
* 当UncaughtException发生时会转入该函数来处理
*/
@Override
public void uncaughtException(Thread thread, Throwable ex) { // 自定义错误处理
boolean res = handleException(ex);
if (!res && defalutHandler != null) {
// 如果用户没有处理则让系统默认的异常处理器来处理
defalutHandler.uncaughtException(thread, ex); } else {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
Log.e(TAG, "error : ", e);
}
// 退出程序
//android.os.Process.killProcess(android.os.Process.myPid());
//System.exit(1);
}
} /**
* 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成.
*
* @param ex
* @return true:如果处理了该异常信息;否则返回false.
*/
private boolean handleException(final Throwable ex) {
if (ex == null) {
return false;
} new Thread() { @Override
public void run() {
Looper.prepare(); ex.printStackTrace();
String err = "[" + ex.getMessage() + "]";
Toast.makeText(context, "程序出现异常." + err, Toast.LENGTH_LONG)
.show(); Looper.loop();
} }.start(); // 收集设备参数信息 \日志信息
return true; }
}

2、在Application的onCreate()里实例化改crashHandler

     @Override
public void onCreate() {
super.onCreate();
initInformData();
mContext = getApplicationContext();
CrashHandler crashHandler = CrashHandler.getInstance();
crashHandler.init(mContext); }

这样当APP遇到未捕获的异常时,便不会直接闪退,具体怎么处理就看开发者根据业务需要自己处理了。

最新文章

  1. HTML 字符实体 < &gt: &等
  2. Python标准模块--linecache
  3. espcms特殊标签
  4. 从jquery里的$.ajax()到angularjs的$http
  5. jQuery.ajax( options ) : 通过 HTTP 请求加载远程数据
  6. PHP文件操作 读取与写入
  7. CaronteFX插件简介
  8. mysql 大数据量求平均值
  9. 最长非降/下降子序列问题(DP)(待续...)
  10. Debian8 加载NTFS 磁盘出错 解决方法
  11. Java中的那些名词术语(不断更新中)
  12. Contest - 第10届“新秀杯”ACM程序设计大赛网络预选赛 赛后信息(晋级名单)
  13. 关于WHERE后面不能放聚合函数(如SUM(...))的解决办法
  14. css 背景图片自适应
  15. Ubuntu 16.04 安装Google 浏览器
  16. docker中的镜像中运行Django项目
  17. vue父组件如何调用子组件的属性或方法
  18. linux内核中宏container_of是干什么的?
  19. centos7.0之vsftpd随笔
  20. 5 Steps to Getting Started with SharePoint Development

热门文章

  1. 2013 QConf上海软件开发大会总结
  2. 爱加密so保护简单脱壳测试
  3. 开发Maven插件
  4. Android商城开发系列(十一)—— 首页秒杀布局实现
  5. C#,什么是Attribute?什么特性?怎么被调用?
  6. UVA 11040 Add bricks in the wall(线性组合)
  7. 【wiki】红帽linux
  8. CUDA:Supercomputing for the Masses (用于大量数据的超级计算)-第三节
  9. 黑马基础阶段测试题:创建一个存储字符串的集合list,向list中添加以下字符串:”C++”、”Java”、” Python”、”大数据与云计算”。遍历集合,将长度小于5的字符串从集合中删除,删除成功后,打印集合中的所有元素
  10. 第十五篇、OC_同一个View实现两个手势响应