在上一篇中,我们详细探讨了 InputReader 如何获取和处理来自各种输入设备的原始事件。现在我们将继续深入了解 InputReader 的事件传递流程。
一、事件传递
当一轮事件处理结束后,InputReader 会调用 InputListener 的 flush() 方法。来确保所有已收集但尚未处理的事件都能被及时地发送出去,并且不会丢失任何信息。
flush() 方法的具体实现取决于具体的监听器类型。对于 QueuedInputListener 而言,它通常会将所有缓存的事件转发给下一个监听器,比如 InputDispatcher,以便这些事件能够被分发到相应的应用程序或窗口进行处理。
1、InputListener.cpp
源码位置:/frameworks/native/services/inputflinger/InputListener.cpp
flush
void QueuedInputListener::flush() {
size_t count = mArgsQueue.size();
for (size_t i = 0; i < count; i++) {
NotifyArgs* args = mArgsQueue[i];
args->notify(mInnerListener);
d