android 程序异常捕捉处理

android 实际开发中,我们的程序往往因为琳琅满目的android机型以及各种商家修改后的android系统,导致我们的程序经常会出现各种bug.而这种问题我们有由于精力有限或者其它各种问题,往往不能一一找出来。所以我们在系统Crash的基础上,重写了Crash。

今天,我将友情推荐在这块写的非常不错的一个博客(夏安明)的博文:

Android 重写系统Crash处理类,保存Crash信息到SD卡 和 完美退出程序的方法
.

好吧!高人的也推荐了,那我现在就推荐推荐下我自己平时运用中简略的写法吧!呵呵呵,听着看着,感觉有点毛遂自荐了!大家不喜勿喷啊。

/**
 * @类名: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);
    }
}

其实,开发中还得看你们的要求,一般,如果在客户端使用的情况下,最好是能把报错的信息,机型等信息,保存到本地,然后推送到服务器,把这些信息一一统计起来,那对于开发人员来说就更好的优化自己的软件了,所以,我推荐了 夏安明 的这篇博文,同时自己也是把所有的知识点一一整理收集起来,毕竟好记星不如烂笔头。谢谢!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值