什么是回调函数?
1.1 简而言之,回调函数就是一个通过函数指针调用的函数。
如果你把函数哦指针(地址值)作为一个参数传递给另一个函数,
当这个指针被用为调用它所指向的函数时,我们就说这是一个回调函数
Java中如何使用回调函数?
2.1在Java中不允许直接操作指针,回调的实现,是在java当中通过接口来实现。
2.2方法的回调是功能定义和功能实现分离的一种手段,是一个松耦合设计思想。
作为一种系统框架,必须有自己的运行环境,并且提供用户实现的接口。
2.3在Activity中定义了很多对生命周期中不同状态要调用的方法,这些方法都是空实现,
系统那个框架要调用,用户就要调用实现
模拟Android回调机制体现
3.1Acitivity接口类(为了说明问题,模拟Activity的生命周期中的三方法,定义接口)
public interface IActivity{
// 定义一个界面创建时将被调用的方法onCreate
public abstract void onCreate();
// 定义一个启动界面将被调用的方法onStart
public abstract void onStart();
// 定义一个界面销毁时将被调用的方法onDestory
public abstract void onDestory();
}
3.2Activity接口的实现类(模拟implments Activity时候去实现里面的方法)
class Activity implements IActivity{
@Override//实现界面创建时调用的方法,
public void onCreate() {
Log.d("info","onCreate-------------->");
}
@Override//实现界面启动时候调用的方法,
public void onStart() {
Log.d("info","onCreate-------------->");
}
@Override//实现界面销毁时调用的方法
public void onDestory() {
Log.d("info","onCreate-------------->");
}
}
3.3系统运行环境类 AndroidSystem( 模拟当实现接口方法时候,系统“回调” )
class AndroidSystem{
// 定义一个创建常量
public static final int CREATE=1;
// 定义一个启动常量
public static final int START=2;
// 定义一个销毁常量
public static final int DESTORY=3;
// 定义一个运行方法
public void run(MainActivity1 m,int state){
switch (state){
case 1:
m.onCreate();//创建
break;
case 2:
m.onStart();//启动
break;
case 3:
m.onDestory();//销毁
break;
}
}
}
3.4测试类,(模拟发到模拟器,真机时候的系统运行状态)
class Test {
public static void main(String[] args) {
// 实例化一个AndroidSystem类对象
AndroidSystem system = new AndroidSystem();
// 创建一个Activity类对象
MainActivity1 activity1 = new MainActivity1();
// system对象创建Activity界面对象
system.run(activity1, AndroidSystem.CREATE);
// system对象启动Activity界面对象
system.run(activity1, AndroidSystem.START);
// system对象销毁Activity界面对象
system.run(activity1, AndroidSystem.DESTORY);
}
}
系统回调过程图解
4.1:
4.2:看到这里在看看前面的概念,会更好的理解回调机制。
4.3:一句话,回调是一种双向调用模式,就是说,被调用方在被调用时也会调用对方,这就叫回调。
“If you call me, i will call back”。