ANR问题分析流程
2016-12-24 22:06
531 查看
什么是ANR?
ANR即Application Not Responding。出问题时,弹出对话框,提示“XXX无响应“。
ANR有哪些类型?
1、按键分发超时
按键按下/抬起/触摸等事件分发超时。Android默认超时时间5s,厂商定制后超时时间可能有差别,5s~15s不等。根据Android版本/按键事件所处的阶段,默认超时时间可能不一样。
2、广播超时
BroadcastReceiver接受到消息后,在10s内未能把事情做完。Android默认超时时间10s。
3、服务超时
请求服务(Service–四大组件之一)超时,20s内没能启动服务。Android默认超时时间20s。
ANR与报异常Exception的区别
ANR提示“XXX无响应“,确认“强行关闭“会杀掉进程。
Exception提示“XXX停止“。
ANR的本质是什么?
1、JAVA进程都用于一个主线程和主线程消息队列,这里的主线程就是ActivityThread;
2、主线程负责监听、接受和处理UI事件,比如绘制界面等;
3、主线程会从主线程队列中读取消息,而且需要尽快分发出去;
4、主线程只有在完成当前消息处理后,才从消息队列取出下一个消息;
5、如果主线程在处理某个消息时卡住了,没能及时分发,就会发生ANR。
ANR诊断的关键点和文件
关键点:ANR诊断的关键是需要知道主线程为什么没能及时的处理消息
1、没能获取到CPU时间?
2、正在等待某个时间的发生,从而决定下一步动作?
3、当前消息的处理事项过于复杂?
文件:MTKlog & Trace.txt
mobile log之main_log,例如
mobile log之event_log,例如
trace.txt
ANR问题DEBUG流程
1、找到ANR问题发生的时间
在main_log和event_log中搜索“anr“关键词,找到对应的时间点
2、流程
ANR即Application Not Responding。出问题时,弹出对话框,提示“XXX无响应“。
ANR有哪些类型?
1、按键分发超时
按键按下/抬起/触摸等事件分发超时。Android默认超时时间5s,厂商定制后超时时间可能有差别,5s~15s不等。根据Android版本/按键事件所处的阶段,默认超时时间可能不一样。
2、广播超时
BroadcastReceiver接受到消息后,在10s内未能把事情做完。Android默认超时时间10s。
3、服务超时
请求服务(Service–四大组件之一)超时,20s内没能启动服务。Android默认超时时间20s。
ANR与报异常Exception的区别
ANR提示“XXX无响应“,确认“强行关闭“会杀掉进程。
Exception提示“XXX停止“。
ANR的本质是什么?
1、JAVA进程都用于一个主线程和主线程消息队列,这里的主线程就是ActivityThread;
2、主线程负责监听、接受和处理UI事件,比如绘制界面等;
3、主线程会从主线程队列中读取消息,而且需要尽快分发出去;
4、主线程只有在完成当前消息处理后,才从消息队列取出下一个消息;
5、如果主线程在处理某个消息时卡住了,没能及时分发,就会发生ANR。
ANR诊断的关键点和文件
关键点:ANR诊断的关键是需要知道主线程为什么没能及时的处理消息
1、没能获取到CPU时间?
2、正在等待某个时间的发生,从而决定下一步动作?
3、当前消息的处理事项过于复杂?
文件:MTKlog & Trace.txt
mobile log之main_log,例如
01-01 08:45:57.396 2781 2781 I AEE/AED : Exception 'ANR' raised
mobile log之event_log,例如
01-01 08:45:52.740 767 817 I am_anr : [0,1555,com.android.phone,1082670597,executing service com.android.phone/com.gionee.Phone.StartPhoneAppService] 01-01 08:45:55.889 767 1518 I am_kill : [0,1636,android.process.acore,15,empty #13] 01-01 < 4000 span class="hljs-number">08:45:56.000 767 1436 I am_proc_died: [0,1636,android.process.acore] 01-01 08:45:57.363 767 817 I am_kill : [0,1555,com.android.phone,-12,bg anr] 01-01 08:45:57.378 767 1574 I am_proc_died: [0,1555,com.android.phone]
trace.txt
----- pid 1583 at 2016-01-01 08:04:38 ----- Cmd line: com.android.phone ...... DALVIK THREADS (14): "main" prio=5 tid=1 TimedWaiting | group="main" sCount=1 dsCount=0 obj=0x750fefb8 self=0x7f864af800 | sysTid=1583 nice=0 cgrp=default sched=0/0 handle=0x7f8a445eb0 | state=S schedstat=( 93166071 48310311 345 ) utm=6 stm=3 core=2 HZ=100 | stack=0x7fd6b99000-0x7fd6b9b000 stackSize=8MB | held mutexes= at java.lang.Object.wait!(Native method) - waiting on <0x3d2f5a31> (a com.android.providers.telephony.TelephonyProviderApp) at java.lang.Object.wait(Object.java:422) at com.android.providers.telephony.TelephonyProviderApp.onCreate(TelephonyProviderApp.java:37) - locked <0x3d2f5a31> (a com.android.providers.telephony.TelephonyProviderApp) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1017) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4874) at android.app.ActivityThread.access$1500(ActivityThread.java:178) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1531) at android.os.Handler.dispatchMessage(Handler.java:111) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5653) at java.lang.reflect.Method.invoke!(Native method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
ANR问题DEBUG流程
1、找到ANR问题发生的时间
在main_log和event_log中搜索“anr“关键词,找到对应的时间点
2、流程
相关文章推荐
- 微软邹欣分析Scrum开发流程的问题和经验
- Android平台上的ANR问题分析方法
- Android ANR和Crash问题小结--分析log
- FATAL&ANR问题快速分析教程
- watchdog杀死system_server导致系统重启问题分析流程
- Android ANR问题分析
- ANR机制以及问题分析
- 技术记录---Toast频繁弹出问题及其流程分析
- Cordys BOP 4.3流程实例监控及流程恢复、流程环节配置Method问题的分析处理
- Android ANR问题分析思路
- hbase region lookups流程以及rpc线程卡死问题分析
- EAS流程卡死问题的分析处理报告
- Android ANR问题分析[转]
- Android OTA升级原理和流程分析(二)---update.zip差分包问题的解决
- Android OTA升级原理和流程分析(二)---update.zip差分包问题的解决
- 微软邹欣分析Scrum开发流程的问题和经验
- Android ANR问题分析[转]
- 主机ip地址169.254打头的问题分析和解决流程
- ANR的分析和问题处理
- iOS支付宝支付(Alipay)详细接入流程以及项目中遇到的问题分析