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) 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?
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.
@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:
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.
Tags und Links java android event-bus greenrobot-eventbus greenrobot-eventbus-3.0