android 窗口焦点介绍

这篇具有很好参考价值的文章主要介绍了android 窗口焦点介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

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

焦点窗口设定

android window焦点,Android,Android Framework从入门到入土,androidWMS只管理窗口,无法确定是否有窗口盖住当前画面
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

总结

分析方法

  1. 确认焦点所在的窗口

    • 在Event.log中找input_focus
    • 在dumpsys SurfaceFlinger中查看 HWC layers
    • 在dumpsys window中查看mCurrentFocus和mFocusedApp
    • 在dumpsys input中查看FocusedApplications和FocusedWindows
  2. 对比正异常窗口焦点是否在同一个窗口
    对比正异常log或者dump信息

  3. 分析事件是否有正常派发
    假如有正常派发在看看下面的步骤

  4. 对比应用View树的绘制
    adb shell dumpsys activity -v top > top.txt
    焦点且事件派发正常,但是有可能点击View没有反应,没有点击到正确View上,或者有透明窗口,这时就要看看正常和异常的View区别在哪,看起是否有不同点

  5. 寻找其他异常点
    比如一些异常log文章来源地址https://www.toymoban.com/news/detail-620633.html

到了这里,关于android 窗口焦点介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • android音频焦点问题

    确保在清单文件中声明相应的权限 androidManifest配置静态广播 示例代码 1.AUDIOFOCUS_GAIN:当应用需要长时间或持续性地使用音频时请求的焦点类型。例如,在播放音乐或进行语音通话时需要此类型的焦点。请求该类型的应用会打断其他所有应用的音频播放,除非它们请求的焦点

    2024年01月17日
    浏览(59)
  • Android 监听音频焦点变化

    在 Android 中,监听音频焦点变化意味着您可以获得关于音频焦点状态的通知,并针对焦点变化执行相应的操作。音频焦点是指哪个应用程序或组件有权播放音频的能力。 通过监听音频焦点变化,您可以根据不同的焦点状态进行适当的音频处理,以提供更好的用户体验和避免音

    2024年04月26日
    浏览(41)
  • Android 音频焦点管理

    前言 前面写过一篇类似的文章,没写完,今天再详细描述一下。 Android音频焦点申请处理 音频焦点管理的意义 两个或两个以上的 Android 应用可同时向同一输出流播放音频。系统会将所有音频流混合在一起。虽然这是一项出色的技术,但却会给用户带来很大的困扰。为了避免

    2024年01月25日
    浏览(49)
  • Android EditText 获取/失去焦点

    项目的需求中,又一个4位数的验证码界面,小弟才疏学浅,只想到了用 线性布局里面放四个EditText 。 需求需要输入内容后,自动跳到下一个位置聚焦,删除指定位置后,自动跳到上一个位置聚焦,由于聚焦/非聚焦UI展示得都不同,所以每个editText都会频繁的设置焦点变化。

    2024年02月03日
    浏览(45)
  • 【Android Audio Focus 音频焦点】

    Android 中的音频焦点(Audio Focus)是一种机制,用于管理应用程序之间的音频资源竞争。当多个应用程序同时请求使用音频设备时,通过音频焦点机制可以确保最终用户的体验不受影响。 两个或两个以上的 Android 应用可同时向同一输出流播放音频。系统会将所有音频流混合在

    2024年02月03日
    浏览(47)
  • 实测Android音频的焦点获取和归还

    最近老板想在产品中的短视频后者直播播放的时候对于手机中的音乐播放器进行暂停播放,并且退出视频播放后手机的音乐播放器还能继续播放之前的音乐。 先试试微信,emmm,确实可以。 Android官网:管理音频焦点 在即将开始播放之前调用 requestAudioFocus() ,并验证调用是否

    2023年04月09日
    浏览(49)
  • Android TV屏 开发、RecyclerView焦点处理等

      TV屏使用遥控器控制,通过焦点操作界面,就跟电视投屏类似 一共两个核心,焦点的处理,按键的监听处理 按键原生提供了 onKeyDown 来监听,通过不同的 keyCode 区分不同的按键 一般如果没有遥控器,可以通过电脑键盘测试,使用投屏软件投屏后,对键盘按键效果跟遥控器类

    2024年02月10日
    浏览(52)
  • [免费专栏] Android安全之APK逆向入门介绍

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 转移发布平台通知:将不再在CSDN博客发布新文章,敬请移步知识星球 感谢大家一直以来对我CSDN博客的关注和支持,但

    2023年04月08日
    浏览(52)
  • Android/Linux 子系统Graphics图形栈入门普法介绍

      由于工作原因,最近在公司做了一个关于Android/Linux 子系统Graphics图形栈入门相关知识的培训介绍,个人感觉对于想要了解入门这块的朋友还是有一定帮助的。由于博客不能直接放入ppt,这里我就将相关的ppt转换成可以博客展示的发表出来,希望能帮助到对这一块感兴趣的

    2024年01月17日
    浏览(42)
  • Aibote python 版本最全的介绍文档,支持 web windows 和 Android

    教程中仅演示部分 Api,更多 Api 请自行探索,所有 Api 均包含详细的参数要求和返回值,请自行查看。 教程中仅演示部分 Api,更多 Api 请自行探索,所有 Api 均包含详细的参数要求和返回值,请自行查看。 教程中仅演示部分 Api,更多 Api 请自行探索,所有 Api 均包含详细的参

    2024年02月07日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包