Android Input——InputDispatcher分发事件(六)
在上一篇中,我们详细探讨了 InputReader 如何从底层硬件获取输入事件,并通过解析和处理将这些事件传递给 InputDispatcher,最终放入 InputDispatcher 的 mInboundQueue 中并唤醒 InputDispatcher。本篇我们将深入分析 InputDispatcher 的事件分发过程,了解它是如何高效地将这些事件分发到正确的应用程序或窗口进行处理的。
一、InputDispatcher介绍
1、核心流程
- 事件轮询与唤醒:当 InputDispatcher 的 Looper 被唤醒时,它会开始一个新的循环来检查是否有待处理的事件。如果 mInboundQueue 中存在未处理的事件,则开始进行分发流程。
- 事件提取:InputDispatcher 从 mInboundQueue 中取出一个事件(如按键事件、触摸事件等),准备对其进行分发。这一步通常发生在 dispatchOnceInnerLocked() 方法内部,该方法是 InputDispatcher 处理单个事件的核心逻辑所在。
- 目标查找:对于每个事件