Input 机制简介
Input 的事件是需要从屏幕(输入设备)点击开始,从硬件设备驱动到应用层,涉及到的底层的交互,其中重要的角色有
InputReader:负责从输入设备获取事件,并将该事件通知给队列,并最终通知到
InputDispatcher:负责将输入事件分发到正确的窗口上,并会处理 ANR 问题
InputManager:是 InputReader 和 InputDispatcher 的枢纽,类似 MVC 中到 Controller 作用
一、input总体流程概述
1 Kenel收到InputEvent放到EventHub里 2 InputReader从EventHub读InputEvent并且传给InputDispatcher来分发 3 WindowManagerService在app端setView的时候就创建了一对Socket连接,InputDispatcher利用这个Socket连接和app端通信。 4 app端的ViewRootImpl里面的InputEventReceiver会接到从Socket得到的InputEvent。 5 然后给第一个InputStage处理这个InputEvent,如果第一个InputStage不消费该InputEvent,就给第二个InputStage,还不消费就给第三个,直到给了ViewPostImeInputStage后,如果它可以消费的话,执行它的onProcess方法,该方法里面再经过几次调用就到了大家熟悉的dispatchTouchEvent方法。至此,app就可以处理input事件了。