onEvent
,onEventMainThread
,onEventBackgroundThread
和onEventAsync
的使用感到有点困惑
从我在documentation中看到的内容:
onEvent
与ThreadMode.POSTING
(默认)onEventMainThread
与ThreadMode.MAIN
onEventBackgroundThread
与ThreadMode.BackgroundThread
onEventAsync
与ThreadMode.ASYNC
但是在从后台线程发布事件的情况下:
@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?
答案 0 :(得分:17)
我找到了答案,而不是EventBus 2,方法名称并不重要,因为在EventBus 3上使用注释来支持Reflection,所以以下内容将起作用:
@Subscribe(threadMode = ThreadMode.MAIN)
public void someMethodName(MyEvent event) {
// some UI manipulation
}
我在这里保留这个问题,以便为可能有同样问题的人节省时间。
答案 1 :(得分:6)
Username (12)
是使用 EventBus 注册方法的注释,过去这是使用反射完成的,这就是为什么你必须在特定方法中命名方法的原因方式(@Subscribe
,onEvent
等)。这有两个缺点:
这些缺点已经通过更新消除了,所以现在您可以随意命名您的方法,并指出您希望事件在注释参数中运行的线程。