最近被问到android Input系统事件分发流程,虽然有看过相关源码,但是只是匆匆一瞥,没什么印象,解释了半天自己都晕了,甚是尴尬。特地重新看了一遍,整理在博客上,加深一下印象。

 网上对android的事件分发流程的讲解很多,我就不具体铺代码了,找了几张程序流程图,帮助理解。


估计大家没耐心看这么多流程图,把总结放在前面:

1 Kenel收到InputEvent放到EventHub里

2 InputReader从EventHub读InputEvent并且传给InputDispatcher来分发

3 WindowManagerService在app端setView的时候就创建了一对Socket连接,InputDispatcher利用这个Socket连接和app端通信。这里实在是有些奇怪,在android系统里,几乎所有的跨进程通信都是binder,唯独这里用了Socket,不能理解。

4 app端的ViewRootImpl里面的InputEventReceiver会接到从Socket得到的InputEvent。

5 然后给第一个InputStage处理这个InputEvent,如果第一个InputStage不消费该InputEvent,就给第二个InputStage,还不消费就给第三个,直到给了ViewPostImeInputStage后,如果它可以消费的话,执行它的onProcess方法,该方法里面再经过几次调用就到了大家熟悉的dispatchTouchEvent方法。至此,app就可以处理input事件了。


一 整体流程


二 android系统input manager初始化的过程


三 InputReader 处理inputEvent流程


四 InputDispatcher 处理流程


五 SystemServer部分整体流程


六 InputEventReceiver 处理流程


七 app端整体流程




上面的图片剽窃了高尚大神的劳动成果,希望高老板不要管我要稿费……

更多相关文章

  1. 一个方便集成的 Android(安卓)右滑返回上级 控件
  2. 【经验】android webview 后退键导致表单再次提交
  3. 5分钟实现Android最新2018友盟统计
  4. 自定义软键盘中Enter键,及其相应事件
  5. Android的事件机制
  6. Android(安卓)为点击事件添加震动效果
  7. android 简析自定义布局、布局的执行流程(http://blog.sina.com.c
  8. Android中的事件处理总结-基于监听的事件处理
  9. [置顶] Android开发-分析ViewGroup、View的事件分发机制、结合职

随机推荐

  1. 【QQ登录】Android_SDK使用说明
  2. 2018-07-23
  3. Android(安卓)----制作自己的Vendor
  4. Android 解压文件包
  5. 《Android 基础(十二)》 TextInputLayout,让
  6. android下播放器视频输出方法总结
  7. android studio 打包release出现的错误
  8. Android在外部修改了工程名文件夹名称,报
  9. Android(安卓)service与线程区别
  10. [CSDN]Android应用程序启动过程源代码分