Android Input——InputReader获取事件(四)

        在上一篇中,我们简单介绍了 Android 输入子系统以及 EventHub 如何监听和管理来自各种输入设备的事件。本篇我们将深入探讨 InputReader 组件,了解它如何从 EventHub 获取原始输入事件,并将这些事件解析为更高层次的输入事件(如按键、触摸等),以便 Android 系统进一步处理。

一、InputReader初始化

        InputReader 的主要职责就是从 EventHub 中读取原始的输入事件(RawEvent),并将其转换为标准的 InputEvent 对象(例如 KeyEvent 和 MotionEvent)。之后,这些标准化的事件会被传递给 InputDispatcher 进行分发,最终到达相应的应用程序进行处理。

        从前面初始化的介绍中,我们知道 InputReader 是在 InputManager 构造方法中被被初始化的。

1、InputManager

源码位置:/frameworks/native/services/inputflinger/InputManager.cpp

InputManager::InputManager(const sp<InputReaderPolicyInterface>& readerPolicy,
        const sp&l
### Android Input 子系统架构与组件 #### 架构概述 Android 的输入子系统负责处理来自各种硬件设备的输入事件,如触摸屏、键盘和其他传感器。该子系统通过分层结构来管理这些输入数据流,确保应用程序能够高效响应用户的交互。 #### 主要组成部分 ##### 输入驱动程序 位于内核空间中的输入驱动程序直接与物理硬件通信并收集原始输入数据。对于特定架构的支持可能包含在机器专用代码中[^2]。当检测到新的输入时,驱动会将其转换成标准化格式并通过`/dev/input/eventX`文件节点暴露给用户空间。 ##### Input Manager Service (IMS) 这是框架服务的一部分,在用户空间运行。它接收由Input Reader解析后的事件消息,并决定如何分配这些事件至相应的窗口或应用进程。此外,还承担着协调多点触控操作以及手势识别等功能。 ##### Input Dispatcher 作为IMS内部的一个模块,专门用于调度已过滤和解释过的输入事件给目标Window对象。此过程涉及复杂的优先级判断机制以保证用户体验流畅度。 ##### Input Readers 同样属于IMS范畴内的功能单元,主要职责是从底层读取经过编码的二进制形式的输入报告,并解码成为易于理解和使用的Java类表示法——即MotionEvent、KeyEvent等实例。 ```java // 示例:注册一个简单的按键监听器 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); View rootView = findViewById(android.R.id.content); rootView.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { Log.d("MainActivity", "KeyCode: " + keyCode); return false; } }); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

c小旭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值