Android全局异常捕获
2018-07-01 本文已影响98人
四喜汤圆
image.png
重点
1.对未手动捕获异常的处理类
- 制作成单例类(因为整个应用程序中,只需要一个异常捕获类就够了)
- 类实例中保存了Context(当异常发生时需要进行一些UI操作,可能会用到Context)
- 该类中在静态内部类单例模式实现的单例类中:为实例变量赋值的方式值得参考
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;
}
}