FATAL&ANR问题快速分析教程
2016-10-03 11:30
741 查看
要阅读本文内容,请先去查看参考连接文章,本文注重解决与总结FATAT&ANR问题的步骤。
[b]1. FATAL&ANR[/b]
FATAL:程序异常退出(uncausedexception)与程序强制关闭(ForceClosed)【我经常碰到的是空指针异常(NullPointerException),主要讲解空指针异常的处理】;
ANR:应用无响应(Application Not Responding)【我经常碰到的是KeyDispatchTimeout,主要讲解按键分发超时无响应处理】;
问题来源:软件版本发布前,进行Monkey自动化测试(它向系统发送伪随机的用户事件流(eg:按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。),将潜在的bug进行修复;
解决办法:观察输出日志与data/anr/trace.txt。
[b]2. [b]FATAL&ANR快速解决教程[/b][/b]
2.1 问题
出错日志定位,将版本未上线的bug进行修复。
2.2 解决问题过程
2.2.1 FATAL问题解决过程:
1、出错日志中搜索关键字:“NullPointerException”
会看到错误代码段,分析错误代码段的原因,为什么会出现空指针异常?
工作中遇到过的有:
异步回调线程中,由于Activity被销毁了与网络阻塞的原因(一定概率会发生),异步线程回调Activity的方法,导致FATAL问题。原因很简单:Thread的运行是独立与Activity的,也就是说当一个Activity被finish之后,如果没有主动停止Thread或者Thread里的run方法没有执行完毕的话,Thread也会一直执行。
2.2.2 ANR问题解决过程:
1、出错日志中搜索关键字:“ANR in”:
I、查看发生的Activity(注意,发生ANR的Activity不一定出现ANR问题的根源)
II、查看ANR类型
![](https://oscdn.geek-share.com/Uploads/Images/Content/202002/03/39780c725fe2965c012f45f0eae5ee62.png)
III、查看CPU使用前后用量
![](https://oscdn.geek-share.com/Uploads/Images/Content/202002/03/035f8a25b223f067709606014f1085fc.png)
2、出错日志中搜索关键字:“sig: 3”
I、查看生成traces文件的时间及第1个PID号(在Android设备下的/data/anr/traces.txt)
II、根据PID号去查看前10秒做了什么样的操作(重点关注带“E”)
3、traces.txt文件内容中搜索关键字:“cmd_line”查看发生的进程
I、查看Looper等待下消息进行消息队列(主要查看非Android原生包类的方法)【结合io wait问题高:是否在handleMessage处理消息过长?给出解决办法:新建线程处理耗时过长的io操作】
[b]3. [b]FATAL&ANR总结[/b][/b]
1、出错日志定位是FATAL还是ANR问题;
2、若是ANR问题,先查看出错日志文件内容,再查看traces.txt文件内容给出分析步骤以及解决办法【一般比较难定位与解决】。
[b]4. 参考:[/b]
1、http://www.cnblogs.com/purediy/p/3225060.html【Android ANR分析解决办法】
[b]1. FATAL&ANR[/b]
FATAL:程序异常退出(uncausedexception)与程序强制关闭(ForceClosed)【我经常碰到的是空指针异常(NullPointerException),主要讲解空指针异常的处理】;
ANR:应用无响应(Application Not Responding)【我经常碰到的是KeyDispatchTimeout,主要讲解按键分发超时无响应处理】;
问题来源:软件版本发布前,进行Monkey自动化测试(它向系统发送伪随机的用户事件流(eg:按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。),将潜在的bug进行修复;
解决办法:观察输出日志与data/anr/trace.txt。
[b]2. [b]FATAL&ANR快速解决教程[/b][/b]
2.1 问题
出错日志定位,将版本未上线的bug进行修复。
2.2 解决问题过程
2.2.1 FATAL问题解决过程:
1、出错日志中搜索关键字:“NullPointerException”
会看到错误代码段,分析错误代码段的原因,为什么会出现空指针异常?
工作中遇到过的有:
异步回调线程中,由于Activity被销毁了与网络阻塞的原因(一定概率会发生),异步线程回调Activity的方法,导致FATAL问题。原因很简单:Thread的运行是独立与Activity的,也就是说当一个Activity被finish之后,如果没有主动停止Thread或者Thread里的run方法没有执行完毕的话,Thread也会一直执行。
2.2.2 ANR问题解决过程:
1、出错日志中搜索关键字:“ANR in”:
I、查看发生的Activity(注意,发生ANR的Activity不一定出现ANR问题的根源)
II、查看ANR类型
![](https://oscdn.geek-share.com/Uploads/Images/Content/202002/03/39780c725fe2965c012f45f0eae5ee62.png)
III、查看CPU使用前后用量
![](https://oscdn.geek-share.com/Uploads/Images/Content/202002/03/035f8a25b223f067709606014f1085fc.png)
2、出错日志中搜索关键字:“sig: 3”
I、查看生成traces文件的时间及第1个PID号(在Android设备下的/data/anr/traces.txt)
II、根据PID号去查看前10秒做了什么样的操作(重点关注带“E”)
3、traces.txt文件内容中搜索关键字:“cmd_line”查看发生的进程
I、查看Looper等待下消息进行消息队列(主要查看非Android原生包类的方法)【结合io wait问题高:是否在handleMessage处理消息过长?给出解决办法:新建线程处理耗时过长的io操作】
[b]3. [b]FATAL&ANR总结[/b][/b]
1、出错日志定位是FATAL还是ANR问题;
2、若是ANR问题,先查看出错日志文件内容,再查看traces.txt文件内容给出分析步骤以及解决办法【一般比较难定位与解决】。
[b]4. 参考:[/b]
1、http://www.cnblogs.com/purediy/p/3225060.html【Android ANR分析解决办法】
相关文章推荐
- Android ANR问题分析[转]
- Android ANR问题分析[转]
- 题目1 : 骨牌覆盖问题·二 (矩阵快速幂+分析状态的表示+题目的提示分析很好很经典)
- 分享 返回分享首页» 分享 new String(getBytes(ISO-8859-1),GBK)解决中文乱码问题分析
- Sensor Simulator 使用教程 && 软件编译后自动关闭问题
- 网站分析快速作业:十三个网站数据分析的问题及答案
- JAVA视频教程,学习JAVA常见问题分析-JAVA学习方法系列
- aspnet快速入门教程问题
- 关于"建立空文档失败"的问题的分析
- 线程间操作无效: 从不是创建控件“Control Name'”的线程访问它问题的解决方案及原理分析
- Android ANR问题分析
- <<git使用快速教程>>
- Webalizer 网站流量分析软件快速配置教程
- 线程间操作无效: 从不是创建控件“Control Name&#39;”的线程访问它问题的解决方案及原理分析
- 快速找出数据库的性能问题之:缺失索引 &无用的索引
- 具体问题具体分析 之 Q&A票
- Polya"数学分析中的问题和定理"前言(节选)
- struts中post方式上传文件,enctype="multipart/form-data",request.getParameter("file") 是null的问题分析
- Unable to start program '%CSIDL_PROGRAM_FILES%/XXXX/XXXX.exe'的问题分析
- IOS开发:Program received signal: “EXC_BAD_ACCESS" 问题分析