Android全局异常捕获

2018-07-01  本文已影响98人  四喜汤圆
image.png

重点

1.对未手动捕获异常的处理类

import android.content.Context;

/**
 * <pre>
 *     author : 杨丽金
 *     time   : 2018/07/01
 *     desc   : 全局异常捕获类
 * </pre>
 */
public class CrashHandler implements Thread.UncaughtExceptionHandler{
    // 单例:整个应用程序中只需要一个异常捕获类就可以了
    // 上下文
    private Context mContext;
    private CrashHandler(){}

    @Override
    public void uncaughtException(Thread t, Throwable e) {
         // 出现未捕获异常时的处理办法
        // 在此可以把用户手机的一些信息以及异常信息捕获并上传,由于UMeng在这方面有很程序的api接口来调用,故没有考虑

        //干掉当前的程序
        android.os.Process.killProcess(android.os.Process.myPid());
    }

    private static class SingltonHolder{
        private static final CrashHandler instance = new CrashHandler();
    }

    public static CrashHandler getInstance(){
        return SingltonHolder.instance;
    }

    /**
     * 初始化变量
     * @param context
     */
    public void init(Context context) {
        this.mContext=context;
    }
}

2.在Application中把上述类设置为默认的未捕获异常处理类

public class App extends Application {
    // 全局Context
    private static Context sContext;

    @Override
    public void onCreate() {
        super.onCreate();
        sContext = getApplicationContext();
        // 相关初始化
        init();
    }

    private void init() {
        CrashHandler handler=CrashHandler.getInstance();
        handler.init(context);
        Thread.setDefaultUncaughtExceptionHandler(handler);
    }

    /**
     * 得到全局Context
     * @return
     */
    public static Context getContext() {
        return sContext;
    }
}

参考文献

Android全局异常处理

上一篇下一篇

猜你喜欢

热点阅读