ANR分类 |
Input事件 Waited 5000ms for KeyEvent (KeyEvent)Waited 5000ms for MotionEvent (MotionEvent) |
Focus事件 Waited 5000ms for WindowFocus Waited 5000ms for FocusEvent(hasFocus=true)) |
主线程卡死:调同步binder卡死,主线程等锁 |
启动4大组件:执行Activity:5s,ContentProvider:10s, BroadcastReceiver:(front 10s、background 60s),Service(前台20s、后台200s),例如:startForegroundService() did not then call service.startForeground() |
分析步骤 |
从anr trace文件找到主线程sysTid=pid("main" prio=5 tid=1 Blocked调用栈是否正常 |
从anr文件分析系统资源是否充足? cpu看
kswapd (大:频发缺页中断,读取文件)kswapd0:0% user + 83% kernel【avg =1 avg60=4 avg300=2 表示IO频繁 】 |
通过log判断主线程卡顿 |
Looper : Slow dispatch took dvm_lock_sample:[system_server,1,Binder:1614_A,22,AlarmManagerService.java,1072,-,2496,4] OpenGLRenderer SurfaceFlinger: Attempted to create an ExternalTexture for layer lrc#0 that exceeds render target size limit. 主线程在等lock:waiting to lock关键字 主线程在等binder调用:一直在waitfordevice或者waitForResponse等函数,此类异常为binder调的时候等待binder驱动返回通信状态的时候异常了,大多情况为对端出现了问题,导致一直没有返回binder的结果引起 block io:Android ANR问题总结-CSDN博客 |