Android事件分发之前做了啥?

Android事件分发之前做了啥?

谈到Android事件分发机制问题,大家肯定都是在熟悉不过,Android体系中的常用知识,也是面试中经常被关注的问题,我也经常被问到,以前被问事件分发机制,我都是这样回答:


  1. ViewGroup中有dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent三个方法,可以分发,拦截,消费事件,而View中只有dispatchTouchEvent,onTouchEvent两个方法,不能做拦截处理。

  2. 事件分发–从父级向子级传递的,事件消费–从子级父级传递的。

  3. 然后再补一张分发流程图。挥笔画图一张,边画别说…

吧嗒吧嗒吧嗒…

Android事件分发之前做了啥?_第1张图片


好几次的时候,我自己都佩服自己,真的厉害的不行,巴拉巴拉的口水满天飞,都不带停顿的,讲一遍比一遍熟,感觉自己真TM的已经把事件分发机制研究的完全透彻了一样。

但是实际捏,我自己很了解,忽悠归忽悠,其实自己有几斤几两,自己还是非常清楚。

但是,事件分发的文章,大佬们已经写了很多了,主体讲的就是从父级子级传递,子级父级传递消费的主体部分,
小子这里写一些不一样的东西,这里主要讲主体部分之前的部分流程!


用户操作事件,先走DecorViewdispatchTouchEvent,获取callback对象,调用cb.dispatchTouchEvent方法

Android事件分发之前做了啥?_第2张图片

Activity默认实现了Window.Callback,所以就调用的是activitydispatchTouchEvent方法,然后里面再调用window.superDispatchTouchEvent

Android事件分发之前做了啥?_第3张图片
phoneWindow是Window的唯一实现类,getWindow即为phoneWindow
Android事件分发之前做了啥?_第4张图片
phoneWindow里面再调用图一的DecorView的superDispatchTouchEvent方法,然后就调用到ViewGroup的dispatchEvent分发事件了
Android事件分发之前做了啥?_第5张图片

后面的部分就是大佬们的ViewGoup-view的主体事件分发流程了,借用一张图(如果侵权就里面删掉)

Android事件分发之前做了啥?_第6张图片

你可能感兴趣的:(android)