接上一篇函数指针的总结
===============================================
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.youkuaiyun.com/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 stub
StudentObject obj = new StudentObject();
obj.setCallBack(new ICallBack(){
//something to be done this.
public void postExec() {
// TODO Auto-generated method stub
System.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就先学习到这里。
本文介绍了Android中的Callback机制,通过一个计算函数执行时间的例子深入理解回调的使用。首先,作者引用了维基百科的解释,并推荐了一篇优秀的博客资源。接着,通过类比教师与学生的角色来说明Callback的概念:教师(A)定义接口,学生(B)实现接口并在特定时机回调。文中以StudentObject为例,展示了如何在实际场景中应用Callback。
1855

被折叠的 条评论
为什么被折叠?



