Android Passer un événement simple


Exemple

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.