Android面试题精选:讲一讲-Android-的事件分发机制

还是不能偏题,其实这样的一个面试问题,确实是一个较为普遍的问题,我相信同类型的文章,网上一搜也是比比皆是,而且简单看一下关注度就能知道有多少人倒在了这种源码类型的面试上。

一般情况下,事件列都是从用户按下(ACTION_DOWN)的那一刻产生的,不得不提到,三个非常重要的与事件相关的方法。

  • dispatchTouchEvent()
  • onTouchEvent()
  • onInterceptTouchEvent()
Activity 的事件分发机制

从英文单词中已经很明显的知道,dispatchTouchEvent() 是负责事件分发的。当点击事件产生后,事件首先会传递给当前的 Activity,这会调用 Activity 的 dispatchTouchEvent() 方法,我们来看看源码中是怎么处理的。

注意截图中,我增加了一些注释,便于我们更加方便的理解,由于我们一般产生点击事件都是 MotionEvent.ACTION_DOWN,所以一般都会调用到 onUserInteraction() 这个方法。我们不妨来看看都做了什么。

很遗憾,这个方法实现是空的,不过我们可以从注释和其他途径可以了解到,该方法主要的作用是实现屏保功能,并且当此 Activity 在栈顶的时候,触屏点击 Home、Back、Recent 键等都会触发这个方法。

再来看看第二个 if 语句,getWindow().superDispatchTouchEvent()getWindow() 明显是获取 Window,由于 Window 是一个抽象类,所以我们能拿到其子类 PhoneWindow,我们直接看看 PhoneWindows.superDispatchTouchEvent()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值