回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
回调机制在Android框架中的使用
这里有几个例子:
1、在Activity中定义了很多生命周期的不同状态要调用的方法,这些方法都是空实现,系统框架要调用,用户也要调用来实现。
实例(对于Android界面上Button点击事件监听的模拟):
a.定义接口
public interface OnClickListener { public void OnClick(Button b); }
b. 定义Button
public class Button { OnClickListener listener; public void click() { listener.OnClick(this); } public void setOnClickListener(OnClickListener listener) { this.listener = listener; } }
c. 将接口对象OnClickListener 赋给 Button的接口成员
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"); } }); button.click(); //user click,System call button.click(); } }
2、在Activity中定义了很多生命周期的不同状态要调用的方法,这些方法都是空实现,系统框架要调用,用户也要调用来实现。
实例(对于Android界面上Activity的模拟):
a.定义接口
public interface Activity{ public void onCreate(); ..... public void onDestory(); }
b. Activity接口的实现类MyActivity
//定义一个类实现Activity接口
public calss MyActivity implements Activity{ @Override//实现方法,简单输出 public void onCreate(){ System.out.println("onCereate"); } ..... @Override//实现方法,简单输出 public void onDestory(){ System.out.println("onDestory"); } }
c.系统运行环境类AndroidSystem
//系统运行安装类 public class AndroidSystem{ //定义常量 public static final int CREATE=1; .... public static final int DESTORY=2; //运行方法 public void run(Activity a,int state){ switch(state){ case CREATE: a.onCreate; break; .... case DESTORY: a.onDestory(); break; } } }
d.测试类
publilc class Test{ public static void main(String[] args){ //实例化AndroidSystem AndroidSystem system = new AndroidSystem(); //实例化MyActivity Activity a = new MyActivity(); system.run(a,AndroidSystem.CREAATE); .... system.run(a,AndroidSystem.DESTORY); } }
以上可以看出,接口(系统框架)是系统提供的,接口的实现是用户实现的,这样可以达到接口统一,实现不同的效果。
系统在不同的状态“回调”我们的实现类,来达到接口和实现的分类。
个人理解: Class A 实现接口interface Callback重写起方法;
实例化后传递给Class B 的函数使用,
Class B 的 方法method(Callback c ) 接受到此接口的实例 c,
在method中调用A 实现的callback的方法;
转载于:
http://www.cnblogs.com/vtianyun/archive/2012/06/19/2555427.html