分发超时==anr

参考:

疑难ANR原因分析-冻结导致直播讲解相关完整笔记_02-22 10:13:28.197 2302 3531 i windowmanager: anr -优快云博客

1.

分析过程:
anr一般问题可能是如下套路:
1、log看具体哪个进程哪个时间点anr,看看anr的类型
2、找到对应的anr的trace,看看anr对应主线程的是否有阻塞耗时等堆栈
上面方式确实对于应用自己原因耗时等引发anr确实够了,但是系统开发往往很多anr都没办法简单通过上述步骤找到原因,很可能trace中根本啥线索没有。
————————————————

找ANR发生时间点,看看啥原因ANR

02-18 20:08:25.283   485   577 I WindowManager: ANR in input window owned by pid=3930. Reason: Input dispatching timed out ([Gesture Monitor] Screenshot 0 (server) is not responding. Waited 5000ms for MotionEvent(deviceId=4, eventTime=39032316052000, source=TOUCHSCREEN | STYLUS | BLUETOOTH_STYLUS, displayId=0, action=MOVE, actionButton=0x00000000, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, classification=NONE, edgeFlags=0x00000000, xPrecision=22.8, yPrecision=11.1, xCursorPosition=nan, yCursorPosition=nan, pointers=[0: (803.0, 1434.9)]), policyFlags=0x62000000)

日志可以看出ANR是在pid=3930,原因是因为MotionEvent在5秒前就已经发送,但是Gesture Monitor] Screenshot这个接受者根本没有响应导致,这里也打印表面原因就是Gesture Monitor] Screenshot没有响应导致的ANR,注意这里的
MotionEvent(deviceId=4, eventTime=39032316052000
这个事件的eventTime后续可以去InputDispatcher中进行追踪,看看啥时候派发的

2.2 针对这中无法得出anr结论的,anr查找到一般建议从源头出发开始查,比如inputDispatch相关的派发事件日志,这里正常情况下InputDispatcher没详细日志,因为比较频烦,所以这里需要自己手动开放一些InputDispatcher的相关日志:
————————————————

A.查看线程 和时间、原因

B .查看对应的

查看ANR时候派发的事件

MotionEvent(deviceId=4, eventTime=39032316052000
看看在InputDispatcher中是啥情况

C. 接受事件相关打印

如果有打印,那么这里大家也就很容易想到看看Gesture Monitor] Screenshot这个进程3930到底发生了什么,在这个02-18 20:08:20.276 时间点后,日志搜索后发现重大的线索:

D.关闭复现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值