实用工具----基于UncaughtExceptionHandler实现的奔溃日志捕获显示、分享的封装

本文已同步发表到我的技术微信公众号,扫一扫文章底部的二维码或在微信搜索 “程序员驿站”即可关注,不定期更新优质技术文章。同时,也欢迎加入QQ技术群(群号:650306310)一起交流学习!

今天我们介绍主角是UncaughtExceptionHandler,一个Java提供给我们的用于全局监听奔溃信息回调的接口类。下面我们就来具体看下其使用方法,并对其进行封装,方便项目直接使用。

 

UncaughtExceptionHandler介绍

 

UncaughtExceptionHandler是定义在Thread类中的一个内部接口,该接口只有uncaughtException一个回调方法。

    @FunctionalInterface
    public interface UncaughtExceptionHandler {
        //奔溃异常时的回调方法
        void uncaughtException(Thread t, Throwable e);
    }

 

UncaughtExceptionHandler的使用

step 1:  我们定义一个类MyUncaughtExceptionHandler实现UncaughtExceptionHandler

/**
 * Created by chendx on 2018/6/30
 *
 * @since 1.0
 */
public class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler{
    private Thread.UncaughtExceptionHandler uncaughtExceptionHandler;
    public MyUncaughtExceptionHandler(Thread.UncaughtExceptionHandler uncaughtExceptionHandler) {
        this.uncaughtExceptionHandler = uncaughtExceptionHandler;
    }

    @Override
    public void uncaughtException(Thread thread, Throwable ex) {
        //------处理异常逻辑开始-------

             //....此处省略一万行代码

        //------处理异常逻辑结束-------
        if (uncaughtExceptionHandler != null) {
            uncaughtExceptionHandler.uncaughtException(thread, ex);
        }
    }
}

step 2:  初始化MyUncaughtExceptionHandler(一般放在Application的onCreate中完成)

  Thread.UncaughtExceptionHandler handler = Thread.getDefaultUncaughtExceptionHandler();
  MyUncaughtExceptionHandler exceptionHandler = new MyUncaughtExceptionHandler(handler);
  Thread.setDefaultUncaughtExceptionHandler(exceptionHandler);UncaughtExceptionHandler exceptionHandler = new MyUncaughtExceptionHandler(handler);
  Thread.setDefaultUncaughtExceptionHandler(exceptionHandler);

通过以上步骤,我们就可以很愉快地接收App崩溃异常信息了。在uncaughtException中我们可以用一个界面将奔溃信息进行展示,也可以将奔溃信息存储到本地或者服务器等。

基于UncaughtExceptionHandler的封装---CrashHandlerLib库

介绍:一个基于UncaughtExceptionHandler实现的Android奔溃日志捕获依赖库,使用该库可以显性的将奔溃日志展示出来,有助于开发以及测试人员在工作中及时定位奔溃问题.同时支持将奔溃日志分享到微信、QQ等第三方。

使用手册

step 1.在根目录 build.gradle 上添加配置

allprojects {
	repositories {
		...
		maven { url 'https://jitpack.io' }
	}
}

step 2.在当前module的build.gradle添加如下依赖

dependencies {
	implementation 'com.github.tuikes:CrashHandler:v2.1'
}

step 3.在Application中完成初始化

@Override
public void onCreate() {
    super.onCreate();
    CrashManager.getInstance().init(this, BuildConfig.DEBUG);
}

 

效果演示

 

step 1.测试代码源码

1>>>奔溃日志文件分享到QQ、微信等第三方:

 CrashManager.getInstance().shareCrashFile(MainActivity.this);

2>>>类型为TextView的test2控件没有findViewById导致奔溃

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    test = findViewById(R.id.test);

   test.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d("cdx", test2.getText().toString());
        }
    });

    findViewById(R.id.share_crash_file).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //将奔溃信息分享到第三方
            CrashManager.getInstance().shareCrashFile(MainActivity.this);
        }
    });
}

 

step 2.运行查看效果

最后,附上CrashHandlerLib库Github地址

关注我的技术公众号"程序员驿站",每天都有优质技术文章推送,微信扫一扫下方二维码即可关注:


 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值