android中全局异常捕捉
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中全局异常捕捉的更多相关文章
- 在Spring Boot中添加全局异常捕捉提示
		在一个项目中的异常我们我们都会统一进行处理的,那么如何进行统一进行处理呢? 全局异常捕捉: 新建一个类GlobalDefaultExceptionHandler, 在class注解上@Controll ... 
- Spring Boot 中全局异常处理器
		Spring Boot 中全局异常处理器,就是把错误异常统一处理的方法.等价于Springmvc中的异常处理器. 步骤一:基于前面的springBoot入门小demo修改 步骤二:修改HelloCon ... 
- springboot(四)拦截器和全局异常捕捉
		github代码:https://github.com/showkawa/springBoot_2017/tree/master/spb-demo/spb-brian-query-service 全部 ... 
- Android捕获全局异常
		Android捕获全局异常 程序避免不了出现bug,导致程序崩溃,为了尽量不影响用户体验,可以全局捕获异常 效果图 异常捕获处理前 异常捕获处理后(将程序重新启动) 捕获异常的工具类 package ... 
- Spring 全局异常捕捉
		Spring全局异常捕捉类 注解@ControllerAdvice package com.sicdt.sicsign.web.bill.controller; import org.springfr ... 
- 5.全局异常捕捉【从零开始学Spring Boot】
		在一个项目中的异常我们我们都会统一进行处理的,那么如何进行统一进行处理呢? 新建一个类GlobalDefaultExceptionHandler, 在class注解上@ControllerAdvice ... 
- (5)全局异常捕捉【从零开始学Spring Boot】
		在一个项目中的异常我们我们都会统一进行处理的,那么如何进行统一进行处理呢? 新建一个类GlobalDefaultExceptionHandler, 在class注解上@ControllerAdvice ... 
- Spring boot之全局异常捕捉
		在一个项目中的异常我们我们都会统一进行处理的,那么如何进行统一进行处理呢? 新建一个类GlobalDefaultExceptionHandler, 在class注解上@ControllerAdvice ... 
- Android全局异常捕捉
		// 定义自定义捕捉 package com.xiaosw.test; import java.io.File; import java.io.FileOutputStream; import jav ... 
随机推荐
- Lambda表达式和Java集合框架
			本文github地址 前言 我们先从最熟悉的Java集合框架(Java Collections Framework, JCF)开始说起. 为引入Lambda表达式,Java8新增了java.util. ... 
- Extjs中grid前端分页使用PagingMemoryProxy【二】
			在项目中遇到Grid前端分页,本人也是刚接触extjs没多久,为了实现效果,一直找了很久才实现出来,对于代码中的一些也不能详细的说明出来, 不知道能不能帮助到遇到同样问题的朋友,所以将例子代码 ... 
- JVM client模式和Server模式的区别
			在“你知道自己执行的是哪个jre吗?”一文中我们知道安装JDK时会安装了两套JRE:专用和公用,殊不知这两套JRE还有秘密. 专用和公用JRE的不同 不同点在于专用JRE的bin里不仅有“client ... 
- 2015年ACM-ICPC亚洲区域赛合肥站网络预选赛H题——The Next (位运算)
			Let L denote the number of 1s in integer D's binary representation. Given two integers S1 and S2, we ... 
- 关于Http请求后返回json乱码的问题
			其实很多时候我们在做http请求数据返回的时候经常会莫名发现会出现乱码,大部分时候我们都觉得是编码不对造成的. 一般情况下正常我们默认都是作个很简单的操作,直接使用UTF-8编码基本问题就搞定了 Ht ... 
- 在.NET项目中使用PostSharp,使用MemoryCache实现缓存的处理(转)
			在之前一篇随笔<在.NET项目中使用PostSharp,实现AOP面向切面编程处理>介绍了PostSharp框架的使用,试用PostSharp能给我带来很多便利和优势,减少代码冗余,提高可 ... 
- vim  括号自动补全
			来源:http://www.cnblogs.com/huanlei/archive/2012/04/02/2430153.html 有时要重新配置vim 的,所以收藏了: inoremap ( ()& ... 
- (6)简单说说java中的线程
			先甩出来两种创建线程的方法: private static int count = 100; public static void main(String[] args) { // 用继承Thread ... 
- MVC不用302跳转Action,内部跳转
			原理,在一个Action里面return 另一个Action出去. public class HomeController : Controller { // GET: Home public Act ... 
- SpringMVC REST 风格请求介绍及简单实践
			简介 REST 即 Representational State Transfer.(资源)表现层状态转化.是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越 ... 
