如何方便的收集app崩溃日志

在Thread中有个方法

setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler var0)

`

很多人可能没了解过这个东西可以干嘛用, 其实它的作用是可以传入一个 Handler来捕获那些没有被捕获的异常, 比如 app 层面的 crash。 下面提供了一段源码,可以用来捕获并把异常写入到文件中, 当然如果要上报的话也只需要把对应的字符串上报到统计系统就行。

public class ExceptionHandler implements Thread.UncaughtExceptionHandler {
    private static final String TAG = "ExceptionHandler";

    private static ExceptionHandler mInstance;
    private Context mContext;
    private SimpleDateFormat mFormat = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");

    private ExceptionHandler() {
    }

    public static ExceptionHandler getInstance() {
        if(mInstance == null) {
            mInstance = new ExceptionHandler();
        }
        return mInstance;
    }

    public void init(Context context) {
        mContext = context;
        Thread.setDefaultUncaughtExceptionHandler(this);
    }

    @Override
    public void uncaughtException(Thread t, Throwable e) {
        try {
            Log.d(TAG, "uncaughtException: " + e.getMessage());
            File cache = mContext.getExternalCacheDir();
            String time = mFormat.format(new Date(System.currentTimeMillis()));
            String crashName = "crash_" + time + ".log";
            File crash = new File(cache, crashName);
            StringWriter stringWriter = new StringWriter();
            PrintWriter writer = new PrintWriter(stringWriter);
            e.getCause().printStackTrace(writer);
            writer.close();
            FileOutputStream fos = new FileOutputStream(crash, true);
            fos.write(stringWriter.toString().getBytes());
            fos.flush();
            fos.close();
            System.exit(0);
            Process.killProcess(Process.myPid());
        } catch (Exception exp) {
            Log.e(TAG, "uncaughtException: " + exp.getMessage());
            System.exit(0);
            Process.killProcess(Process.myPid());
        }
    }
}

`

原文发布于微信公众号 - Android每日一讲(gh_f053f29083b9)

原文发表时间:2018-07-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏曾大稳的博客

Glide v3.7源码分析(2)-----RequestManager.load

可以看到,Glide初始化的时候做了很多的事,初始化了缓存相关的类,任务执行以及缓存管理的引擎,注册了DataLoadProviderRegistry Gene...

23810
来自专栏androidBlog

butterknife 源码分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/de...

26210
来自专栏微信公众号:Java团长

一个经典例子让你彻彻底底理解Java回调机制

以前不理解什么叫回调,天天听人家说加一个回调方法啥的,心里想我草,什么叫回调方法啊?然后自己就在网上找啊找啊找,找了很多也不是很明白,现在知道了,所谓回调:就是...

15340
来自专栏码匠的流水账

聊聊storm的window trigger

storm-core-1.2.2-sources.jar!/org/apache/storm/trident/windowing/WindowTridentPr...

10840
来自专栏曾大稳的博客

Android ClassLoader流程解读并简单方式实现热更新

ClassLoader在启动Activity的时候会调用loadClass方法,我们就从这里入手:

31420
来自专栏Java与Android技术栈

使用Kotlin高效地开发Android App(三)

Kotlin基于Java的空指针提出了一个空安全的概念,即每个属性默认不可为null。

11210
来自专栏刘望舒

ButterKnife原理解析看这篇文章就够了

ButterKnife 算是一款知名老牌 Android 开发框架了,通过注解绑定视图,避免了 findViewById() 的操作,广受好评!由于它是在编译时...

19310
来自专栏码匠的流水账

Flux OOM实例

reactor-core-3.1.3.RELEASE-sources.jar!/reactor/core/publisher/FluxSink.java

12010
来自专栏码匠的流水账

聊聊storm的window trigger

storm-core-1.2.2-sources.jar!/org/apache/storm/trident/windowing/WindowTridentPr...

13500
来自专栏小白鼠

【DUBBO】 Schema解析Spring扩展机制集成Spring

dubbo是如何做到与spring集成的?这都依赖于Spring提供的XML Schema可扩展机制,用户可以自定义XML Schema文件,并自定义XML B...

19730

扫码关注云+社区

领取腾讯云代金券