Suche…


Syntax

  • @Subscribe (threadMode = ThreadMode.POSTING) public void onEvent (EventClass-Ereignis) {}

Parameter

Thread-Modus Beschreibung
ThreadMode.POSTING Wird in demselben Thread aufgerufen, in dem das Ereignis gepostet wurde. Dies ist der Standardmodus.
ThreadMode.MAIN Wird im Haupt-UI-Thread aufgerufen.
ThreadMode.BACKGROUND Wird in einem Hintergrundthread aufgerufen. Wenn der Beitragsthread nicht der Hauptthread ist, wird er verwendet. Wenn im Haupt-Thread EventBus hat EventBus einen einzigen Hintergrund-Thread, den es verwenden wird.
ThreadMode.ASYNC Wird in einem eigenen Thread aufgerufen.

Ereignisobjekt erstellen

Zum Senden und Empfangen von Ereignissen benötigen wir zunächst ein Ereignisobjekt. Ereignisobjekte sind eigentlich einfache POJOs.

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

Ereignisse empfangen

Um Ereignisse empfangen zu können, müssen Sie Ihre Klasse im EventBus .

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

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

Und dann abonnieren Sie die Ereignisse.

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

Ereignisse senden

Das Senden von Ereignissen ist so einfach wie das Erstellen des Ereignisobjekts und das Versenden dieses Ereignisses.

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

Ein einfaches Ereignis übergeben

Das erste, was wir tun müssen, füge EventBus zur Gradle-Datei unseres Moduls hinzu:

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

Jetzt müssen wir ein Modell für unsere Veranstaltung erstellen. Es kann alles enthalten, was wir weitergeben möchten. Für jetzt machen wir nur eine leere Klasse.

public class DeviceConnectedEvent
{
}

Jetzt können wir den Code zu unserer Activity hinzufügen, der sich bei EventBus registriert und das Ereignis abonniert.

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

In dieser Activity wir eine Instanz von EventBus in der onCreate() Methode. Wir registrieren / unregistrieren für Ereignisse in onStart() / onStop() . Es ist wichtig, sich daran zu erinnern, dass die Registrierung aufgehoben wird, wenn der Zuhörer den Gültigkeitsbereich verliert oder Sie Ihre Activity verlieren könnten.

Schließlich definieren wir die Methode, die mit dem Ereignis aufgerufen werden soll. Die @Subscribe Annotation gibt EventBus an, nach welchen Methoden es für die Verarbeitung von Ereignissen suchen kann. Sie müssen mindestens eine Methode mit @Subscribe annotiert haben, um sich bei @Subscribe registrieren zu können. Andernfalls wird eine Ausnahme ausgelöst. In der Anmerkung definieren wir den Thread-Modus. Dadurch wird EventBus mitgeteilt, in welchem ​​Thread die Methode aufgerufen werden soll. Dies ist eine sehr praktische Möglichkeit, Informationen aus einem Hintergrund-Thread an den UI-Thread zu übergeben! Genau das machen wir hier. ThreadMode.MAIN bedeutet, dass diese Methode im Haupt-UI-Thread von Android aufgerufen wird. ThreadMode.MAIN Sie hier alle erforderlichen UI-Manipulationen ThreadMode.MAIN . Der Name der Methode spielt keine Rolle. Der einzige @Subscribe , nach dem EventBus nach der @Subscribe Anmerkung sucht, ist der Typ des Arguments. Solange der Typ übereinstimmt, wird er aufgerufen, wenn ein Ereignis gepostet wird.

Das letzte, was wir tun müssen, um eine Veranstaltung zu posten. Dieser Code befindet sich in unserem Service .

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

Das ist alles dazu! EventBus nimmt das DeviceConnectedEvent und durchsucht seine registrierten Listener, durchsucht die von ihnen abonnierten Methoden, sucht nach denen, die ein DeviceConnectedEvent als Argument akzeptieren, und ruft sie in dem Thread auf, für den sie aufgerufen werden sollen.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow