一、什么是Anr:
application not responding 程序无响应。程序在规定的时间内没有响应。
超时时间的计数一般是从按键分发给app开始。超时的原因一般有两种:
1.当前的事件没有机会得到处理(即UI线程正在处理前一个事件,没有及时的完成或者looper被某种原因阻塞住了);
2.当前的事件正在处理,但没有及时完成。
二、Anr的主要原因
ANR一般有三种类型:
1:KeyDispatchTimeout(5 seconds) --主要类型
按键或触摸事件在特定时间内无法得到响应
2:BroadcastTimeout(10 seconds)
BroadcastReceiver在的onRecieve运行在主线程中,短时间内无法处理完成导致
3:ServiceTimeout(20 seconds) --小概率类型
Service的各个声明周期在特定时间内无法处理完成
Anr场景分析
1.使用命令导出anr日志
adb pull /data/anr/traces.txt ~/Desktop/
2.分析关键信息
以每行的重点内容没准,每行自带时间戳
Process:anr发生的时间和进程,和生成traces文件的时间
CPUusage ... ago :cpu在anr发生前的使用情况
CPUusage ...later: cpu在anr后的使用情况
ABI: 手机的cpu架构
HEAP: 堆的内存信息
ANR in:包名,和类名
Reason:原因
TOTAL:总的CPU使用率
prio:线程的优先级
tid:线程锁id 主线程的id为1 主要看这个线程的
Sleeping:线程的状态
sCount:线程被挂起的次数
dsCount:线程是否被调试
04-01 13:12:11.572** I/InputDispatcher( 220): Application is not responding**:Window{2b263310com.[Android](http://lib.csdn.net/base/android).email/com.android.email.activity.SplitScreenActivitypaused=false}. 5009.8ms since event, 5009.5ms since waitstarted
04-0113:12:11.572 I/WindowManager( 220): Input event dispatching timedout sending tocom.android.email/com.a