当前位置: 首页 > news >正文

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

背景:

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

NO_INPUT_CHANNEL剖析

首先看看它的注释:
frameworks/base/core/java/android/view/WindowManager.java

   /*** 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
ViewRootImpl代码

WindowManagerService中addWindow代码
可以看到一旦设置了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


http://www.mrgr.cn/news/53587.html

相关文章:

  • Python无监督学习中的聚类:K均值与层次聚类实现详解
  • 【厦门大学附属第一医院(互联网医院)-注册安全分析报告-无验证方式导致安全隐患】
  • 大模型量化感知训练 LLM-QAT
  • 深度学习框架-Keras的常用内置数据集总结
  • 妇女、商业与法律(WBL)(1971-2023年)
  • 理解ADC:信噪比SNR的天花板是什么?附带介绍一下ENOB
  • C++——定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法。参加运算的两个操作数可以都是类对象,也可以一个是整数,其顺序任意。
  • 反欺诈与数字信任:保障数字经济安全的关键
  • 衡石分析平台系统分析人员手册-应用空间
  • 【微知】RDMA IB verbs中的ABI是什么?作用是什么?(application binary interface、规范、兼容)
  • PCDN 技术如何优化网络延迟(壹)
  • 机械视觉光源选型
  • 解决mac ssh端终端只有黑白颜色的问题
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-17
  • C++——有两个矩阵a和b,均为2行3列。求两个矩阵之和。重载运算符“+”,使之能用于矩阵相加。(如c=a+b)
  • 动销方案在合作伙伴场地执行,好处多多!
  • S7-1500 通过PN/PN Coupler 通信
  • Python | Leetcode Python题解之第493题翻转对
  • UniHttp 框架,请求http接口
  • 文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于AGCN-LSTM模型的海上风电场功率概率预测 》