今天这篇Blog是我在逛CSDN时,看到一篇关于《android程序异常捕捉处理》,我觉得写得挺好!所以基本就Copy了,为什么本人会认为这篇Blog会挺好呢?因为这个问题是很多初学者甚至大神有时去面试时,面试官会问的一个问题!问题不难,难的就是记不住!下面我就给大伙分享分享这个问题应该如果处理?
/**
* @类名:CatchHandler
* @类描述:监测程序闪退,直接注销掉整个程序,然后重启回到主界面
* @修改人:
* @修改时间:
* @修改备注:
* @版本:
*/
public class CatchHandler implements UncaughtExceptionHandler {
private Context mContext;
private static CatchHandler mCatchHandler = new CatchHandler();
private CatchHandler() {}
public static CatchHandler getInstance() {
return mCatchHandler;
}
/**
* @方法说明:初始化数据
* @方法名称:init
* @param context
* @返回值:void
*/
public void init(Context context) {
mContext = context;
Thread.setDefaultUncaughtExceptionHandler(this);
}
@Override
public void uncaughtException(Thread thread, Throwable ex) {
/**如果是主线程出现异常闪退**/
if (thread.getName().equals("main")) {
ToastException(thread, ex);
try {
/**时间休眠的越小,那你看到黑屏的时间也越小。**/
Thread.sleep(300);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
/**这里调用的是我程序中重写的退出程序的方法**/
//MyApplication.outApp();
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);
} else {
handleException(thread, ex);
}
}
/**
* @方法说明:弹出土司框,这个土司必须要在线程中弹出,不然会报错
* @方法名称:ToastException
* @param thread
* @param ex
* @返回值:void
*/
private void ToastException(final Thread thread, final Throwable ex) {
new Thread() {
@Override
public void run() {
Looper.prepare();
Toast.makeText(mContext, "×××出现异常,操作失败!", Toast.LENGTH_LONG).show();
Looper.loop();
}
}.start();
}
/**
* @方法说明:异常处理方法
* @方法名称:handleException
* @param thread
* @param ex
* @返回值:void
*/
private void handleException(final Thread thread, final Throwable ex) {
/**这里我是当出现了异常,然后我就跳转到我的登录界面。还是看大家的需要**/
Intent intent = new Intent(mContext, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
}
}
其实,开发中还得看你们的要求,一般,如果在客户端使用的情况下,最好是能把报错的信息,机型等信息,保存到本地,然后推送到服务器,把这些信息一一统计起来,那对于开发人员来说就更好的优化自己的软件了。
免责声明:转载http://blog.csdn.net/u011993368/article/details/43760131