Android 事件输入系统整体框架
16lz
2021-01-22
一、 整体框架图
1. ViewRootImpl 每个窗口都对应一个viewRoot,通过viewRoot把view 添加到WMWindowState 列表里,之后WM就可以维护每个窗口的状态。
native层上报的事件消息和刷屏会先到达ViewRoot。对于刷屏事件,ViewRoot 会对view执行layout和measure动作。对于key或者触屏事件,ViewRoot 会根据当前状态进程分发,可能发给view,也可能发给输入法等。
2. WM 管理窗口,为每个View 注册事件输入通道
3. InputManagerService 和 nativeInputManager 提供接口注册事件通过,提供接口拦截事件,ANR通知等。
4. InputEventReceiver 和 NativeInputEventReceiver 事件接收器,每个窗口对应一个。
5. InputDispatcher 事件分发器,从InputReader 接收事件,如果有WM拦截了事件则不再发给应用,否则通过channal发给当前获得焦点的窗口应用处理。
6. InputReader 通过EventHub读取事件,比发给InputDispatcher。
7. EventHub 根据不同的输入设备加载不同的配置,提供接口从事件设备节点读取事件,并调用Input Lib库对事件解析。
8. Input Libs 事件解析库,并把kernel 层的事件 keycode 转换成android层的事件 keycode。
9. 下面是整套流程图,可以从整体上看出事件是如何处理和分发的。
二、整体流程图
更多相关文章
- android-----关于事件分发机制中几点困惑测试
- 【Android应用开发技术:应用组件】Android事件处理机制
- 从零开始学android<popupwindow弹出式窗口.三十四.>
- Android View事件传播机制
- 无法向CalendarView事件添加侦听器
- AutoCompleteTextView 设置了点击事件需要点击两下解决办法
- android 模拟键盘鼠标事件(adb shell)
- Android中简单活动窗口的切换--Android
- android-弹出窗口的使用(1)