我以前只知道项目代码集成这个模块,实现UncaughtExceptionHandler就可以处理一些运行时错误,但是代码方面我并没有具体去看。现在有些需求需要重新更改下模块,于是掏出来复习下。

现在崩溃收集一般要么采用腾讯Bugly第三方平台管理,要么自建收集日志工具进行管理。腾讯bugly集成在此不在叙述,集成还是很方便的。自建的话,就是需要在捕获异常的时候,记录下来,上传服务器进行处理。

伪代码如下:

public class CrashHandler implements Thread.UncaughtExceptionHandler {

    private Thread.UncaughtExceptionHandler uncaughtExceptionHandler;
    private Context mContext;


    private  static CrashHandler mCrashHandler = new CrashHandler();
    private CrashHandler(){

    }

    public static CrashHandler getInstance(){
        return mCrashHandler;
    }

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

    /**
     * 这里就是未捕获的异常,进行统一处理
     * @param t
     * @param e
     */
    @Override
    public void uncaughtException(Thread t, Throwable e) {

        if (handleException(e)){
            //交给系统处理
            mCrashHandler.uncaughtException(t,e);
        }else {
            //自己处理异常
            
            //杀死进程
            android.os.Process.killProcess(android.os.Process.myPid());
            System.exit(0);
        }


    }

    /**
     *先进行处理异常,return false表明未处理
     * @param throwable
     * @return
     */
    private boolean handleException(Throwable throwable){
        if (throwable == null){
            return false;
        }

        new Thread(){
            @Override
            public void run() {
                Looper.prepare();
                    //提示错误信息
                Looper.loop();
            }
        }.start();
        saveExceptionToSD(throwable);//保存日志到sd卡
        postExceptionToWeb(throwable);//提交到自己服务器
        return true;
    }

    private void saveExceptionToSD(Throwable throwable){

    }

    private void postExceptionToWeb(Throwable throwable){

    }

网上封装好的代码太多了,相关具体可以去爬别人好的代码。但是核心思想都是去自己处理HnadlerException方法里的异常,保证应用给用户好的体验。

标签: none

添加新评论