Android学习—CallBack机制

本文介绍了Android中的Callback机制,通过一个计算函数执行时间的例子深入理解回调的使用。首先,作者引用了维基百科的解释,并推荐了一篇优秀的博客资源。接着,通过类比教师与学生的角色来说明Callback的概念:教师(A)定义接口,学生(B)实现接口并在特定时机回调。文中以StudentObject为例,展示了如何在实际场景中应用Callback。

接上一篇函数指针的总结

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

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就先学习到这里。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值