Android事件分发机制
目录一、Android事件分类二、InputChannel 注册三、底层读取与分发机制四、按键分发机制五、触摸事件分发机制六、ANR一、Android事件分类1.键盘输入2.触摸事件参考链接键盘输入事件 Android应用程序键盘Keyboard消息处理机制分析android 8按键事件分发机制Android8.0 按键事件处理流程二、InputChannel 注册1.InputReader 循环从 /dev/input/下的硬件节点中读信息 InputDispatcher 分发消息2.ViewRootImpl.setView 中会创建InputChannel 来监听输入事件InputManager.setInputWindows 设置当前获取焦点的WindowWindowManagerService.addWindow中通过InputChannel.openInputChannelPair创建一对输入通道其中一个位于WindowManagerServiceserver端中另外一个通过outInputChannel参数返回到应用程序中client端。InputManager.registerInputChannel 注册InputChannel将server端注册到InputManager最终通过InputDispatcher.registerInputChannel实现注册。2.1 InputReader 为啥不堵塞线程Epoll (I/O 多路复用)无事件时Linux 内核会将该线程挂起阻塞让出 CPU 时间片多线程解耦InputReader负责读取事件InputDispatcher 负责分发WakeFds唤醒机制在需要主动唤醒InputReader的场景下当需要中断当前的epoll_wait()阻塞状态时系统会向wakeFds写入数据epoll监听到该文件描述符有活动从而强制唤醒线程而不必死等外部输入。三、底层读取与分发机制按键与触摸底层逻辑大致相同仅少数地方有说差别。1. InputReader.pollOnce2. EventHub.getEvent3. InputReader.process4. InputReader.consumeEvent5. InputDevice.process6. KeyboardInputMapper.process7. KeyboardInputMapper.processKey8.InputDispatcher.notifyKey--Policy-interceptKeyBeforeQueueing(可供PhoneWindowManager去处理HOME键等特殊按键)--InputDispatcher.dispatchKeyLocked--dispatchEventToCurrentInputTargetsLockedViewRootImpl.enqueueInputEvent--doProcessInputEvents--deliverInputEvent--stage.deliver--apply(NativePreImeInputStage其是由ViewPreImeInputStageImeInputStageEarlyPostImeInputStageNativePostImeInputStageViewPostImeInputStageSyntheticInputStage作为嵌套参数构成的所以调用NativePreImeInputStage的deliver(q)会依次调用到每个InputState的子类的 onProcess()方法)---主要是ViewPostImeInputStage.onProcess四、按键分发机制ViewPostImeInputStage.processKeyEvent这里区分key或触摸事件--mView(DecorView).dispatchKeyEvent--Activity.dispatchKeyEvent--PhoneWindow.dispatchKeyEvent--ViewGroup.dispatchKeyEvent--View.dispatchKeyEvent五、触摸事件分发机制ViewRootImpl.ViewPostImeInputStage.processPointerEvent--deliverPointerEvent--mView.dispatchPointerEvent(该View是Decor.View)--PhoneWindow.dispatchTouchEvent--Activity.dispatchTouchEvent--ViewGroup.dispatchTouchEvent--onInterceptTouchEvent--onTouchEvent。注意事项down事件被一个view拦截后后面的move、up也会被该View处理 。onTouchListener 中的onTouch 优先级高于onTouchEvent, 倘若onTouchListener中的onTouch方法返回trueonTouchEvent会收不到消息。执行顺序onTouch, onTouchEvent, onClick。onclick 依赖于onTouchEvent.六、ANRANR学习总结

相关新闻

从创意到实现:基于ESP32与WS2812B打造光影涟漪智能时钟

从创意到实现:基于ESP32与WS2812B打造光影涟漪智能时钟

1. 项目概述:一个“有趣”的时钟,远不止看时间“Interesting clock”——这个标题听起来简单,甚至有点模糊,但它背后所指向的可能性,恰恰是创客和硬件爱好者最着迷的领域。它不是一个告诉你“现在是下午3点15分”的普通…

2026/6/24 6:43:05阅读更多 →
Poketwo-Autocatcher安全使用指南:避免Discord账号封禁的5个关键技巧

Poketwo-Autocatcher安全使用指南:避免Discord账号封禁的5个关键技巧

Poketwo-Autocatcher安全使用指南:避免Discord账号封禁的5个关键技巧 【免费下载链接】Poketwo-Autocatcher Poketwo Autocatcher for FREE to stop those premium selling developers for sh*t 项目地址: https://gitcode.com/gh_mirrors/pok/Poketwo-Autocatche…

2026/6/24 6:43:05阅读更多 →
前端开发中用到过的工具

前端开发中用到过的工具

1.前言本文是记录本人在前端开发中遇到过的工具,会不断更新;以及对于npm安装工具方式的理解。2.npm安装工具方式理解简单的拿normalize.css这个工具来举例,以下都是安装normalize.css这个工具的方式按照简写分类,同类安装方式效果…

2026/6/24 6:43:05阅读更多 →
大一下学期C++期末考试复试指南

大一下学期C++期末考试复试指南

🎯 复试概述与准备策略 1.1 复试考察重点 大一下学期C复试通常会更加注重实践能力和综合应用能力的考察,主要包括: 核心语法深入考察:类与对象、继承与多态、模板等 算法与数据结构:常见算法的C实现 程序调试能力&…

2026/6/24 7:58:13阅读更多 →
技术部署的标准化流程与环境管理

技术部署的标准化流程与环境管理

技术部署的标准化流程与环境管理 在数字化转型的浪潮中,技术部署的标准化流程与环境管理成为企业高效运营的核心保障。无论是软件开发、系统升级还是基础设施搭建,标准化流程能够减少人为错误,提升效率;而科学的环境管理则确保技…

2026/6/24 7:58:13阅读更多 →
数据标注工具与平台选择

数据标注工具与平台选择

数据标注工具与平台选择指南 在人工智能和机器学习领域,高质量的数据标注是模型训练的基础。无论是图像分类、语音识别还是自然语言处理,都需要精准的标注数据来提升算法性能。面对市场上众多的数据标注工具与平台,如何选择最适合的方案成为…

2026/6/24 7:58:13阅读更多 →
劳动力规划:基于业务发展的人力需求预测

劳动力规划:基于业务发展的人力需求预测

劳动力规划:基于业务发展的人力需求预测 在快速变化的商业环境中,企业如何确保人力资源与业务发展同步?劳动力规划的核心在于通过科学预测,提前布局人力需求,避免人才短缺或冗余。随着数字化转型和市场竞争加剧&#…

2026/6/24 7:58:13阅读更多 →
Python简易网页爬虫|requests+BeautifulSoup实战

Python简易网页爬虫|requests+BeautifulSoup实战

博客导语爬虫是Python最热门实战方向,本项目带你从零实现简易静态网页爬虫,基于 requests 请求库 BeautifulSoup解析库,实现网页数据抓取、标签解析、文本提取,掌握爬虫核心流程,适合新手入门爬虫领域。一、技术栈与环…

2026/6/24 7:58:13阅读更多 →
Chebfun:基于MATLAB的数值计算革命,让函数成为一等公民

Chebfun:基于MATLAB的数值计算革命,让函数成为一等公民

1. 项目概述:一次与数值计算革命者的对话最近,我花了些时间深入研究了Chebfun这个项目,并回顾了其创始人Nick Trefethen教授的一些访谈和演讲。这让我感触颇深。对于很多从事科学计算、应用数学或者工程仿真的朋友来说,MATLAB是绕…

2026/6/24 7:53:13阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/24 7:33:03阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/24 2:12:09阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/24 7:37:00阅读更多 →
TaskJuggler脚本编程入门:用代码实现自动化项目管理

TaskJuggler脚本编程入门:用代码实现自动化项目管理

TaskJuggler脚本编程入门:用代码实现自动化项目管理 【免费下载链接】TaskJuggler TaskJuggler - Project Management beyond Gantt chart drawing 项目地址: https://gitcode.com/gh_mirrors/ta/TaskJuggler TaskJuggler是一款强大的开源项目管理工具&#…

2026/6/24 0:02:41阅读更多 →
终极教程:使用angular-mobile-nav实现流畅的移动页面过渡效果

终极教程:使用angular-mobile-nav实现流畅的移动页面过渡效果

终极教程:使用angular-mobile-nav实现流畅的移动页面过渡效果 【免费下载链接】angular-mobile-nav An angular navigation service for mobile applications 项目地址: https://gitcode.com/gh_mirrors/an/angular-mobile-nav angular-mobile-nav是一款专为…

2026/6/24 0:02:41阅读更多 →
Wan2.1-Fun-V1.1-1.3B-InP Web UI使用教程:无需代码的AI视频创作

Wan2.1-Fun-V1.1-1.3B-InP Web UI使用教程:无需代码的AI视频创作

Wan2.1-Fun-V1.1-1.3B-InP Web UI使用教程:无需代码的AI视频创作 【免费下载链接】Wan2.1-Fun-V1.1-1.3B-InP 项目地址: https://ai.gitcode.com/hf_mirrors/PAI/Wan2.1-Fun-V1.1-1.3B-InP Wan2.1-Fun-V1.1-1.3B-InP是一款强大的AI视频创作工具,…

2026/6/24 0:02:41阅读更多 →