手机开发 2016-10-03
要阅读本文内容,请先去查看参考连接文章,本文注重解决与总结FATAT&ANR问题的步骤。
1. FATAL&ANR
FATAL:程序异常退出(uncausedexception)与程序强制关闭(ForceClosed)【我经常碰到的是空指针异常(NullPointerException),主要讲解空指针异常的处理】;
ANR:应用无响应(Application Not Responding)【我经常碰到的是KeyDispatchTimeout,主要讲解按键分发超时无响应处理】;
问题来源:软件版本发布前,进行Monkey自动化测试(它向系统发送伪随机的用户事件流(eg:按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。),将潜在的bug进行修复;
解决办法:观察输出日志与data/anr/trace.txt。
2. FATAL&ANR快速解决教程
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类型
III、查看CPU使用前后用量
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操作】
3. FATAL&ANR总结
1、出错日志定位是FATAL还是ANR问题;
2、若是ANR问题,先查看出错日志文件内容,再查看traces.txt文件内容给出分析步骤以及解决办法【一般比较难定位与解决】。
4. 参考:
1、http://www.cnblogs.com/purediy/p/3225060.html【Android ANR分析解决办法】