在计算机中回调函数是指通过函数参数传递到其他代码类的,某一块可执行代码的引用,这以设计允许了底层代码调用者在高层定义的子程序。
在JAVA里面我们使用接口的方式来实现函数的回调。
回调的通俗就是:程序员阿祥写了一段程序(CallPerson)其中有回调函数的接口(PhoneCall),并且封装好了程序(CallPerson)。程序员阿呆写了程序(MumCall)要让
阿祥写的程序(CallPerson)调用阿呆写的程序(MumCall)中的方法。于是阿祥的程序(CallPerson)通过程序中(CallPerson)的接口(PhoneCall)调用阿呆的程序(MumCall)的方法。
列子如下:
/*** 阿祥的程序CallPerson
*@authorjoker.chan
**/
public classCallPerson {privatePhoneCall phoneCall;publicCallPerson(PhoneCall phoneCall) {//TODO Auto-generated constructor stub
this.phoneCall =phoneCall;
}public voidphoneCall() {
phoneCall.phonecall();
}
}
/*** 回调函数电话接口
*@authorjoker.chan
**/
public interfacePhoneCall {public voidphonecall();
}
/*** 阿呆的程序MumCall
*@authorjoker.chan
**/
public class MumCall implementsPhoneCall {
@Overridepublic voidphonecall() {//TODO Auto-generated method stub
System.out.println("妈妈打电话叫你回家吃饭了!!!");
}
}
调用方法:
public static voidmain(String[] args) {//TODO Auto-generated method stub
MumCall mc = newMumCall();
CallPerson cp= newCallPerson(mc);
cp.phoneCall();
}
运行结果:
妈妈打电话叫你回家吃饭了!!!
Android中回调函数的基本使用。
1.按钮的监听
Button button = (Button)this.findViewById(R.id.button);
button.setOnClickListener(newButton.OnClickListener() {//回调函数
@override
publicvoidonClick(View v) {
buttonTextView.setText("按钮被点击了");
}
});
上面的代码给按钮加了一个事件监听器,这其实就是“回调”最常见的应用场景之一。我们自己不会显式地去调用onClick方法。用户触发了该按钮的点击事件后,它会由Android系统来自动调用。
2.生命周期函数
@Override
publicvoidonCreate(BundlesaveInstanceState) {super.onCreate(saveInstanceState);//You code...
}
@Override
publicvoidonResume() {super.onResume();//You code...
}
Activity的整个生命周期基本上都说回调函数在发挥作用。
优点:优点主要是将代码中变与不变的部分相分离,从而大大提高了程序的重用性和扩展性。
Android事件侦听器是视图View类的接口,包含一个单独的回调方法。这些方法将在视图中注册的侦听器被用户界面操作触发时由Android框架调用。回调方法被包含在Android事件侦听器接口中:
例如,Android 的view 对象都含有一个命名为 OnClickListener 接口成员变量,用户的点击操作都会交给 OnClickListener的 OnClick() 方法进行处理。
开发者若需要对点击事件做处理,可以定义一个 OnClickListener 接口对象,赋给需要被点击的 view的接口成员变量OnClickListener,一般是用 view 的setOnClickListener() 函数来完成这一操作。
当有用户点击事件时,系统就会回调被点击view的OnClickListener接口成员的OnClick()方法。
实例(对于Android界面上Button点击事件监听的模拟):
1.定义接口public interfaceOnClickListener {public voidOnClick(Button b);
}
2. 定义Buttonpublic classButton {
OnClickListener listener;public voidclick() {
listener.OnClick(this);
}public voidsetOnClickListener(OnClickListener listener) {this.listener =listener;
}
}
3. 将接口对象OnClickListener 赋给 Button的接口成员public classActivity {publicActivity() {
}public static voidmain(String[] args) {
Button button= newButton();
button.setOnClickListener(newOnClickListener(){
@Overridepublic voidOnClick(Button b) {
System.out.println("clicked");
}
});
button.click();//user click,System call button.click();
}