Android的事件处理1
来源:互联网 发布:韩顺平php入门到精通 编辑:程序博客网 时间:2024/06/09 17:14
先跳过UI界面编程,因为这个主要是记忆和认知,好的界面慢慢写总可以写出来。
以后再写程序的过程中遇到问题或者有意思的地方在写出来。
Android事件处理概述
不管是桌面应用还是手机应用,面对最多就是用户,经常需要处理的就是用户动作。也就是需要为用户动作提供响应,这种为用户动作提供响应的机制就是事件处理。
Android提供了两套事件处理机制:
- 基于监听的事件处理
- 基于回调的事件处理
对于Android基于监听的事件处理而言,主要的做法就是为Android界面组件绑定特定的事件监听器。
对于Android基于回调的事件处理而言,主要的做法就是重写Android组件的回调方法,或重写Activity的回调方法.Android大部分组件都提供了事件响应的回调方法,开发者只要重写他们即可。
基于监听的事件处理
监听的处理模型
- Event Source(事件源):事件发生的场所,通常就是各个组件。
- Event(事件):事件封装了界面组件上发生的特定事情,通常就是一次用户界面。
- Event Listener(事件监听器):负责监听事件源所发生的事件,并对各种事件做出相应的响应。
事件处理流程示意图
基于监听的事件处理模型的编程步骤如下:
1.获得普通界面组件(事件源),也就是被监听的对象。
2.实现事件监听器类,该监听器类是一个特殊的Java类,必须实现一个XxxListener接口。
3.调用事件源的setXxxListener方法将事件监听器对象注册给普通组件。
规则三步:事件源,事件监听器,事件监听器注册。
所谓事件监听器,其实就是实现了特定接口的Java类的实例。
在程序中实现事件监听器,通常有如下的方法:
- 内部类形式:将事件监听器类定义成当前类的内部类。
- 外部类形式:将事件监听器类定义成一个外部类。
- Activity本身作为事件监听器类:让Activity本身实现监听器接口,并实现事件处理方法。
- 匿名内部类形式:使用匿名内部类创建时间监听器对象。
还有一种方式很不常用,直接绑定到标签上。
基于回调的事件处理
对于基于回调的事件处理模型来说,事件源与事件监听器是统一的。
为了使用回调机制类处理GUI组件上所发生的事件,我们需要为该组件提供对应的事件处理方法,重写改类的事件处理方法来实现。
基于回调事件的事件传播
几乎所有的处理事件的回调方法都有一个Boolean类型的返回值,该返回值用于标识该处理方法是否能完成处理事件。
- 如果处理事件的回调方法返回true,表明该处理方法已完全处理该事件,该事件不是传播出去。
- 如果处理事件的回调方法返回false,表明该处理方法并未完成处理事件,该事件会传播出去。
对于基于回调事件的传播而言,某组件上所发生的事情不仅会激发该组件上的回调事件,也会激发该组件所在的Activity的回调方法。
顺序:Android系统最先出发的应该是该按键上绑定的事件监听器,然后才出发该组件提供的事件回调方法,最后还会传播到该组件所在的Activity中。
响应系统设置的事件
Configuration类专门用于描述手机设备上的配置信息,这些配置信息既包括用户特定的配置信息,也包括系统的动态设备信息。
获取Configuration对象:Configuration cfg = getResources(). getConfiguration();
重写onConfigurationChanged方法响应系统设置更改。
Handler消息传递机制
出于性能优化考虑,Android的UI操作并不是线程安全的,这就意味着如果有多个线程并发操作UI组件,则可能导致线程安全问题。所以Android制定了一条简单的规则:只允许在UI线程修改Activity里的UI组件。
UI线程也被叫做主线程。
这时候就要Handler传递机制来实现该功能。
Handler类:
该类主要的两个作用:在新线程中发送消息,在主线程中获取、处理消息。
为了更好的理解Handler的工作原理,先介绍几个与Handler一起工作的组件。
- Message:Handler接收和处理的消息对象。
- Looper:每个线程只能拥有一个Looper。它的loop方法负责读取MessageQueue中的消息,读到信息之后就把消息交给发送该消息的Handler进行处理。
- MessageQueue:消息队列,它采用先进先出的方式来管理Message。程序创建Looper对象时,会在它的构造器中创建MessageQueue对象。
0 0
- Android的事件处理1
- Android的事件处理
- Android的事件处理
- Android的事件处理
- android的事件处理
- Android的事件处理
- Android事件的处理
- Android 的事件处理
- Android的事件处理
- Android的事件处理
- Android的键盘事件处理
- Android的键盘事件处理
- Android运动事件的处理
- Android的事件处理模式
- android的UI事件处理
- android中事件的处理
- android的触摸事件处理
- Android事件的分派处理
- 在Action中获取文件的路径,读写文件
- DLL注入技术
- 停止Eclipse LogCat的自动滚动
- 如何使用android系统自带资源
- 简易手电筒实现
- Android的事件处理1
- iClap是什么,能解决什么问题?
- 运行时编程block
- MySql大文件插入错误
- 《王保明老师----Linux开发学习笔记》------讲08:进程 -----多进程下的文件描述符
- 不同内核浏览器的差异以及浏览器渲染简介
- 每天一个linux命令(1):wget命令
- Linux目录规范和含义(整理)
- 字典树java版本