Android学习—CallBack机制

来源:互联网 发布:nba2k周琦数据 编辑:程序博客网 时间:2024/06/04 23:32

接上一篇函数指针的总结

===============================================

android callback的学习:

先贴一段callback维基百科的解释吧,回头再写几个例子看看

<span style="font-size: 14px;">In computer programming, </span><span style="font-size:18px;"><strong>a callback is a piece of executable code that is passed as an argument to other code, which is expected to call back (execute) the argument at some convenient time.</strong></span><span style="font-size: 14px;"> The invocation may be immediate as in a synchronous callback or it might happen at later time, as in an asynchronous callback. In all cases, the intention is to specify a function or subroutine as an entity that is, depending on the language, more or less similar to a variable.</span>
百科里说明了回调函数的关键是:将一段代码作为参数传递,而这段代码将会在某个时刻被执行。这个某个时刻可以是手动调用方法,而android里大多数情况是系统会触发这个事件,比如说点击屏幕这样的操作。


这两天断断续续也看了很多网上对于callback的解释,大概有了对于callback的理解,觉得写得比较好的是下面这篇博客:

http://blog.csdn.net/very_caiing/article/details/41898439


自己也跟着callback的实例写了demo,上面文章中的最后一个实例确实比较实用,也很巧妙~

我们假设有两个角色,A和B,A申明了一个回调接口,并定义了一个规范(接口里的函数),但还不知道怎么实现,希望B告诉他怎么做。

以下是我个人的理解:,

1,A的角色就类似老师,老师给全班50个同学布置了家庭作业,这个接口就是他写的题目。

<span style="font-size:14px;">//回调接口public interface ICallBack{void lifeExec();}</span>
ps:老师给的题目很简短,就说同学们要根据自己的发挥去写lifeExec()。


2,拿到题目学生就可以去写了么,还没有,老师给的题目太大了,他还需要做个限制,他说今天题目是特别针对学生对象的,大家不要离题了。于是他给了下面这个类对象StudentObject

<span style="font-size:14px;">public class StudentObject {private ICallBack callBack;public void setCallBack(ICallBack callBack){this.callBack = callBack;}public void doSth(){this.callBack.postExec();}}</span>
这里面的setCallBack,是给学生提交自己的作业用的,学生通过setCallBack可以提交自己的作业,老师通过doSth()可以查看某个学生的作业内容。


3, 学生B开始做题目,做完提交后,在某个时间老师去查看了,学生B的作业内容才被调用并显示出来。

<span style="font-size:14px;">public static void main(String[] args) throws InterruptedException {// TODO Auto-generated method stubStudentObject obj = new StudentObject();obj.setCallBack(new ICallBack(){//something to be done this.public void postExec() {// TODO Auto-generated method stubSystem.out.println("学生B的答案");}});System.out.println("学生B把自己的作业已经提交了");//Thread.sleep(5000);System.out.println("过了一段时间,老师看到了学生B的答案...");obj.doSth();}</span>

最后的output是这样的:

<span style="font-size:14px;">学生B把自己的作业已经提交了过了一段时间,老师看到了学生B的答案...学生B的答案</span>

恩,,可能有些牵强,但是也是自己理解的一个过程。


下面是上述博客中的一个计算函数执行时间的例子,在这里copy一下,希望后面自己能将callback应用到更多的实际场景中。

普通的计算函数执行时间:

public   class  TestObject {       /**        * 一个用来被测试的方法,进行了一个比较耗时的循环        */        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();       }   }  

用了callback以后:

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();               }           });       }          }  
当然还有一个 CallBack接口,里面有一个函数execute();


好了Android的callback就先学习到这里。

1 1
原创粉丝点击