Android中的回调是什么?

时间:2013-08-05 09:27:05

标签: java android

我想了解回调的概念。我在互联网上搜索了有关回调的内容,并且有许多使用接口的示例,并且一个类使用该接口调用另一个类的方法。但是我仍然无法获得回调的主要概念,使用回调的目的是什么?

6 个答案:

答案 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。您的自定义侦听器可能包含任意数量的参数

Source

答案 2 :(得分:7)

回调在Java中非常有用。

使用Callback,您可以通知另一个已完成但成功或错误的异步操作。

答案 3 :(得分:3)

CallBack Interface用于安卓中的FragmentFragment通信。

请参阅here以了解您的理解。

答案 4 :(得分:2)

here之前讨论过。

  

在计算机编程中,回调是一段可执行代码,它作为参数传递给其他代码,期望在某个方便的时候回调(执行)参数。调用可以像在同步回调中​​一样立即执行,也可以在以后执行,就像在异步回调中一样。

答案 5 :(得分:1)

我在以下情况中使用: 在UI中我从按钮获得了一个动作,例如。用户想要下载500mb文件。 谢谢我将初始化后台引擎(AsyncTask类)并将参数传递给他。 在UI上,我将显示阻止进度对话框,并禁止用户进行任何其他点击。问题是:何时从UI中删除阻止?答案是:当引擎成功或失败时,可以使用回调或通知。

通知和回调之间的区别是另一个问题,但1:1的回调速度更快。