理解Android事件处理机制

Android的事件处理机制分为两大类:基于监听器和基于回调

1、基于监听器的事件处理

这种处理方式和Java的GUI组件监听器的几乎一样,是一种委托式的处理办法。即如果View组件(事件源)被单击或者长按(事件)后,系统将这个单击事件委托给特定对象(监听器)处理,特定对象可以是Listener对象也可以是组件指定的事件处理方法。这里涉及到三个成员:事件源,事件和监听器。其中监听器是核心,它包含了事件的处理的实现。

下面是一个简单的Button监听器,采用匿名内部类的实现形式。界面布局文件只是线性布局文件下的按钮,比较简单,就不给出了。

  

 1 public class TestActivity extends Activity {
 2 
 3     
 4     @Override
 5     protected void onCreate(Bundle savedInstanceState) {
 6         super.onCreate(savedInstanceState);
 7         setContentView(R.layout.main);
 8         //获取Button组件
 9         Button btn=(Button) findViewById(R.id.btn);
10         //为该组件设置监听器
11         btn.setOnClickListener(new OnClickListener(){
12             
13             //重载事件处理方法
14             @Override
15             public void onClick(View v) {
16                 // TODO Auto-generated method stub
17                 //一个简单的提示文本
18                 Toast.makeText(TestActivity.this,
19                         "按钮被单击了",
20                         Toast.LENGTH_SHORT).show();
21             }
22             
23         });
24     }
25 }

可以看出,该处理模型的编程步骤大体分为三步:

一、获取组件findViewById,即事件源;

二、编写监听器类,该类要实现一个XxxListener接口;

三、调用事件源的setXxxListener方法给组件注册监听器。

 

2、基于回调的事件处理

要理解基于回调的事件处理,首先要明白什么是回调。

回调(Callback 即call then back 被主函数调用运算后会返回主函数),是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。(FROM 维基百科)

C++中的函数回调是通过指针实现的,即传入一个函数指针;而在Java中是通过接口或内部类实现的

关于Java回调机制的理解,可以参考这份很不错的文章http://hellosure.iteye.com/blog/1130176

在回调机制中,如果你在界面布局文件里定义了一个组件,这个时候系统认为你注册了一个回调,当这个组件被点击或者被长按时,就会触发回调事件,系统会调用相应的回调方法,比如boolean onKeyDown(int keyCode,KeyEvent event),当然你也可以通过重载来自定义该回调方法。

下面是一个例子

 1 public class MyButton extends button
 2 {
 3     public MyButton(Context context,AttributeSet set){
 4         super(context,set);
 5     }
 6     //自定义回调方法
 7     @Override
 8     public boolean onKeyDown(int keyCode,KeyEvent event){
 9         super.onKeyDown(keyCode,event);
10         return true;
11     }
12 }

 

实际上,基于监听器的事件处理也用到了回调函数。

3、两种方式的区别

在事件传播顺序上是监听器->回调方法->Activity,因此可以知道Android的处理机制是保证事件监听器被优先触发。同时,采用事件监听的方式使得事件源与事件监听器的分离,具有更好的可维护性,在处理特殊业务逻辑上有明显优势;而基于回调的方式由于将事件源与监听器统一,更适合处理那些通用的、业务逻辑固定的事件。

理解Android事件处理机制,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。