什么是安卓系统中的回调?

2022-08-31 11:46:40

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


答案 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 中,回调在活动和片段之间使用。由于片段应该是模块化的,因此您可以在片段中定义一个回调,以调用活动中的方法。


答案 2

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

接口:

public interface OnCustomEventListener{
  public void onEvent();   //method, which can have parameters
}

类 B 中的侦听器本身(我们只在类 B 中设置侦听器)

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

我们如何从类B触发事件(例如,按下按钮时)

if(this.mListener!=null){
   this.mListener.onEvent();
}

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


推荐