【来自我的个人博客mengxin.tk】
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
|
public
class
TestObject {</p>
/**
* 一个用来被测试的方法,进行了一个比较耗时的循环
*/
public
static
void
testMethod(){
for
(
int
i=
0
; i<
100000000
; i++){
}
}
/**
* 一个简单的测试方法执行时间的方法
*/
public
void
testTime(){
long
begin = System.currentTimeMillis();
//测试起始时间
testMethod();
//测试方法
long
end = System.currentTimeMillis();
//测试结束时间
System.out.println(
"[use time]:"
+ (end - begin));
//打印使用时间
}
public
static
void
main(String[] args) {
TestObject test=
new
TestObject();
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
|
public
interface
CallBack {
//执行回调操作的方法
void
execute();
}</p>
public
class
Tools {
/**
* 测试函数使用时间,通过定义CallBack接口的execute方法
* @param callBack
*/
public
void
testTime(CallBack callBack) {
long
begin = System.currentTimeMillis();
//测试起始时间
callBack.execute();
///进行回调操作
long
end = System.currentTimeMillis();
//测试结束时间
System.out.println(
"[use time]:"
+ (end - begin));
//打印使用时间
}
public
static
void
main(String[] args) {
Tools tool =
new
Tools();
tool.testTime(
new
CallBack(){
//定义execute方法
public
void
execute(){
//这里可以加放一个或多个要测试运行时间的方法
TestObject.testMethod();
}
});
}
}
|
下面对这两段代码进行比较分析,我们可以发现相似的地方。
为了对比,故在此截图~~
加粗的两段代码是等价的,唯一的不同之处是,左边那个在使用时又定义了一个类tool。而右边的就是用的接口函数中的那个对象。另外右边的最后一句是等到单击时才会响应。左边的那个运行就会执行。
这个应该是一种通用的设计模式,后面再仔细研究,对于回调函数和Android的消息响应机制通过这个例子可以共同理解。