android中全局异常捕捉

只要写代码就会有bug,但是我们要想办法收集到客户的bug。有第三方bugly或者友盟等可以收集。但是,android原生就提供了有关收集异常的api,所以我们来学习一下。

异常捕捉实现

android中提供了Thread.UncaughtExceptionHandler类

1.创建Thread.UncaughtExceptionHandler对象

创建对象,实现uncaughtException方法,此方法可以接收到所有异常,要做的就是对异常进行处理。

一般是对错误日志进行本地化,并且杀掉进程

Thread.UncaughtExceptionHandler handler = new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
try {
//处理错误日志,此段代码是将错误日志,写入本地
writeErrorLog(ex);
Log.e(TAG, ex.getMessage(), ex);
ToastUtils.longMsg(ex.getMessage());
} finally {
//杀掉应用程序
// Try everything to make sure this process goes away.
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(10);
}
}
};

2.将自定义的handler对象设置给系统

Thread.setDefaultUncaughtExceptionHandler(handler);

3.一般情况,对异常的全局处理,会在application中进行

每个应用都会创建自己的application,具体创建就不细说了

将错误日志写到本地

/**
* 打印错误日志到日志文件中
*
* @param ex Exception
*/
public void writeErrorLog(final Throwable ex) {
File dir = StorageHelper.getInstance().getLogPath();
File file = new File(dir, String.format("%s.txt", getCurrentDateString()));
Log.d(TAG, "======" + dir.getAbsolutePath()); PrintStream printStream = null;
FileOutputStream fileOutputStream = null;
try {
fileOutputStream = new FileOutputStream(file, true);
printStream = new PrintStream(fileOutputStream); /**
* 添加:出错的时间,设备号,安卓版本,App版本
*/
printStream.append("系统时间:").append(DateUtils.getCurrentTime(DateUtils.FORMAT_DATETIME));
printStream.append("\n设备类型:").append(DeviceUtils.getDeviceName());
printStream.append("\n设备号:").append(DeviceUtils.getUUID(EChatApp.getInstance()));
printStream.append("\nAndroid版本:").append(DeviceUtils.getReleaseVersion());
printStream.append("\nApp版本:").append(getVersion()).append("\n"); ex.printStackTrace(printStream);
fileOutputStream.close();
fileOutputStream = null;
} catch (Exception e) {
EMLog.e(TAG, e.getMessage(), e);
} finally {
IOUtils.closeQuietly(printStream);
IOUtils.closeQuietly(fileOutputStream);
}
}

ok。就介样了。

android中全局异常捕捉的更多相关文章

  1. 在Spring Boot中添加全局异常捕捉提示

    在一个项目中的异常我们我们都会统一进行处理的,那么如何进行统一进行处理呢? 全局异常捕捉: 新建一个类GlobalDefaultExceptionHandler, 在class注解上@Controll ...

  2. Spring Boot 中全局异常处理器

    Spring Boot 中全局异常处理器,就是把错误异常统一处理的方法.等价于Springmvc中的异常处理器. 步骤一:基于前面的springBoot入门小demo修改 步骤二:修改HelloCon ...

  3. springboot(四)拦截器和全局异常捕捉

    github代码:https://github.com/showkawa/springBoot_2017/tree/master/spb-demo/spb-brian-query-service 全部 ...

  4. Android捕获全局异常

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

  5. Spring 全局异常捕捉

    Spring全局异常捕捉类 注解@ControllerAdvice package com.sicdt.sicsign.web.bill.controller; import org.springfr ...

  6. 5.全局异常捕捉【从零开始学Spring Boot】

    在一个项目中的异常我们我们都会统一进行处理的,那么如何进行统一进行处理呢? 新建一个类GlobalDefaultExceptionHandler, 在class注解上@ControllerAdvice ...

  7. (5)全局异常捕捉【从零开始学Spring Boot】

    在一个项目中的异常我们我们都会统一进行处理的,那么如何进行统一进行处理呢? 新建一个类GlobalDefaultExceptionHandler, 在class注解上@ControllerAdvice ...

  8. Spring boot之全局异常捕捉

    在一个项目中的异常我们我们都会统一进行处理的,那么如何进行统一进行处理呢? 新建一个类GlobalDefaultExceptionHandler, 在class注解上@ControllerAdvice ...

  9. Android全局异常捕捉

    // 定义自定义捕捉 package com.xiaosw.test; import java.io.File; import java.io.FileOutputStream; import jav ...

随机推荐

  1. DOM基础(四)

    每次写DOM的时候,就觉得好像没什么好写,因为涉及到知识点的方面的确不多,对于DOM来说,更多的还是练习为主.在练习的时候,最好能结合着js基础语法的知识点来学习.这样,在学习DOM的时候就不会那么枯 ...

  2. [HDU1282]回文数猜想

    Problem Description 一 个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数.任取一个正整数,如果不是回文数,将该数与他的倒 序数相加, ...

  3. Kubernetes 1.5安装

    Kubernetes从1.3开始引入kubeadm来试图简化其复杂的安装.但kubeadm至今仍不稳定,而且我个人觉得kubeadm反而麻烦,还不如直接用脚本或者其他自动化工具来安装来的利索.关于ku ...

  4. node.js异步控制流程 回调,事件,promise和async/await

    写这个问题是因为最近看到一些初学者用回调用的不亦乐乎,最后代码左调来又调去很不直观. 首先上结论:推荐使用async/await或者co/yield,其次是promise,再次是事件,回调不要使用. ...

  5. 1131: [POI2008]Sta

    1131: [POI2008]Sta Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 783  Solved: 235[Submit][Status] ...

  6. 1179: [Apio2009]Atm

    1179: [Apio2009]Atm Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 1629  Solved: 615[Submit][Status ...

  7. ST HW2 fault & error & failure

    Software Testing 3014218128 牛菲菲 Below are two faulty programs. Each includes a test case that result ...

  8. win8和ubuntu双系统

    硬盘安装的话只要分够内存和做好开机启动项就好了,u盘安装要注意分区(挂载)了推荐: http://wenku.baidu.com/view/5052f19b51e79b8968022623.html ...

  9. SQL server 数据库(视图、事物、分离附加、备份还原))

    ql Server系列:视图.事物.备份还原.分离附加  视图是数据库中的一种虚拟表,与真实的表一样,视图包含一系列带有名称的行和列数据.行和列数据用来自定义视图的查询所引用的表,并且在引用视图时动态 ...

  10. 用JavaScript和jQuery实现瀑布流

    ▓▓▓▓▓▓ 大致介绍 在慕课网上学习了用原生js和jQuery实现瀑布流,在这里做个笔记 ▓▓▓▓▓▓ 用JavaScript实现 基本结构: <div id="main" ...