Android InputMonitor

2135 ワード

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()メソッドWindowManagerServices.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();