【来自我的个人博客mengxin.tk】


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

下面就一段案例代码:

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

OnClickListener listener1 =newOnClickListener()

{

//@Override

publicvoidonClick(View v) {

//TODOAuto-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&lt; 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的消息响应机制通过这个例子可以共同理解。

更多相关文章

  1. ViewRoot/ViewRootImpl分析
  2. android Google Map获取地理位置信息的方法
  3. Android(安卓)对话框(Dialog)大全(2)
  4. android anr分析方法
  5. Activity页面状态保存 持久化
  6. Android反射基础
  7. Android(安卓)实现自定义属性 declare-styleable扩展 方法 &Ecli
  8. Android学习笔记(十二)——数据存储(SQLite数据库)
  9. android JNI入门 之helloworld

随机推荐

  1. Android(安卓)使用decodeFile方法加载手
  2. android 代码中设置字体大小
  3. 打包错误:`Error:Execution failed for ta
  4. Android(安卓)获取通讯录联系人
  5. android 强制开启 GPS
  6. 多线程实现android更新进度条
  7. android View根据自己获取焦点的情况执行
  8. Type View requires API level 14 (curre
  9. Android(安卓)- Failure delivering resu
  10. android 生成圆角和带倒影图片