什么是回调函数

来源:互联网 发布:如何查看端口是否开放 编辑:程序博客网 时间:2024/06/05 08:31

所谓的回调函数就是:在A类中定义了一个方法,这个方法中用到了一个接口和该接口中的抽象方法,但是抽象方法没有具体的实现,需要B类去实现,B类实现该方法后,它本身不会去调用该方法,而是传递给A类,供A类去调用,这种机制就称为回调。


打比方:

1、孩子告诉妈妈:明天我早起床,早点叫我。这是主调函数A。
2、妈妈第二天,早了半个小时叫孩子。这是消息响应T。
3、孩子起床。这是回调函数B。


1 :定义一个接口

  1. public interface MyInterface {  
  2.     void sayYourName();  
  3. }  

2:主调函数的类

  1. public class MyClass {  
  2.   
  3.     public MyClass() {  
  4.         Log.e("WangJ""MyClass-constructor");         //标注构造函数  
  5.     }  
  6.   
  7.     /* 用接口类型的对象作为输入参数 */  
  8.     public void sayYourName(MyInterface myInterface){  
  9.         Log.e("WangJ""MyClass-sayYourName_start");    //标注方法开始  
  10.         myInterface.sayYourName();                      //遇到不知道具体实现的时候就用接口的抽象方法  
  11.         Log.e("WangJ""MyClass-sayYourName_finish");   //方法结束  
  12.     }  
  13. }  

3:回调函数B类

  1. public class MainActivity extends Activity {  
  2.   
  3.     @Override  
  4.     protected void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.activity_main);  
  7.   
  8.         MyClass myClass = new MyClass();  
  9.         myClass.sayYourName(new MyInterface() {                     //实现接口并作为参数传入  
  10.             @Override  
  11.             public void sayYourName() {  
  12.                 Log.e("WangJ""callBack-interface-implementor");    //具体操作实现  
  13.             }  
  14.         });  
  15.     }  
  16. }  

日志结果:

   

在B中调用A中的方法,A中方法在运行到接口中抽象方法时返回B中寻找具体实现(这就是回调),回调完成后继续执行下边未完成的步骤。


什么是回调函数 精妙比喻:回调函数还真有点像您随身带的BP机:告诉别人号码,在它有事情时Call您 
回调用于层间协作,上层将本层函数安装在下层,这个函数就是回调,而下层在一定条件下触发回调,
例如作为一个驱动,是一个底层,他在收到一个数据时,除了完成本层的处理工作外,还将进行回调,
将这个数据交给上层应用层来做进一步处理,这在分层的数据通信中很普遍。 
其实回调和API非常接近,他们的共性都是跨层调用的函数。但区别是API是低层提供给高层的调用,一
般这个函数对高层都是已知的;而回调正好相反,他是高层提供给底层的调用,对于低层他是未知的,
必须由高层进行安装,这个安装函数其实就是一个低层提供的API,安装后低层不知道这个回调的名
字,但它通过一个函数指针来保存这个回调,在需要调用时,只需引用这个函数指针和相关的参数指
针。
其实:回调就是该函数写在高层,低层通过一个函数指针保存这个函数,在某个事件的触发下,低层通
过该函数指针调用高层那个函数。

参考:

http://www.cnblogs.com/wangchenyang/archive/2011/08/16/2140744.html

http://blog.csdn.net/a_running_wolf/article/details/49359923

http://www.jb51.net/article/45348.htm

0 0
原创粉丝点击