Android总结之事件处理

一、Android事件处理概述

       Android提供了两种方式的事件处理:基于回调的事件处理和基于监听的事件处理,对于Android基于监听的事件处理而言,主要做法就是为Android界面组件绑定特定的事件监听器,对于Android基于回调的事件处理而言,主要做法是重写Android组件特定的回调方法或者重写Activity的回调方法,Android为绝大部分界面组件都提供了事件响应的回调方法,开发者只需重写它们即可。

       1、基于监听的事件处理

       基于监听的事件处理是一种更“面向对象”的事件处理,在事件监听的处理模型中,主要涉及三类对象:

       ①Event Source(事件源):事件发生的场所,通常是各个组件,例如按钮、窗口、菜单等。

       ②Event(事件):事件封装了界面组件上发生的特定事情,如果程序需要获取组件上发生的事情的相关信息,一般通过Event对象来获得。

       ③Event Listener(事件监听器):负责监听事件源所发生的事件,并对各种事件作出相应的响应(所谓事件监听器,就是实现了特定接口的Java类的实例)。

       当用户按下一个按钮或者单击某个菜单项时,这些动作就会激发一个相应的事件,该事件就会触发事件源上注册的事件监听器,事件监听器调用对应的事件处理器来作出相应的响应,Android的事件处理机制是一种委派式事件处理方式,事件源将整个事件处理委托给事件监听器,当该事件源发生指定的事件时,就通知所委托的事件监听器,由事件监听器来处理这个事件。

       Android对事件监听模型做了进一步的简化,如果事件源触发的事件足够简单,事件里封装的信息比较有限,那就无需封装事件对象,将事件对象传入事件监听器,但对于键盘事件、触摸屏事件等,此时程序需要获取事件发生的详细信息,例如哪个键、触摸位置等,对于这种包含更多信息的时间,Android同样会将事件封装成事件对象(XXXEvent(KeyEvent,MoveEvent等)),并将该对象作为参数传入事件处理器。

       2、基于回调的事件处理

       如果说事件监听机制是一种委托式的事件处理,那么回调机制则与之相反,对于基于回调的事件处理模型来说,事件源和事件监听器是统一的,或者说事件监听器完全消失了,当用户在GUI组件上激发某个事件时,组件自己特定的方法将会负责处理该事件,为了使用回调机制类处理GUI组件上所发生的事件,我们需要为该组件提供对应的事件处理方法,而Java又是一种静态的语言,我们无法为某个对象动态的添加方法,因此只能继承GUI组件类,并重写该类的事件处理方法来实现。 

       几乎所有基于回调的事件处理方法都有一个boolean类型的返回值,该返回值用于标识该处理方法是否能完全处理该事件,如果返回true,表明该处理方法已完全处理该事件,该事件不会被传播出去,如果返回false则相反。

       对比Android提供的两种事件处理模型,不难发现基于监听的事件处理模型具有更大的优势,Android事件处理机制保证基于监听的事件监听器会优先触发。

       3、响应系统设置的事件

       在开发Android应用中,有时候需要让应用程序随系统设置进行调整,比如判断系统的屏幕方向、判断系统方向的方向导航设备等,除此之外,有时候可能还需要让应用程序监听系统设置的更改,对系统设置的更改做出响应。

       Configuration类专门用于描述手机设备上的配置信息,这些配置信息即包括用户特定的配置项,也包括系统的动态设备配置。我们可以通过getResources().getConfiguration()获取到Configuration对象,并使用其中的方法获取到设备信息,同时,如果程序需要监听系统设置的更改,则可以考虑重写Activity的onConfigurationChanged方法,该方法是基于回调的事件处理方法,当系统设置发生更改时,该方法会被自动触发,同样的,为了让该方法被回调,我们还需要配置该Activity时指定configChanges属性,该属性可以支持mcc、mnc、locale、touchscreen、keyboard、keyboardHidden、navigation、orientation、screenLayout、uiMode、screenSize、smallestScreenSize、fontScale属性值。

        4、Handler消息传递机制

        出于性能优化考虑,Android的UI操作并不是线程安全的,这意味着如果多个线程并发操作UI组件,则可能导致线程安全问题,为了解决这个问题,Android制定了一条简单的规则,只允许UI线程修改Activity里的UI组件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值