关于JAVA回调函数和Android事件响应

来源:互联网 发布:淘宝详情950模板代码 编辑:程序博客网 时间:2024/05/16 10:49

http://blog.csdn.net/michealmeng555/article/details/6584545


Android开发中有一段常用的代码,就是为控件添加事件响应,我想开发过的人都应该熟记于心了。

下面就一段案例代码:

mtxtPeri =(TextView)findViewById(R.id.textPeri);     

OnClickListener listener1 = new OnClickListener()

        {

           //@Override

           public void onClick(View v) {

              // TODO Auto-generated method stub

              mtxtPeri.setText("触发事件");

              }

        };

this.mtxtPeri.setOnClickListener(listener1);

 这段代码的功能很简单,就是为一个TextView控件添加一个单击的消息响应。其中OnClickListener是一个接口,在Activity类的OnCreate()函数中,声明并实现了这个接口,最后将这个接口绑定到控件上面,一旦控件被单击,那么最后这个函数就会执行,进而接口的函数就会执行,也就是被实现的OnClick()就会被执行。

 这里是使用了回调函数的原理,通过在网上查阅了一些资料,对于JAVA的回调函数,一些高手给出了一些,通过分析,和上面的代码惊人的相似。

 Kelvin的异想空间  提到这样一个回调函数的例子http://kidult.iteye.com/blog/148982

功能很简单,如果我们要测试一个类的方法的执行时间:

下面是传统方法,不做介绍。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
publicclass TestObject {</p>
/**
* 一个用来被测试的方法,进行了一个比较耗时的循环
*/
publicstatic void testMethod(){
for( inti= 0; i&lt; 100000000; i++){
 
}
}
/**
* 一个简单的测试方法执行时间的方法
*/
publicvoid testTime(){
longbegin = System.currentTimeMillis(); //测试起始时间
testMethod();//测试方法
longend = System.currentTimeMillis(); //测试结束时间
System.out.println("[use time]:" + (end - begin)); //打印使用时间
}
 
publicstatic void main(String[] args) {
TestObject test=newTestObject();
test.testTime();
}
}

他给出了一个回调函数的版本,代码是这样的。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
publicinterface CallBack {
//执行回调操作的方法
voidexecute();
}</p>
publicclass Tools {
 
/**
* 测试函数使用时间,通过定义CallBack接口的execute方法
* @param callBack
*/
publicvoid testTime(CallBack callBack) {
longbegin = System.currentTimeMillis(); //测试起始时间
callBack.execute();///进行回调操作
longend = System.currentTimeMillis(); //测试结束时间
System.out.println("[use time]:" + (end - begin)); //打印使用时间
}
 
publicstatic void main(String[] args) {
Tools tool = newTools();
tool.testTime(newCallBack(){
//定义execute方法
publicvoid execute(){
//这里可以加放一个或多个要测试运行时间的方法
TestObject.testMethod();
}
});
}
}

下面对这两段代码进行比较分析,我们可以发现相似的地方。

为了对比,故在此截图~~


加粗的两段代码是等价的,唯一的不同之处是,左边那个在使用时又定义了一个类tool。而右边的就是用的接口函数中的那个对象。另外右边的最后一句是等到单击时才会响应。左边的那个运行就会执行。

这个应该是一种通用的设计模式,后面再仔细研究,对于回调函数和Android的消息响应机制通过这个例子可以共同理解。