Recherche…


Syntaxe

  • @Subscribe (threadMode = ThreadMode.POSTING) public void onEvent (événement EventClass) {}

Paramètres

Mode filetage La description
ThreadMode.POSTING Sera appelé sur le même thread que l'événement a été posté sur. C'est le mode par défaut.
ThreadMode.MAIN Sera appelé sur le thread principal de l'interface utilisateur.
ThreadMode.BACKGROUND Sera appelé sur un fil de fond. Si le thread de publication n'est pas le thread principal, il sera utilisé. S'il est posté sur le thread principal, EventBus possède un seul thread d'arrière-plan qu'il utilisera.
ThreadMode.ASYNC Sera appelé sur son propre fil.

Création d'un objet événement

Pour envoyer et recevoir des événements, nous avons d'abord besoin d'un objet Event. Les objets événement sont en fait de simples POJO.

public class ArbitaryEvent{
    public static final int TYPE_1 = 1;
    public static final int TYPE_2 = 2;
    private int eventType;
    public ArbitaryEvent(int eventType){
        this.eventType = eventType;
    }
    
    public int getEventType(){
        return eventType;
    }
}

Recevoir des événements

Pour recevoir des événements, vous devez enregistrer votre classe sur le EventBus .

@Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}

@Override
public void onStop() {
   EventBus.getDefault().unregister(this);
   super.onStop();
}

Et puis abonnez-vous aux événements.

@Subscribe(threadMode = ThreadMode.MAIN)
public void handleEvent(ArbitaryEvent event) {
    Toast.makeText(getActivity(), "Event type: "+event.getEventType(), Toast.LENGTH_SHORT).show();
}

Envoi d'événements

L'envoi d'événements est aussi simple que la création de l'objet Event et sa publication.

EventBus.getDefault().post(new ArbitaryEvent(ArbitaryEvent.TYPE_1));

Passer un événement simple

La première chose à faire est d'ajouter EventBus au fichier de dégradé de notre module:

dependencies {
    ...
    compile 'org.greenrobot:eventbus:3.0.0'
    ...
}

Maintenant, nous devons créer un modèle pour notre événement. Il peut contenir tout ce que nous voulons transmettre. Pour l'instant, nous allons simplement créer une classe vide.

public class DeviceConnectedEvent
{
}

Maintenant, nous pouvons ajouter le code à notre Activity qui sera enregistré avec EventBus et abonné à l'événement.

public class MainActivity extends AppCompatActivity
{
    private EventBus _eventBus;

    @Override
    protected void onCreate (Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        _eventBus = EventBus.getDefault();
    }

    @Override
    protected void onStart ()
    {
        super.onStart();
        _eventBus.register(this);
    }

    @Override
    protected void onStop ()
    {
        _eventBus.unregister(this);
        super.onStop();
    }

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onDeviceConnected (final DeviceConnectedEvent event)
    {
        // Process event and update UI
    }
}

Dans cette Activity nous obtenons une instance de EventBus dans la méthode onCreate() . Nous enregistrons / onStart() pour les événements dans onStart() / onStop() . Il est important de vous rappeler de vous désinscrire lorsque votre auditeur perd de la portée ou que vous risquez de perdre votre Activity .

Enfin, nous définissons la méthode que nous voulons appeler avec l'événement. L'annotation @Subscribe indique à EventBus les méthodes qu'il peut rechercher pour gérer les événements. Vous devez avoir au moins une méthode annotée avec @Subscribe pour vous inscrire à EventBus ou une exception. Dans l'annotation, nous définissons le mode thread. Ceci indique à EventBus quel thread appelle la méthode. C'est un moyen très pratique de transmettre des informations d'un thread d'arrière-plan au thread d'interface utilisateur! C'est exactement ce que nous faisons ici. ThreadMode.MAIN signifie que cette méthode sera appelée sur le thread d'interface utilisateur principal d'Android, de sorte qu'il est possible d'effectuer des manipulations d'interface utilisateur ici. Le nom de la méthode n'a pas d'importance. Les seuls pensent, à part que l'annotation @Subscribe , que EventBus recherche est le type de l'argument. Tant que le type correspond, il sera appelé lorsqu'un événement est publié.

La dernière chose à faire pour poster un événement. Ce code sera dans notre Service .

EventBus.getDefault().post(new DeviceConnectedEvent());

C'est tout ce qu'on peut en dire! EventBus prend cet événement DeviceConnectedEvent et examine ses écouteurs enregistrés, examine les méthodes auxquelles ils ont souscrit et recherche ceux qui prennent un DeviceConnectedEvent comme argument et les appelle sur le thread auquel ils souhaitent être appelés.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow