所谓的回调函数就是:在A类中定义了一个方法,这个方法中用到了一个接口和该接口中的抽象方法,但是抽象方法没有具体的实现,需要B类去实现,B类实现该方法后,它本身不会去调用该方法,而是传递给A类,供A类去调用,这种机制就称为回调。
打比方:
1、孩子告诉妈妈:明天我早起床,早点叫我。这是主调函数A。
2、妈妈第二天,早了半个小时叫孩子。这是消息响应T。
3、孩子起床。这是回调函数B。
1 :定义一个接口
- public interface MyInterface {
- void sayYourName();
- }
2:主调函数的类
- public class MyClass {
- public MyClass() {
- Log.e("WangJ", "MyClass-constructor"); //标注构造函数
- }
- /* 用接口类型的对象作为输入参数 */
- public void sayYourName(MyInterface myInterface){
- Log.e("WangJ", "MyClass-sayYourName_start"); //标注方法开始
- myInterface.sayYourName(); //遇到不知道具体实现的时候就用接口的抽象方法
- Log.e("WangJ", "MyClass-sayYourName_finish"); //方法结束
- }
- }
3:回调函数B类
- public class MainActivity extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- MyClass myClass = new MyClass();
- myClass.sayYourName(new MyInterface() { //实现接口并作为参数传入
- @Override
- public void sayYourName() {
- Log.e("WangJ", "callBack-interface-implementor"); //具体操作实现
- }
- });
- }
- }
日志结果:
在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