【问题标题】:What is callback in Android? [duplicate]Android中的回调是什么? [复制]
【发布时间】:2013-08-05 09:27:05
【问题描述】:

我想了解回调的概念。我在互联网上搜索了回调,并且有很多使用接口的示例,一个类正在使用该接口调用另一个类的方法。但是还是搞不懂回调的主要概念,使用回调的目的是什么?

【问题讨论】:

标签: java android


【解决方案1】:

这是一个很好的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 类在线程中完成一些工作。如果线程完成工作,它将通过回调通知 A 类并提供结果。所以不需要轮询什么的。结果一出来,你就会得到。

在 Android 中,回调用于 f.e.在活动和片段之间。因为 Fragment 应该是模块化的,所以你可以在 Fragment 中定义一个回调来调用 Activity 中的方法。

【讨论】:

  • 非常感谢,现在我知道了回调
  • 非常感谢..这真的是一个非常简单和很好的例子....
  • 为 necropost 道歉,但我认为示例中存在一个小错误。我认为“new Thread(new Runnable()...”的代码应该在 B 类的构造函数中。在尝试运行您的示例时,我遇到了一个错误,但是在将代码放入构造函数之后,它就可以工作了。抱歉,如果我在这里错了。
  • “在 Android 中,回调用于 f.e. 之间...”什么是“f.e.”??
  • @nj2237 f.e.是“例如”
【解决方案2】:

您首先创建一个接口,然后定义一个方法,该方法将充当回调。在此示例中,我们将有两个类,一个 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;
}

在 A 类中,我们如何开始聆听 B 类必须告知的内容

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();
}

附:您的自定义侦听器可能有任意数量的参数

Source

【讨论】:

  • 这很有帮助 - 但我有一个问题......在上面的案例中,B 类定义了监听器,这意味着任何想要监听事件的类都必须创建一个新对象B 然后必须调用该方法。例如 - 来自 A 类 --> B b = new B(); b.setCustomEventListener(this);同样来自 D 类/E 类 B b = new B(); b.setCustomEventListener(this);有什么办法可以避免在我想听的所有类中创建对象 B?
【解决方案3】:

回调在 Java 中非常有用。

使用回调,您可以通知另一个类异步操作已成功或错误完成。

【讨论】:

    【解决方案4】:

    CallBack Interface用于FragmentFragment在android中的通信。

    请参考here 了解。

    【讨论】:

      【解决方案5】:

      here 之前讨论过。

      在计算机编程中,回调是一段可执行代码,它作为参数传递给其他代码,期望在某个方便的时间回调(执行)该参数。调用可能是即时的,如同步回调中​​,也可能稍后发生,如异步回调中。

      【讨论】:

        【解决方案6】:

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

        通知和回调有什么区别这是另一个问题,但是 1:1 的回调更快。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-11-13
          • 1970-01-01
          • 1970-01-01
          • 2013-10-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-06
          相关资源
          最近更新 更多