Greenbot Eventbus 3.0:onEvent、onEventMainThread、onEventBackgroundThread 和 onEventAsync 有什么区别?

Greenbot Eventbus 3.0: What is the difference between onEvent, onEventMainThread, onEventBackgroundThread and onEventAsync?

我对 onEventonEventMainThreadonEventBackgroundThreadonEventAsyncGreenrobot's EventBus 3.0

中的用法有点困惑

根据我在 documentation 中看到的内容:

但是如果事件是从后台线程发布的:

@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(MyEvent event) {
    // some UI manipulation
}

与以下行为完全相同:

@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(MyEvent event) {
    // some UI manipulation
}

并且:

@Subscribe
public void onEventMainThread(MyEvent event) {
    // some UI manipulation
}

抛出 CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 因为线程与发布线程相同(我测试中的后台线程)。

从3.0版本开始,需要@Subscribe注解所以我不明白在什么情况下我应该使用onEvent以外的方法。保留它们是为了方便从 EventBus 2 升级到 3 吗?

我找到了答案,与 EventBus 2 不同,方法名称并不重要,因为在 EventBus 3 上使用注释有利于反射,因此以下内容将起作用:

@Subscribe(threadMode = ThreadMode.MAIN)
public void someMethodName(MyEvent event) {
    // some UI manipulation
}

我把这个问题留在这里是为了给可能有同样问题的人腾出时间。

@Subscribe是向EventBus注册方法的注解,以前是通过反射完成的,所以必须在a中命名方法特定方式(onEventonEventMainThread 等)。这有两个缺点:

  1. 反射在 Java 和
  2. 中相当慢
  3. 命名约定对新用户来说不是很直观。

这两个缺点都已通过更新消除,因此现在您可以随意命名您的方法,并在注释参数中指明您希望事件在哪个线程中 运行。