在 Android 输入系统中,InputDispatcher 的核心职责之一是将输入事件正确地传递到目标窗口。上一篇文章我们介绍到 InputDispatcher 事件分发调用到 findFocusedWindowTargetsLocked() 函数查找焦点窗口,并将焦点窗口添加到目标窗口,这里我们继续往下看。
一、获取焦点窗口
1、InputDispatcher
源码位置:/frameworks/native/services/inputflinger/dispatcher/InputDispatcher.cpp
getFocusedWindowHandleLocked
sp<InputWindowHandle> InputDispatcher::getFocusedWindowHandleLocked(int displayId) const {
// 获取焦点窗口令牌
sp<IBinder> focusedToken = mFocusResolver.getFocusedWindowToken(displayId);
// 获取窗口句柄并返回
return getWindowHandleLocked(focusedToken, displayId);
}
这里主要通过调用焦点解析器(mFocusResolver)来查找当前拥有焦点的窗口令牌,并调用 getWindowHandleLocke