回掉函数理解
所谓的回调,就是程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法。
这个要怎么理解呢 一开始我是一头雾水的但是你不能说我一头雾水就拒绝去了解,最后反复读了好几遍终于有所了解了。
这里以Button按钮的点击事件进行说明
这里是Button的设置点击事件方法和点击事件的接口类
public void setOnClickListener(@Nullable OnClickListener l) {
if (!isClickable()) {
setClickable(true);
}
getListenerInfo().mOnClickListener = l;
}
public interface OnClickListener {
/**
* Called when a view has been clicked.
*
* @param v The view that was clicked.
*/
void onClick(View v);
}
这里是Button按钮事件的实现
Button btn = (Button)findViewById(R.id.focus);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("2333333333");
}
});
首先Button的setOnClickListener
可以想象为程序员A写的程序a,你的当前类为B
那么接下来就十分清晰了。
Button(A)写好了setOnClickListener
方法并且预留了接口,你(B)用了它(A)的setOnClickListener
方法,然后它(A)的setOnClickListener
调用你的onClick
方法。再结合这一句:
A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,是不是感觉有点想得通了。
也就是我用了你的setOnClickListener
方法,然后你用我的实现好的Onclick
方法。A调用B,B调用A。
一个通俗的例子:
你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。回答完毕。
店员就是A 你就是B B调用店员(A)通知你的方法并实现了A的打电话方法(传入了电话号码(回调函数)),货物到了,(回掉 事件触发) A调用你实现好了的打电话方法,然后你就去取货物(响应回调事件)
上述店员例子来源链接:
http://www.zhihu.com/question/19801131/answer/13005983