android Input系统事件分发流程

81 篇文章 3 订阅

 最近被问到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端整体流程




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

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值