Android实现崩溃统计(UncaughtExceptionHandler)

之前写项目是的时候都是用的第三方的崩溃统计,并没有去研究他们的原来。最近项目想要修改成自己的方法,来统计崩溃。在此我来分分享下我们实现崩溃统计的原理。

1.实现思路

1)实现UncaughtExceptionHandler接口

Thread.UncaughtExceptionHandler:线程未捕获异常处理器,用来处理未捕获异常

2)从写uncaughtException方法

在这个函数中,根据Throwable ex获取崩溃信息,并保存到本地上

3)在程序再次启动时将崩溃信息上传到服务器上


2.代码实现
package com.example.cranshdemo;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.lang.Thread.UncaughtExceptionHandler;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Looper;
import android.util.Log;

public class CrashHandler implements UncaughtExceptionHandler {  
    public static final String TAG = "CrashHandler";  
    private static CrashHandler INSTANCE = new CrashHandler();  
    private Context mContext;  
    private Thread.UncaughtExceptionHandler mDefaultHandler;  
  
    private CrashHandler() {  
    }  
  
    public static CrashHandler getInstance() {  
        return INSTANCE;  
    }  
  
    public void init(Context ctx) {  
        mContext = ctx;  
        mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();  
        Thread.setDefaultUncaughtExceptionHandler(this);  
    }  
  
    @Override  
    public void uncaughtException(Thread thread, Throwable ex) {  
        handleException(ex);
        new Thread() {  
            @Override  
            public void run() {  
                Looper.prepare();  
                new AlertDialog.Builder(mContext).setTitle("提示").setCancelable(false)  
                        .setMessage("程序崩溃了...").setNeutralButton("我知道了", new OnClickListener() {  
                            @Override  
                            public void onClick(DialogInterface dialog, int which) {  
                                System.exit(0);  
                            }  
                        })  
                        .create().show();  
                Looper.loop();  
            }  
        }.start();  
    }  
  
    /** 
     * 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成. 开发者可以根据自己的情况来自定义异常处理逻辑 
     * 
     * @param ex 
     * @return true:如果处理了该异常信息;否则返回false 
     */  
    private boolean handleException(Throwable ex) {  
        if (ex == null) {  
            return true;  
        }  
        Writer info = new StringWriter();
        PrintWriter printWriter = new PrintWriter(info);
        ex.printStackTrace(printWriter);
        String dump = info.toString();
        Log.e(TAG, dump);
  
        return true;  
    }  
}  





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值