主线程执行耗时操作Thread.sleep(6000)真的会发生ANR吗

774 阅读1分钟

本文仅为了验证Input事件5S无响应会不会产生的ANR/产生ANR需要哪些条件

  1. 我们选择在ActivityOnCreat方法内执行Thread.sleep(6000) 等待UI显示。
  • 并不会生ANR---当前系统 Android 10.0
  • 依次尝试所有系统版本,直到 Android 4.4,都不会发生ANR
  • 所以这里就可以判定ANR跟你主线程耗时没有直接的关系

  1. 再次启动Activity后,立即点击back键,发生ANR
  • AMS.inputDispatchingTimedOut规定了超时5S就引爆ANR。
  • 这个5S仅仅是针对按键事件,在onKeyDown执行耗时操作也是一样的效果。
  • 主线程执行耗时操作超过5s造成了ANR,归根结底就是Input事件在分发。
  • Input事件分发倒计时将要结束的时候,主线程还在休眠状态,没有及时去响应对应事件,所以才触发了ANR。