Android InputMonitor
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();
更多相关文章
- Android小项目之欢迎滑动页面(最简洁方法)
- Android五种隐藏状态栏和标题栏的方法
- The import com.google cannot be resolved解决方法
- 在Android中解析ls 命令得到目录列表的方法
- Android统计EditText的字母数字以及汉字的统计方法