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
原创粉丝点击