获取全局异常,自定义应用奔溃的友好提示界面,上传奔溃信息等
安卓提供UncaughtExceptionHandler可以用来捕获程序异常
自定义捕获全局异常
1,继承UncaughtExceptionHandler
2,设置当前对象为默认捕获异常对象
// 获取系统默认的UncaughtException处理器
defalutHandler = Thread.getDefaultUncaughtExceptionHandler();
// 设置该 当前对象 为程序的默认处理器
Thread.setDefaultUncaughtExceptionHandler(this);
3,对捕获的异常进行处理
/**
* 当UncaughtException发生时会转入该函数来处理
* 异常在哪个线程发出,那么这个方法就在那个线程运行
*/
@Override
public void uncaughtException(Thread thread, Throwable ex)
{
formatter.format(new Date());
//截获 异常信息
//异常在哪个线程发出,那么这个方法就在那个线程运行
//你可以。。跳转到新界面 提示应用奔溃
//将 异常信息写入 log文件 上传服务器 等各种处理
}
4,在application中注册 即可
具体代码:
异常捕获类
public class CrashHandler implements Thread.UncaughtExceptionHandler
{
private static final String TAG = CrashHandler.class.getSimpleName();
private static CrashHandler instance; // 单例模式
private Context mContext; // 程序Context对象
private Thread.UncaughtExceptionHandler defalutHandler; // 系统默认的UncaughtException处理类
private DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss.SSS", Locale.CHINA);
private CrashHandler(){
}
public static CrashHandler getInstance() {
if(null == instance)
{
synchronized(CrashHandler.class)
{
if(null == instance)
{
instance = new CrashHandler();
}
}
}
return instance;
}
public void bind(Context context){
mContext = context;
// 获取系统默认的UncaughtException处理器
defalutHandler = Thread.getDefaultUncaughtExceptionHandler();
// 设置该 当前对象 为程序的默认处理器
Thread.setDefaultUncaughtExceptionHandler(this);
}
<pre name="code" class="java"> /**
* 当UncaughtException发生时会转入该函数来处理
* 异常在哪个线程发出,那么这个方法就在那个线程运行
*/
@Override
public void uncaughtException(Thread thread, Throwable ex)
{
formatter.format(new Date());
//截获 异常信息
//异常在哪个线程发出,那么这个方法就在那个线程运行
//你可以。。跳转到新界面 提示应用奔溃
//将 异常信息写入 log文件 上传服务器 等各种处理
//退出应用
//android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);
}
application中注册
@Override
public void onCreate() {
super.onCreate();
CrashHandler.getInstance().bind(this);
}