专栏名称: 刘望舒
腾讯云最具价值专家
目录
相关文章推荐
复利大王  ·  疑似蒋小姐中学校友出来扒皮了 ·  昨天  
复利大王  ·  某公募研究员ED? ·  昨天  
鸿洋  ·  全新导航库 Jetpack ... ·  昨天  
复利大王  ·  2024人均薪酬排行榜 ·  昨天  
复利大王  ·  三名日本女技师来北京打工被抓 ·  昨天  
51好读  ›  专栏  ›  刘望舒

Android输入系统(一)输入事件传递流程和InputManagerService的诞生

刘望舒  · 掘金  · android  · 2018-11-01 14:37

正文

请到「今天看啥」查看全文



原文链接 : Android输入系统的事件传递流程和IMS的诞生

相关文章
解析WMS系列
View体系系列

前言

很多同学可能会认为输入系统是不是和View的事件分发有些关联,确实是有些关联,只不过View事件分发只能算是输入系统事件传递的一部分。这个系列讲的输入系统主要是我们不常接触的,但还是需要去了解的那部分。

1. 输入事件传递流程的组成部分

输入系统是外界与Android设备交互的基础,仅凭输入系统是无法完成输入事件传递的,因此需要输入系统和Android系统的其他成员来共同完成事件传递。输入系统事件传递需要经过以下几个部分。

输入事件传递流程可以大致的分为三个部分,分别是输入系统部分、WMS处理部分和View处理部分。下面分别对这几个部分进行简单的介绍。

输入系统部分

输入系统部分主要又分为输入子系统和InputManagerService组成(以下简称IMS),在Android中还有一个IMS(IP Multimedia Subsystem)意为为IP多媒体子系统,不要搞混了。 Android的输入设备有很多种,比如屏幕、键盘、鼠标、游戏手柄、操纵杆等等,其中应用开发接触最多的屏幕。当输入设备可用时,Linux内核会在/dev/input中创建对应的设备节点。 用户操作这些输入设备时会产生各种事件比如按键事件、触摸事件、鼠标事件等。 输入事件所产生的原始信息会被Linux内核中的输入子系统采集,原始信息由Kernel space的驱动层一直传递到User space的设备节点。

Android提供了getevent和sendevent两个工具帮助开发者从设备节点读取输入事件和写入输入事件。

IMS所做的工作就是监听/dev/input下的所有的设备节点,当设备节点有数据时会将数据进行加工处理并找到合适的Window,将输入事件派发给它。

WMS处理部分

Android解析WindowManagerService(一)WMS的诞生 这篇文章中我讲过WMS的职责有四种,如下图所示。

WMS的职责之一就是输入系统的中转站,WMS作为Window的管理者,会配合IMS将输入事件交由合适的Window来处理。

View处理部分

View处理部分应该是大家最熟悉的了,一般情况下,输入事件最终会交由View来处理,应用开发者就可以通过一些回调方法轻松得到这个事件的封装类并对其进行处理,比如onTouchEvent(MotionEvent ev)方法。关于View体系可以查看 View体系 这一系列文章。







请到「今天看啥」查看全文