Greenbot Eventbus 3.0: Was ist der Unterschied zwischen onEvent, onEventMainThread, onEventBackgroundThread und onEventAsync?

7

Ich bin ein wenig verwirrt mit der Verwendung von onEvent , onEventMainThread , onEventBackgroundThread und onEventAsync in Greenrobots EventBus 3.0

Aus dem, was ich in der Dokumentation sehe:

  • onEvent wird mit ThreadMode.POSTING (Standard)
  • verwendet
  • onEventMainThread wird mit ThreadMode.MAIN verwendet
  • onEventBackgroundThread wird mit ThreadMode.BackgroundThread verwendet
  • onEventAsync wird mit ThreadMode.ASYNC verwendet

Aber in dem Fall, in dem das Ereignis von einem Hintergrundthread gepostet wird:

%Vor%

Hat genau das gleiche Verhalten wie:

%Vor%

Und:

%Vor%

Wirf CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. , weil der Thread derselbe ist wie der Beitragsthread (Hintergrund-Thread in meinen Tests).

Seit Version 3.0 ist die Annotation @Subscribe erforderlich, daher verstehe ich nicht, in welchem ​​Fall ich andere Methoden als onEvent verwenden sollte. Wurden sie beibehalten, um ein Upgrade von EventBus 2 auf 3 zu ermöglichen?

    
grim 14.02.2016, 03:09
quelle

2 Antworten

15

Ich habe die Antwort gefunden, im Gegensatz zu EventBus 2 ist der Methodenname nicht wichtig, da auf EventBus 3 Annotationen zugunsten von Reflection verwendet werden, daher wird Folgendes funktionieren:

%Vor%

Ich halte diese Frage hier, um die Zeit für jemanden zu sparen, der dieselbe Frage haben könnte.

    
grim 14.02.2016, 03:33
quelle
6

@Subscribe ist die Annotation, die die Methode mit dem EventBus registriert, in der Vergangenheit wurde dies mit Reflektion gemacht, deshalb mussten Sie die Methoden auf eine bestimmte Art benennen ( onEvent , onEventMainThread usw.). Dies hatte zwei Nachteile:

  1. Reflection ist in Java ziemlich langsam und
  2. Die Namenskonvention ist für neue Benutzer nicht sofort intuitiv.

Beide Nachteile wurden mit dem Update behoben. Sie können nun Ihre Methoden beliebig benennen und angeben, in welchem ​​Thread das Ereignis innerhalb der Annotationsparameter ausgeführt werden soll.

    
shredder 26.02.2016 12:56
quelle