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

Posted xhBruce

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了案例: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

以上是关于案例:Input事件有焦点App无焦点窗口的主要内容,如果未能解决你的问题,请参考以下文章

jquery失去焦点与获取焦点事件blur() focus()

无障碍开发(十七)之京东APP一期优化案例讲解

Qt:键盘焦点

input文本框获取焦点和失去焦点事件判断

jquery获取焦点和失去焦点事件代码

窗口/舞台失去焦点时的事件