我想了解回调的概念。我在互联网上搜索了有关回调的内容,并且有许多使用接口的示例,并且一个类使用该接口调用另一个类的方法。但是我仍然无法获得回调的主要概念,使用回调的目的是什么?
答案 0 :(得分:148)
这是一个很好的tutorial,它很好地描述了回调和用例。
回调的概念是,如果完成了另一个类中的某些工作,则通知类同步/异步。有人称之为好莱坞原则:“不要打电话给我们,我们称之为你。”
以下是一个例子:
class A implements ICallback {
MyObject o;
B b = new B(this, someParameter);
@Override
public void callback(MyObject o){
this.o = o;
}
}
class B {
ICallback ic;
B(ICallback ic, someParameter){
this.ic = ic;
}
new Thread(new Runnable(){
public void run(){
// some calculation
ic.callback(myObject)
}
}).start();
}
interface ICallback{
public void callback(MyObject o);
}
A类调用B类来完成Thread中的一些工作。如果线程完成了工作,它将通过回调通知A类并提供结果。所以不需要投票或其他什么。您将在可用时立即获得结果。
在Android中使用回调函数f.e.活动和碎片之间。因为Fragments应该是模块化的,所以你可以在Fragment中定义一个回调来调用Activity中的方法。
答案 1 :(得分:38)
首先创建一个接口,然后定义一个方法,该方法将充当回调。在这个例子中,我们将有两个类,一个 classA ,另一个 classB
接口:
public interface OnCustomEventListener{
public void onEvent(); //method, which can have parameters
}
classB中的监听器本身(我们只在classB中设置监听器)
private OnCustomEventListener mListener; //listener field
//setting the listener
public void setCustomEventListener(OnCustomEventListener eventListener) {
this.mListener=eventListener;
}
在classA中,我们如何开始监听classB必须告诉的任何内容
classB.setCustomEventListener(new OnCustomEventListener(){
public void onEvent(){
//do whatever you want to do when the event is performed.
}
});
我们如何从classB触发事件(例如按下按钮)
if(this.mListener!=null){
this.mListener.onEvent();
}
P.S。您的自定义侦听器可能包含任意数量的参数
答案 2 :(得分:7)
回调在Java中非常有用。
使用Callback,您可以通知另一个已完成但成功或错误的异步操作。
答案 3 :(得分:3)
CallBack Interface
用于安卓中的Fragment
到Fragment
通信。
请参阅here以了解您的理解。
答案 4 :(得分:2)
在here之前讨论过。
在计算机编程中,回调是一段可执行代码,它作为参数传递给其他代码,期望在某个方便的时候回调(执行)参数。调用可以像在同步回调中一样立即执行,也可以在以后执行,就像在异步回调中一样。
答案 5 :(得分:1)
我在以下情况中使用: 在UI中我从按钮获得了一个动作,例如。用户想要下载500mb文件。 谢谢我将初始化后台引擎(AsyncTask类)并将参数传递给他。 在UI上,我将显示阻止进度对话框,并禁止用户进行任何其他点击。问题是:何时从UI中删除阻止?答案是:当引擎成功或失败时,可以使用回调或通知。
通知和回调之间的区别是另一个问题,但1:1的回调速度更快。