什么是回调方法?
回调只是个概念,就是把你的接口对应的实现类的一个实例当成一个参数传递给一个函数调用,那个函数处理过程中会调用你的这个接口中的方法。
为什么称回调方法?
因为正常调用方式是从高层调用低层而事件处理时回到高层来调用用户实现的方法。所以叫回调方法。
为什么要用回调方法?
有些库却要求应用先给它一个方法,好在合适的时候调用,以完成目标任务,这个被传入的,后又被调用的方法称回调方法。
也有人说系统基本的框架给你实现具体的实现方式由不同的用户来完成时。用户间的需求不是固定的。
回调方法的具体流程是什么?
1.登记:set回调方法。A->B
2.调用:call回调方法。B->A (触发事件)
3.响应: implements回调方法。A->B
例:
接口类
public interface OnClickListener { public void OnClick(Button b); }
系统类
public class Button { OnClickListener listener; public void click() { listener.OnClick(this); } public void setOnClickListener(OnClickListener listener) { this.listener = listener; } }
应用类(包含实现接口)
public class Activity { public Activity() { } public static void main(String[] args) { Button button = new Button(); button.setOnClickListener(new OnClickListener(){ @Override public void OnClick(Button b) { System.out.println("clicked"); } }); } }
1.登记:通过 button.setOnClickListener()方法首先去等级实现类。
2.调用:通过Button类中click()调用(此方法在用户点击对应一个Button控件时会触发由系统向上调用最终调用Button类中的click()方法)
3.响应:通过new OnClickListener()类中OnClick方法的实现告知系统做什么操作(System.out.println("clicked");)
TIP:
通过类之间的关系分析时。
Activity中的OnClickListener是接口OnClickListener的是实现类。
Button与接口OnClickListener是聚合的关系。
Button的click方法依赖于Activity中的OnClickListener的实现类
便于理解找到了一个不错的例子:
我理解的接口回调就是,我这个类实现了一个接口里的方法doSomething,
然后注册到你这里,然后我就去做别的事情去了,你在某个触发的时机回头来调用我doSomething的方法。
好比,我给你打电话问某个难题,你电话里想不出来,于是说等想到了再回我电话。