今天说一个老生常谈的问题,事件在view,viewgroup,activity,这三层是怎么传递的。
介绍事件的传递机制就不得不介绍几个重要的函:
其中事件拦截函数只有在viewgroup里面才有在另外两个里面是没有这个函数的。
下面开始分析事件的传递,假如说这三个都不进行事件的消费,那么事件的顺序应该是
activity的事件分发———viewgroup的事件分发————viewgroup的事件拦截——
view的事件分发——view的事件响应——viewgroup的事件响应——activity的事件响应
。
这种情况是这三个都不进行事件的消费,假如在activity的的事件响应函数里面返回了
true那么就表明进行了事件的响应,这样的话在第二次再次出发这个事件的时候就不
重新走上面的那个完整的路径了直接就会activity的事件分发——activity的事件响应了
。这个为什么呢?其实到底很简单,走一套完整的路径来确定到底是谁进行事件的消
费一旦确定了是谁来消费这个事件。第二次再触发这个事件的时候也就不用来走完整
的这一套流程了。
现在大家明白了吧,事件的传递机制也决定了Android的反应速度的没有ios的快,在
Android里面你点击了view按照用户最直观的感觉应该是,view最先扑捉事件但是
Android系统却让activity最先来扑捉事件,这样寻找到第是谁来消费事件的机制也
浪费了一点时间。具体Android为什么这么做,不太清楚,小弟还没有那么高的水平还
请大神赐教!!!!!