ANR
简介
Application not responsing,即应用程序无响应。Android中AMS和WMS监测应用程序响应时间,应用程序主线程超时时间内没处理完输入事件或没执行完特定操作即ANR。没处理完输入事件ANR,Android弹对话框提示用户当前应用程序没响应,用户继等或关应用程序(杀掉进程)。
产生
- 系统原因
kernel/Framework/Driver等存问题致系统不稳定终现ANR。 - 应用原因
线程死锁、阻塞或性能低下。避放耗时操作于主线程。
分类
- InputDispatchingTimedOut
应用程序主线程5秒内没完成用户input事件(如按键事件、屏幕触摸事件)。 - Service Timeout
应用程序没执行完service的bind/create/start/destroy/unbind操作。前台服务20秒超时,后台服务200秒超时。 - Broadcast Timeout
应用程序规定时间内没执行完onReceive操作。前台广播10秒超时,后台广播60秒超时。(BROADCAST_FG_TIMEOUT /BROADCAST_FG_TIMEOUT) - Content Provider Timeout
应用程序在20秒内没执行完ContentProvider相关操作。
分析
- Find ANR time,PID,ANR type
- Find JE/NE before ANR
- Check trace.txt mapping process ID and time stamp
- Check CPU usage
- Find some more information about main thread through main log and event log
上面所说ANR的trace.txt文件,展讯项目通在log的mic文件夹中snapshot文件里;MTK项目需GAT工具解析DB文件,其trace信息都在DB中。分析trace.txt文件通照下面步骤: