Android事件来源

在了解FrameWork层的事件分发机制之前,我们需要大概了解下Andorid上的事件是怎么来的.

Android事件来源_第1张图片

android事件获取和派发原理是通过监听设备文件,当用户在屏幕上点击滑动或者点击物理按键时,对应的设备驱动监听到事件的改变就会将对应的事件写入到设备文件中,android 监听到这些文件有变化就读取当前的事件然后派发。
android framework有两个线程负责读取和派发,它们是在初始化wms时启动的,然后一直运行,其中InputReaderThread负责读取设备文件中的事件,InputDispatcherThread线程负责派发获取到的事件.
派发事件,对于key来说会在wms中进行预处理,然后才会派发到对应的窗口上,touch事件会直接派发到对应的窗口上,android是怎么派发到客户窗口的呢?在android 2.3以后采用管道的方式,以前的版本采用binder通信.客户窗口事先会注册好管道,在客户进程通过读取管道中事件,然后进行窗口内部的派发.

AndroidFramework中的事件派发机制

Android中的事件派发机制与Windows中的消息派发机制类似都是一种典型的消息冒泡机制,在Android中消息首先会到达最外层的容器类View,如果是自己需要处理的可以进行事件拦截,反之则一层一层继续分发到其子View,当事件到达最终View后再根据最终View的事件处理的返回值来确定是否消费了该事件,如果没有消费该事件则继续将事件返回到上层View的事件处理方法中来处理该事件,依此类推.

Android中事件的分类

onTouch类型的原子级别的事件,例如ACTION_DOWN、ACTION_MOVE、ACTION_UP等事件.
onClick类型的用户行为事件,它需要多个touch事件构成,例如down与up才能构成click事件,多个move事件才能构造scoll事件.

注意:一个view可以处理move、up之类的touch事件的前提是该view已经处理了down事件.因为没有down事件,何来后面的move之类的事件呢.

你可能感兴趣的:(Android事件来源)