在 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