Android自义定捕获异常
16lz
2021-01-26
在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启动的时候初始化!
更多相关文章
- 百度语音合成(TTS) 在Android的使用方法
- Android(安卓)中的线程形态 -- AsyncTask,HandlerThread,IntentSer
- Android(安卓)下开发3D程序--我的坎坷路(一)
- Android测试之旅之JUnit(一)
- 《Android(安卓)应用之路》 Android(安卓)开发技术选型(博客,新闻,
- android权限申请库解析
- [转]编写高效的Android代码
- 在android中,编译的项目使用到第三方jar的导入方法 终极版!
- Android的进程与线程(3)线程安全问题