安卓窗口wms/input小知识NO_INPUT_CHANNEL剖析

背景:

经常在学员的vip技术群里经常有很多学员会提问一些不太常见的窗口和input的相关的问题,虽然不太常见,但确实是工作中会遇到的一些问题,所以马哥有必要进行一下记录这些窗口技术知识点。

具体分享技术点:

input中的NO_INPUT_CHANNEL剖析情况

NO_INPUT_CHANNEL剖析

首先看看它的注释:

frameworks/base/core/java/android/view/WindowManager.java

cpp 复制代码
   /**
         * Does not construct an input channel for this window.  The channel will therefore
         * be incapable of receiving input.
         *
         * @hide
         */
        public static final int INPUT_FEATURE_NO_INPUT_CHANNEL = 1 << 0;

明显注释可以看出,针对window不会构造对应的input channel,这样这个channel就不可能可以接受事件。

简单说就是一旦window有了这个INPUT_FEATURE_NO_INPUT_CHANNEL标识,那么就不会和正常window一样为它创建对应的inputchannel具体也可以看如下代码:

frameworks/base/core/java/android/view/ViewRootImpl.java

可以看到一旦设置了INPUT_FEATURE_NO_INPUT_CHANNEL就不会再创建对应的InputChannel。

那么有啥使用这个NO_INPUT_CHANNEL场景呢?

使用场景:

一些窗口完全不需要接收任何事件,就可以不需要有这个InputChannel,比如代码中比较常见的就是这个Snapshot窗口,这个主要是在app在后台后,从桌面重新回到前台就会有这样一个截图窗口显示,主要是为了点击后立即有显示效果的一种优化,和冷启动的Splash一样道理。

抓取对应winscope也可以看出:

Snapshot对应sf图层也显示InputChannel没有设置

通过dumpsys input看看还有有哪些是经典的NO_INPUT_CHANNEL情况
比如ActivityRecordInputSink这个图层也是不需要接受任何触摸事件来自己使用,只是作为一个遮盖而已。

总结:

NO_INPUT_CHANNEL主要给一些窗口完全不需要消费任何输入事件的情况,经典使用该flag窗口有SnapshotStatingWindow,ActivityRecordInputSink等。

更多framework详细代码和资料参考如下链接

投屏专题部分:

https://mp.weixin.qq.com/s/IGm6VHMiAOPejC_H3N_SNg

hal+perfetto+surfaceflinger

https://mp.weixin.qq.com/s/LbVLnu1udqExHVKxd74ILg

其他课程七件套专题:

点击这里
https://mp.weixin.qq.com/s/Qv8zjgQ0CkalKmvi8tMGaw

视频试看:
https://www.bilibili.com/video/BV1wc41117L4/

经常在学员的vip技术群里经常有很多学员会提问一些不太常见的窗口和input的相关的问题,虽然不太常见,但确实是工作中会遇到的一些问题,所以马哥有必要进行一下记录这些窗口技术知识点。

https://blog.csdn.net/zhimokf/article/details/137958615

更多framework假威风耗:androidframework007

相关推荐
拭心1 小时前
Google 提供的 Android 端上大模型组件:MediaPipe LLM 介绍
android
带电的小王4 小时前
WhisperKit: Android 端测试 Whisper -- Android手机(Qualcomm GPU)部署音频大模型
android·智能手机·whisper·qualcomm
梦想平凡4 小时前
PHP 微信棋牌开发全解析:高级教程
android·数据库·oracle
元争栈道4 小时前
webview和H5来实现的android短视频(短剧)音视频播放依赖控件
android·音视频
阿甘知识库5 小时前
宝塔面板跨服务器数据同步教程:双机备份零停机
android·运维·服务器·备份·同步·宝塔面板·建站
元争栈道6 小时前
webview+H5来实现的android短视频(短剧)音视频播放依赖控件资源
android·音视频
MuYe6 小时前
Android Hook - 动态加载so库
android
居居飒7 小时前
Android学习(四)-Kotlin编程语言-for循环
android·学习·kotlin
Henry_He10 小时前
桌面列表小部件不能点击的问题分析
android
工程师老罗10 小时前
Android笔试面试题AI答之Android基础(1)
android