在input子系统中,有两个主要角色,reader和dispatcher。前者通过EventHub读取input事件,然后将读取到的事件封装成rawevent放到queue中,而后者则是从该queue中拿rawevent并进行消费,对该事件进行分发,决定是否将该事件传递给应用。
InputReader和InputDispatcher是两个线程,先看看这两个家伙怎么启动的。然后再分别看是如何分工协作的。
IMS初始化
Android中用来处理输入相关的服务是InputManagerService,该服务在Android系统启动的过程中被SysetemService启动,具体启动位置在startOtherServices中:
//frameworks/base/services/java/com/android/server/SystemServer.java
private void startOtherServices() {
…
InputManagerService inputManager = null;
…
traceBeginAndSlog(“StartInputManagerService”);
inputManager = new InputManagerService(context);
traceEnd();
…
traceBeginAndSlog(“StartInputManager”);
inputManager.setWindowManagerCallbacks(wm.getInputManagerCallback());
inputManager.start();
traceEnd();
…
}
这里只列出了InputManagerService相关的,在startOtherServ