86 votes

Qu'est-ce que le callback dans Android ?

Je souhaite comprendre le concept de callback. J'ai fait des recherches sur internet à propos des callbacks et il y a beaucoup d'exemples utilisant des interfaces, et une classe appelle une méthode d'une autre classe en utilisant cette interface. Mais je n'arrive toujours pas à comprendre le concept principal des callbacks, quel est le but de l'utilisation des callbacks ?

181voto

Steve Benett Points 6096

Voici une belle tutoriel qui décrit bien les rappels et le cas d'utilisation.

Le concept des callbacks est d'informer une classe synchrone/asynchrone si un travail dans une autre classe est effectué. Certains l'appellent le principe d'Hollywood : "Ne nous appelez pas, nous vous appelons".

Voici un exemple :

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

La classe A appelle la classe B pour effectuer un travail dans le cadre d'un fil conducteur. Si le Thread a terminé le travail, il en informera la Classe A par le biais du callback et fournira les résultats. Il n'est donc pas nécessaire d'effectuer un sondage ou autre. Vous obtiendrez les résultats dès qu'ils seront disponibles.

Dans Android, les rappels sont utilisés, par exemple, entre les activités et les fragments. Les fragments devant être modulaires, vous pouvez définir un rappel dans le fragment pour appeler des méthodes dans l'activité.

50voto

Mocialov Boris Points 1694

Vous créez d'abord une interface, puis vous définissez une méthode qui servira de rappel. Dans cet exemple, nous aurions deux classes, l'une classeA et un autre classeB

Interface :

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

l'écouteur lui-même dans la classe B (nous ne définissons l'écouteur que dans la classe B)

private OnCustomEventListener mListener; //listener field

//setting the listener
public void setCustomEventListener(OnCustomEventListener eventListener) {
   this.mListener=eventListener;
}

dans la classe A, comment nous commençons à écouter ce que la classe B a à nous dire ?

classB.setCustomEventListener(new OnCustomEventListener(){
    public void onEvent(){
       //do whatever you want to do when the event is performed.
    }
});  

Comment déclencher un événement à partir de la classe B (par exemple lorsqu'on appuie sur un bouton) ?

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

P.S. Votre écouteur personnalisé peut avoir autant de paramètres que vous le souhaitez

Source

9voto

Nargis Points 2539

Le callback peut s'avérer très utile en Java.

L'utilisation de la fonction Callback permet d'informer une autre classe d'une action asynchrone qui s'est achevée avec succès ou erreur.

4voto

CallBack Interface sont utilisés pour Fragment a Fragment la communication dans Android.

Référer aquí pour votre compréhension.

3voto

Mert Şimşek Points 134

Il a été discuté avant aquí .

En programmation informatique, un rappel est un morceau de code exécutable qui est transmis comme argument à un autre code, qui est censé rappeler (exécuter) l'argument à un moment opportun. L'invocation peut être immédiate, comme dans le cas d'un rappel synchrone, ou se produire plus tard, comme dans le cas d'un rappel asynchrone.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X