Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android中的回调是什么?_Java_Android - Fatal编程技术网

Java Android中的回调是什么?

Java Android中的回调是什么?,java,android,Java,Android,我想了解回调的概念。我在互联网上搜索过关于回调的内容,有很多使用接口的示例,其中一个类正在使用该接口调用另一个类的方法。但是我仍然不能理解回调的主要概念,使用回调的目的是什么?首先创建一个接口,然后定义一个方法,该方法将充当回调。在本例中,我们将有两个类,一个classA和另一个classB 接口: public interface OnCustomEventListener{ public void onEvent(); //method, which can have paramet

我想了解回调的概念。我在互联网上搜索过关于回调的内容,有很多使用接口的示例,其中一个类正在使用该接口调用另一个类的方法。但是我仍然不能理解回调的主要概念,使用回调的目的是什么?

首先创建一个接口,然后定义一个方法,该方法将充当回调。在本例中,我们将有两个类,一个classA和另一个classB

接口:

public interface OnCustomEventListener{
  public void onEvent();   //method, which can have parameters
}
侦听器本身在classB中(我们只在classB中设置侦听器)

在classA中,我们如何开始倾听classB所说的一切

classB.setCustomEventListener(new OnCustomEventListener(){
    public void onEvent(){
       //do whatever you want to do when the event is performed.
    }
});  
如何从classB触发事件(例如按下按钮时)

另外,您的自定义侦听器可能有您想要的任意多个参数


回调在Java中非常有用

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

前面已经讨论过

在计算机编程中,回调是作为参数传递给其他代码的一段可执行代码,这些代码希望在方便的时候回调(执行)参数。调用可以像在同步回调中那样立即进行,也可以像在异步回调中那样在稍后进行


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

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

这是一个很好的例子,它很好地描述了回调和用例

回调的概念是在另一个类中的某些工作完成时通知一个类同步/异步。有人称之为好莱坞原则:“不要叫我们,我们叫你”

下面是一个例子:

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。因为片段应该是模块化的,所以您可以在片段中定义回调来调用活动中的方法。

回调接口
用于android中
片段
片段
的通信


请参考您的理解。

链接:这是一种在Java中实现lambdas的方法,因为它们在Java 8之前不受支持。非常感谢,现在我对CallbackShanks有了很多想法。这是一个非常简单和不错的示例……为necropost道歉,但我认为示例中有一个小错误。我认为“new Thread(new Runnable()…”的代码应该在类B的构造函数中。在尝试运行示例时,我遇到了一个错误,但在将代码放入构造函数后,它成功了。如果我在这里出错,请道歉。这非常有用-但我有一个问题…在上述情况下,类B定义了侦听器,这意味着任何想要侦听事件必须创建一个新的B对象,然后必须调用该方法。例如-从类a-->B B=new B();B.setCustomEventListener(this);类似地从类D/类E B=new B();B.setCustomEventListener(this);是否有任何方法可以避免在我要侦听的所有类中创建对象B?
if(this.mListener!=null){
   this.mListener.onEvent();
}
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);
}