1,什么是ANR?
ANR是Application Not Responding的简称,主要是说应用程序出现无响应的情况。在这个情况出现的时候同时在手机界面会弹出响应的对话框,提示应用程序无响应2,ANR的几种类型:
当运行指定的APP,如果Android系统检测到符合下边的几种条件那就会弹出应用程序无响应的界面。
1)按键超时
Android默认的响应时间是5s,如果一个触屏事件超过5s,那么就会发生此现象。
2)广播超时
广播的默认响应时间是10s,如果一个广播在10s之内还美柚执行完,那么就会出现此现象。
3)服务超时
服务的默认响应事件是20s,如果请求的服务在20s内失败,那么就会发生此现象。
3,ANR事件与异常的区别
ANR事件是由于一些操作的原因或者是反应事件较慢会出现程序无响应的情况,而异常是程序由于代码或者是一些其他的原因出现程序停止运行的情况,这两种情况的性质是完全不一样的。
4,与ANR相关的一些东西
1)Java进程分为主线程和主消息队列。
2)主线程主要是用来处理一些有关UI事件,比如画图,监听或是接受UI事件。
3)主线程还要从主消息队列取出一些消息并且能够尽可能快的处理这些消息。
4)在主线程还没有处理完当前的消息的时候,他是不能再去取下一条消息的。
5)如果主线程没有及时处理掉这个消息,那么ANR事件就会发生。
5,如何分析ANR
1)首先需要找出ANR发生的事件,进程号,还有ANR的类型。
2)检查CPU的内存使用情况。
3)需要检查文件trace.txt,还有映射进程,时间戳等信息。
4)通过main log 和event log 寻找更多的有用信息,用来分析问题。
6,分析ANR需要注意的地方:
1)尽可能使用eng版本去抓取log,因为eng版本抓取的log是最全面的,有些log在eng版本下才会打开。
2)我们还需要抓取一些很重要的log文件,提供给MTK分析使用,让他们帮着一起分析问题所在。