InputMonitor是InputManagerService和WMS之间的纽带,SystemServer.java中 startOtherServices()方法下进行初始化:
inputManager = new InputManagerService(context);
Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
traceBeginAndSlog("StartWindowManagerService");
wm = WindowManagerService.main(context, inputManager,
mFactoryTestMode != FactoryTest.FACTORY_TEST_LOW_LEVEL,
!mFirstBoot, mOnlyCore);
ServiceManager.addService(Context.WINDOW_SERVICE, wm);
ServiceManager.addService(Context.INPUT_SERVICE, inputManager);
Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
traceBeginAndSlog("StartVrManagerService");
mSystemServiceManager.startService(VrManagerService.class);
Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
mActivityManagerService.setWindowManager(wm);
inputManager.setWindowManagerCallbacks(wm.getInputMonitor());//互相关联
inputManager.start();
其中 wm.getInputMonitor()方法在WindowManagerService.java中如下:
public InputMonitor getInputMonitor() {
return mInputMonitor;
}
final InputMonitor mInputMonitor = new InputMonitor(this);
当IMS接收到相应输入事件后,会通过mWindowManagerCallbacks 来调用mInputMonitor对象方法:
return mWindowManagerCallbacks.notifyConfigurationChanged();
return mWindowManagerCallbacks.notifyLidSwitchChanged(whenNanos, lidOpen);
return mWindowManagerCallbacks.notifyCameraLensCoverSwitchChanged(whenNanos, lensCovered);
return mWindowManagerCallbacks.notifyInputChannelBroken(inputWindowHandle);
return mWindowManagerCallbacks.notifyANR(
return mWindowManagerCallbacks.interceptKeyBeforeQueueing(event, policyFlags);
return mWindowManagerCallbacks.interceptMotionBeforeQueueingNonInteractive(
return mWindowManagerCallbacks.interceptKeyBeforeDispatching(focus, event, policyFlags);
return mWindowManagerCallbacks.dispatchUnhandledKey(focus, event, policyFlags);
return mWindowManagerCallbacks.getPointerLayer();