对于回调的理解

        Java中回调函数不管是Think in Java还是网上各种百科博客,都讲得很严谨很学术,我看得是云里雾里,终于今天懂点了。来分享一下,如果理解的不对还请各位大神指教,以免误人子弟。

        维基百科上是这样定义的:在计算机程序设计中,回调函数,或简称回调(Callback 即call then back 被主函数调用运算后会返回主函数),是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。

        我的理解是:

        例子:Android API给按钮(Button)加了一个监听器,监听按钮的点击事件(onClick),但点击之后应该干什么要视app程序员的需求而定,API不能决定,那怎么办呢?API很聪明,它觉得我跟app程序员做个约定,如果你要实现按钮事件的监听与处理,就必须遵循我的约定(也就是实现我的接口),这样我处理事件时就能按照你的处理方式处理了(也就是回调app程序员覆写的接口函数),处理完后将处理结果返回给API。

先写一个函数来实现按钮的点击处理。

class OnClickListenerImpl implements OnClickListener {

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			Toast.makeText(MainActivity.this, "button is clicked",
					Toast.LENGTH_SHORT).show();
		}
	}

        使用时,将我们的函数以引用的形式传给framework层(Java中对象传值就是引用传值):

/*
		 * Function:Register a callback to be invoked when this view is clicked.If this view is not clickable, it becomes clickable.
		 * Parameters:OnClickListener l:The callback that will run
		 * 函数描述:当view被点击时注册一个回调函数以供调用,如果这个view不能点击,那么这会使它变得可点击。
		 * 参数:OnClickListener接口类的对象:将运行的回调函数
		 */
		button.setOnClickListener(new OnClickListenerImpl());
        这样,当按钮的监听器监听到点击事件时,就会通过API层调用app程序员写的处理方法了(就是我们上面写的Toast所在函数)。

        也就是说,我们把实现函数写好了,以引用方式返回给调用者(API),API会根据传过来的引用来执行我们的函数,这样就实现了“相同接口、不同实现”了。所以我们经常看到网上有人这样描述“回调函数”:所谓的回调,就是程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法。现在懂了吧,程序员A一般是指API或系统,程序员B指app程序员,我们想让API执行我们指定的函数就采用回调函数机制就行了。所以维基百科上的定义也就不难理解了,他所说的底层代码就是API提供的接口,高层子程序就是我们app中的实现函数。

         

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值