Android事件来源
2016-08-23 20:26
225 查看
在了解FrameWork层的事件分发机制之前,我们需要大概了解下Andorid上的事件是怎么来的.
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事件获取和派发原理是通过监听设备文件,当用户在屏幕上点击滑动或者点击物理按键时,对应的设备驱动监听到事件的改变就会将对应的事件写入到设备文件中,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之类的事件呢.
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories