从维基百科上面摘抄定义:(看完本篇文章再来理解这个定义)
在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。
在Java里面,我们使用接口来实现回调。
所谓的回调,就是程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法。
例如Android中的button,起初设计button的人并不知道我们最终点击button时用来干嘛,于是就写了接口来完成。
这里先定义一个接口:
public interface OnClickListener {
/**
* Called when a view has been clicked.
*
* @param v The view that was clicked.
*/
void onClick(View v);
}
然后声明:
public OnClickListener mOnClickListener;
请看程序最终调用的是接口里面的onClick()方法:
/**
* Call this view's OnClickListener, if it is defined. Performs all normal
* actions associated with clicking: reporting accessibility event, playing
* a sound, etc.
*
* @return True there was an assigned OnClickListener that was called, false
* otherwise is returned.
*/
public boolean performClick() {
final boolean result;
final ListenerInfo li = mListenerInfo;
if (li != null && li.mOnClickListener != null) {
playSoundEffect(SoundEffectConstants.CLICK);
li.mOnClickListener.<span style="color:#ff0000;">onClick</span>(this);
result = true;
} else {
result = false;
}
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
return result;
}
也就是说,我们怎么在onClick()方法中定义要完成的动作,button就按此执行,那么怎么来完成此函数呢?
public void setOnClickListener(OnClickListener l) {
if (!isClickable()) {
setClickable(true);
}
getListenerInfo().mOnClickListener = l;
}
到此,我们就可以调用setOnclickListener来设置onClick的动作了。button就是这么用的:
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
on_off = false;
startService(intent);
}
});
理解上面的红色的话。