本文仅为了验证Input事件5S无响应会不会产生的ANR/产生ANR需要哪些条件
- 我们选择在Activity的OnCreat方法内执行Thread.sleep(6000) 等待UI显示。
- 并不会生ANR---当前系统 Android 10.0
- 依次尝试所有系统版本,直到 Android 4.4,都不会发生ANR
- 所以这里就可以判定ANR跟你主线程耗时没有直接的关系
- 再次启动Activity后,立即点击back键,发生ANR
- AMS.inputDispatchingTimedOut规定了超时5S就引爆ANR。
- 这个5S仅仅是针对按键事件,在onKeyDown执行耗时操作也是一样的效果。
- 主线程执行耗时操作超过5s造成了ANR,归根结底就是Input事件在分发。
- Input事件分发倒计时将要结束的时候,主线程还在休眠状态,没有及时去响应对应事件,所以才触发了ANR。