我的编程空间,编程开发者的网络收藏夹
学习永远不晚

android 窗口焦点介绍

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

android 窗口焦点介绍

背景

我们经常会遇到一种Application does not hava focused windowANR异常,这种异常一般是没有焦点窗口FocusedWindow导致,且这类异常只会发生在key事件的派发,因为key事件是需要找到一个焦点窗口然后再派发,而触摸事件只需要找到当前显示的窗口即可

焦点窗口设定

在这里插入图片描述WMS只管理窗口,无法确定是否有窗口盖住当前画面
SurfaceFlinger管理显示,最贴近于用户看到的画面,可以知道可以知道是否有窗口盖住当前画面,根据真实的显示窗口设置对应的window信息给InputDispatcher

关键日志

window

在dumpsys window中查看mCurrentFocus和mFocusedApp

  mCurrentFocus=Window{f96644 u0 NotificationShade}  mFocusedApp=ActivityRecord{e9566ee u0 com.android.launcher3/.uioverrides.QuickstepLauncher} t12}

mCurrentFocus指的是当前的焦点窗口
mFocusedApp指的是当前的焦点Activity

查看有没有LAST ANR

WINDOW MANAGER LAST ANR (dumpsys window lastanr)  <no ANR has occurred since boot>

这里没有LAST ANR,如果有,mCurrentFocus会显示null

SurfaceFlinger

在dumpsys SurfaceFlinger中查看 HWC layers

Display 4619827259835644672 (active) HWC layers:--------------------------------------------------------------------------------------------------------------------------------------------------------------- Layer name           Z |  Window Type |  Comp Type |  Transform |   Disp Frame (LTRB) |          Source Crop (LTRB) |     Frame Rate (Explicit) (Seamlessness) [Focused]--------------------------------------------------------------------------------------------------------------------------------------------------------------- com.example.mysystemdialog/com.example.mysystemdialog.MainActivity#118  rel      0 |            1 |     CLIENT |          0 |    0    0 1440 2960 |    0.0    0.0 1440.0 2960.0 |                  [*]--------------------------------------------------------------------------------------------------------------------------------------------------------------- StatusBar#75  rel      0 |         2000 |     CLIENT |          0 |    0    0 1440   84 |    0.0    0.0 1440.0   84.0 |                  [ ]--------------------------------------------------------------------------------------------------------------------------------------------------------------- NavigationBar0#74  rel      0 |         2019 |     CLIENT |          0 |    0 2792 1440 2960 |    0.0    0.0 1440.0  168.0 |                  [ ]---------------------------------------------------------------------------------------------------------------------------------------------------------------

[Focused]这一列有带[*]号,则说明是焦点窗口

input

在dumpsys input中查看FocusedApplications和FocusedWindows

  FocusedApplications:    displayId=0, name='ActivityRecord{e9566ee u0 com.android.launcher3/.uioverrides.QuickstepLauncher} t12}', dispatchingTimeout=5000ms  FocusedWindows:    displayId=0, name='f96644 NotificationShade'

如果发生ANR,焦点窗口以dumpsys input为主

Input Dispatcher State at time of last ANR:ANR:Time:......Reason:......Window:......FocusedApplications:......FocusedWindows: <none>

event log

05-18 19:22:55.806   580   607 I input_focus: [Focus request f96644 NotificationShade,reason=UpdateInputWindows]05-18 19:22:55.837   580   675 I input_focus: [Focus leaving e225d94 com.android.launcher3/com.android.launcher3.uioverrides.QuickstepLauncher (server),reason=Waiting for window because NO_WINDOW]05-18 19:22:55.855   580   675 I input_focus: [Focus entering f96644 NotificationShade (server),reason=Window became focusable. Previous reason: NOT_VISIBLE]

requestentering正常情况下是一一对应,打印了entering则表示真正的焦点已经进入到对应的窗口
发生Application does not hava focused window时,一般request 有打印,我们可以通过是否有entering的打印来分析
1.entering部分有打印,代表焦点已经在input里面,但是仍然有ANR,就需要从input等方面分析
2.entering部分未打印,代表input没有被触发焦点窗口设置到input,需排查SurfaceFlinger或WMS

来源地址:https://blog.csdn.net/yimelancholy/article/details/130751737

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

android 窗口焦点介绍

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

android 窗口焦点介绍

背景 我们经常会遇到一种Application does not hava focused window的ANR异常,这种异常一般是没有焦点窗口FocusedWindow导致,且这类异常只会发生在key事件的派发,因为key事件是需要找到一
2023-08-21

如何使 messagebox 弹出后不获取窗口焦点

要使messagebox弹出后不获取窗口焦点,可以使用Win32 API中的MessageBox函数,并设置参数为MB_SYSTEMMODAL。示例代码如下:```#include int WINAPI WinMain(HINSTANCE
2023-08-08

如何使用window.onfocus和window.onblur来实现窗口焦点

如何使用window.onfocus和window.onblur来实现窗口焦点,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。当前窗口获得焦点js事件,html5发布之前我们
2023-06-07

怎么使messagebox弹出后不获取窗口焦点

要使MessageBox弹出后不获取窗口焦点,可以通过以下两种方法实现:1. 使用MessageBoxOptions参数:```csharpMessageBox.Show("Message", "Title", MessageBoxButt
2023-08-08

jQuery如何监听浏览器窗口获取焦点事件?

jQuery监听浏览器窗口获取焦点事件当浏览器窗口从非活动变为活动时,会触发窗口获取焦点事件。jQuery提供了focus()方法来侦听此事件。要侦听焦点事件,请使用focus()方法,如下所示:$(window).focus(function(){//窗口获取焦点时执行的代码});回调函数接受一个事件对象作为参数,其中包含有关焦点事件的信息。事件处理程序on()也可用于侦听焦点事件。解除事件绑定,请使用off()方法。应用示例包括:更新页面内容、启用/禁用表单元素、跟踪用户活动和显示/隐藏通知。
jQuery如何监听浏览器窗口获取焦点事件?
2024-04-02

jQuery如何监听浏览器窗口失去焦点事件?

jQuery监听浏览器窗口失去焦点事件jQuery提供了一个简洁的方法blur()来监听浏览器窗口失去焦点的事件。当窗口失去焦点(切换选项卡或应用程序)时,此事件会触发。语法:$(selector).blur(handler)selector:元素选择器handler:事件触发时执行的函数用法示例:禁用窗口失去焦点时的输入:$(window).blur(function(){$("input").attr("disabled",true);});移除事件处理程序:使用off()方法:$(selector)
jQuery如何监听浏览器窗口失去焦点事件?
2024-04-02

Android XML数据解析要点介绍

这篇文章主要为大家介绍了Android XML数据解析要点介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-17

Android中回调接口的使用介绍

MainActivity如下: 代码如下: package cn.testcallback; import android.os.Bundle; import android.widget.Toast; import android.ap
2022-06-06

android开发中ListView与Adapter使用要点介绍

1. Adapter.getView() public View getView(int position, View convertView , ViewGroup parent){...} 这个方法就是用来获得指定位置要显示的View。
2022-06-06

android popuwindow点击外部窗口不消失的实例

网上大多数都是说如何监听点击外部消失,但我遇到的问题是点击外面不让其消失,如下是我的解决方案,关键是:popupMenu.setBackgroundDrawable(null);popupMenu.setFocusable(false);p
2022-06-06

win7中常用切换窗口的4种快捷键使用介绍

平常在使用系统中,我们经常会通过一些快捷键来切换窗口,小编在这里给大家总结下,有哪些切换窗口的快捷键可以用。 1、Ait+Tab这个是大家都知道的切换的快捷方式,按照你使用的顺序切换。 2、Win+Tab效果更佳,有3D效果的切换。在不知道
2023-05-31

Android入门:多线程断点下载详细介绍

本案例在于实现文件的多线程断点下载,即文件在下载一部分中断后,可继续接着已有进度下载,并通过进度条显示进度。也就是说在文件开始下载的同时,自动创建每个线程的下载进度的本地文件,下载中断后,重新进入应用点击下载,程序检查有没有本地文件的存在,
2022-06-06

基于Android AIDL进程间通信接口使用介绍

AIDL:Android Interface Definition Language,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口。 ICP:Interprocess Communication ,内
2022-06-06

window8系统桌面分辨率拥有更高的聚焦点帮助你集中在活动窗口

杂乱的电脑桌面,可以分散和生产力有负面影响。你可以把时间关闭所有窗口,或者甚至在全屏模式下使用程序,但是这并不总是可行或不可行。另一种解决方案是调光在您的桌面上的一切,你的工作除了窗口英寸乐调光器,一个小型的Windows程序,可以帮助你集
2022-06-04

Win7关闭窗口的快捷键是什么Win7常用快捷键详细介绍

目前仍然有很多人在使用Win7系统软件,相较于其他软件,它的稳定性非常突出。那么就有客户问我Win7关闭窗口的快捷键是什么?下边小编就给各位介绍一下Win7快捷键关闭窗口和一些较常用的快捷键吧。Win7快捷键关闭窗口和常用快捷键详细介绍:1
2023-07-12

Android源码学习之单例模式应用及优点介绍

单例模式定义: Ensure a class has only one instance, and provide a global point of access to it. 动态确保某一个类只有一个实例,而且自行实例化并向整个系统提供
2022-06-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录