在Android的开发调试使用过程中,对于应用的异常退出,几乎是不可避免的问题,总会有极小概率或者某些偶然的场景我们没有考虑到,导致了应用的异退,如果是不知道规律的时候,我们就很难复现问题,更无从下手去解决问题。

        对于上面这种情况,现在通常的解决方式是记录Crash日志,将日志上传服务器或者存储到本地在调试的时候方便查询。

        下面我们来看如何捕获异退的日志。

        1、首先实现Java中的异常处理接口UncaughtExceptionHandler,重写其uncaughtException方法。

    @Override    public void uncaughtException(Thread thread, Throwable ex) {        if (//进行自己的业务逻辑判断) {            //如果用户没有处理则让系统默认的异常处理器来处理  mDefaultHandler通过Thread.getDefaultUncaughtExceptionHandler获取            mDefaultHandler.uncaughtException(thread, ex);        } else {            try {                Thread.sleep(3000);            } catch (InterruptedException e) {                e.printStackTrace();            }            //退出程序            //退出JVM(java虚拟机),释放所占内存资源,0表示正常退出(非0的都为异常退出)            System.exit(0);            //从操作系统中结束掉当前程序的进程            android.os.Process.killProcess(android.os.Process.myPid());        }    }

        2、让应用的异常处理使用我们自定义的接口,调用Thread.setDefaultUncaughtExceptionHandler方法,传入我们的自定义异常处理类的对象。

        Thread.setDefaultUncaughtExceptionHandler(this);

        3、在重写的方法中,插入我们自己的异常处理逻辑。在uncaughtException方法中有参数Throwable,该参数中可以获取堆栈信息等,可以将这些信息格式化为字符串,写入本地某个文件或者传入服务器中,依据实际情况使用。将Throwable堆栈信息转换为String的参考代码如下。

        Writer writer = new StringWriter();        PrintWriter printWriter = new PrintWriter(writer);        ex.printStackTrace(printWriter);        Throwable cause = ex.getCause();        while (cause != null) {            cause.printStackTrace(printWriter);            cause = cause.getCause();        }        printWriter.close();        String result = writer.toString();


        进行异常捕获的方法就简单介绍到这里了,记得要在Application启动的时候初始化!




更多相关文章

  1. 百度语音合成(TTS) 在Android的使用方法
  2. Android(安卓)中的线程形态 -- AsyncTask,HandlerThread,IntentSer
  3. Android(安卓)下开发3D程序--我的坎坷路(一)
  4. Android测试之旅之JUnit(一)
  5. 《Android(安卓)应用之路》 Android(安卓)开发技术选型(博客,新闻,
  6. android权限申请库解析
  7. [转]编写高效的Android代码
  8. 在android中,编译的项目使用到第三方jar的导入方法 终极版!
  9. Android的进程与线程(3)线程安全问题

随机推荐

  1. android --- 2g/3g流量问题实例
  2. Android实现自动定位城市并获取天气信息
  3. android 按纽状态配置文件
  4. android之获得当前连接wifi的名字
  5. android获取屏幕长宽的方法
  6. Android:setLatestEventInfo问题
  7. android语音识别之科大讯飞语音API的使用
  8. Android(安卓)Socket编程
  9. Android(安卓)实现开机自启动 Service
  10. Android(安卓)ble setCharactersticNotif