使用番石榴事件总线时的线程问题和注意事项

时间:2015-04-15 18:46:36

标签: java android multithreading guava

有人可以提及 - 并在可能的情况下解释 - 与使用guava eventbus时需要考虑的线程相关的问题吗? 当我订阅一个android Activity并使用(@Subscribe)注释其中一个方法,然后从另一个线程发布一个事件时,我得到一个例外,即事件没有被调度。

(我知道我需要在UI线程上更新用户界面,这不是我所说的。事件不是发送事件!)

编辑: 这是一个例子:

帖子:(这在网络线程中运行)

eventBus.post(new EventShowToast("According to alarm \'" + alarm.getName() + "\', profile \'" + profile.getName() + "\' is run."));

订阅:(活动中的方法,活动注册本身在onResume(...))

@Subscribe
    @AllowConcurrentEvents
    public void showToast(EventShowToast event) {
        showToast(event.getMsg());
    }

2 个答案:

答案 0 :(得分:0)

您是否使用事件总线注册带注释的类。

eventBus.register(annotatedClassInstance);

Event Bus Explained

答案 1 :(得分:0)

您只能从UI线程敬酒。 EventBus捕获所有异常然后抛出它自己的“无法调度事件”异常,这就是为什么很难看出真正的错误是什么。

您可以在Toast from a Non-UI thread

找到问题的解决方案