案例:Input事件有焦点App无焦点窗口

案例:Input事件有焦点App无焦点窗口

案例:Android 11 上,KeyEvent 事件上报,发生有焦点App无焦点窗口,报 InputDispatching TimeOut
测试手法:反复按back、home、recent或power按键,暂停等一段事件,启动另一个应用,并没有再次发送KeyEvent事件,高概率发生InputDispatching TimeOut

分析原因

IMS:InputDispatcher的焦点设置
在这里插入图片描述
1、dispatchKeyLocked 时确定目标检测:焦点窗口focusedWindowHandle和焦点应用focusedApplicationHandle
2、有焦点App无焦点窗口,触发ANR检测
在这里插入图片描述
3、KeyEvent事件发生ANR检测,但没有再次触发KeyEvent事件
4、用户触摸另一个应用程序,pending的KeyEvent被删除,也出现聚焦窗口
5、即使此时有聚焦窗口,也发生“无焦点窗口”ANR

代码位置

在这里插入图片描述
解决方案:在上报“无聚焦窗口” ANR 之前,始终检查焦点窗口是否存在processNoFocusedWindowAnrLocked。这样,将不再依赖于发生的其他事件来确保 ANR 正常运行。

google修改

https://android.googlesource.com/platform/frameworks/native/+/265ab01bc7be5889521541a2f6ad08e2d204f10a%5E%21/#F0
在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xhBruce

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值