Android通用框架封装三 CrashHandler框架封装

1 前言

在日常使用中我们总会记录一些异常信息,例如崩溃信息等,这些功能可以借助第三方工具实现,例如友盟,oneAPM 等,但是有时这些工具满足不了我们的需求,或者说不是那么友好,这时,我们就需要自己做一个异常信息收集工具了。

2 Crash框架的功能

在日常使用中我们总会记录一些异常信息,例如崩溃信息等,这里我们就可以实现以下的崩溃框架。

功能:
1记录崩溃时的异常信息,包括崩溃时的异常栈信息
2 将崩溃时的异常信息记录到文件中,约定好格式
3 将异常日志上传到服务器平台
4 异常信息可以写入到单独的异常信息文件(往往异常信息较少,最好不要与日志混在一起)

3 Crash框架的设计与实现

这个框架较为简单,UML图如下:
这里写图片描述

可以看到就是实现了Thread.UncaughtExceptionHandler接口,代码如下:

/**
 * @author Created by qiyei2015 on 2017/5/7.
 * @version: 1.0
 * @email: 1273482124@qq.com
 * @description: 崩溃时异常处理器
 */
public class ExceptionCrashHandler implements Thread.UncaughtExceptionHandler {
    /**
     * 调试标志
     */
    private final static String TAG = ExceptionCrashHandler.class.getSimpleName();

    /**
     * 默认的线程ExceptionHandler
     */
    private Thread.UncaughtExceptionHandler mDefaultHandler;

    private static class SingleHolder{
        private final static ExceptionCrashHandler sHandler = new ExceptionCrashHandler();
    }

    /**
     * 构造方法私有化
     */
    private ExceptionCrashHandler(){
    }

    /**
     * 内部类的方式提供单例
     * @return
     */
    public static ExceptionCrashHandler getInstance(){
        return SingleHolder.sHandler;
    }

    /**
     * 初始化,一般在Application中调用
     */
    public void init(){
        //设置全局的异常处理类为本类
        Thread.currentThread().setUncaughtExceptionHandler(this);
        //获取当前线程默认的ExceptionHandler
        mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
    }

    @Override
    public void uncaughtException(Thread t, Throwable e) {
        LogManager.e(TAG,e.getMessage());

        //写入到本地文件 e 当前应用版本 手机信息

        // 1. 崩溃的详细信息
        // 2. 应用信息 包名 版本号
        // 3. 手机信息 系统版本 手机型号 内存
        // 4. 保存当乞丐了文件,等应用再次启动再上传(上传文件不在这里处理)

        String crashFile = LogManager.writeExceptionToFile(e);
        LogManager.e(TAG,"crashFile --> " + crashFile);
        // 缓存崩溃日志文件
        LogManager.cacheCrashFile(crashFile);
        uploadCrashLog();
        //让系统默认处理器处理
        mDefaultHandler.uncaughtException(t,e);
    }

    /**
     * 上传crash日志到服务器
     */
    private void uploadCrashLog(){
       //自己实现 
    }
}

代码很简单,我就不讲解了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值