当前位置: 首页 > 知识库问答 >
问题:

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

卫子平
2023-03-14

有人能提到——如果可能的话解释一下——我在使用番石榴事件总线时需要考虑的与线程相关的问题吗?当我订阅了一个Android活动并用(@Subscribe)注释了它的一个方法,然后从另一个线程发布了一个事件时,我得到了一个异常,该事件没有被发送。

(我知道我需要在UI线程上更新UI,这不是我所说的。该事件不是事件分派!)

编辑:下面是一个例子:

post:(在网络线程中运行)

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个答案

姬凡
2023-03-14

您是否将带注释的类注册到事件总线。

eventBus.register(annotatedClassInstance);

活动巴士讲解

郭修平
2023-03-14

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

您的问题的解决方案可以在非UI线程的Toast中找到

 类似资料:
  • 我用一个订阅者实现了一个单例。我的应用程序有很多生产者(任何请求都可以是生产者)。 我找不到如何为设置事件数限制(如何为设置内存限制),以及如果生成的事件数大于容量会发生什么。 我想抛出一个异常来记录失败。

  • 我变得非常喜欢Google Gauva的EventBus,以至于我想把它包含在我的Swing GridBagBuilder API中。我们的目标是获取一个Swing组件,在任意事件中用它做一些事情,并将其订阅到EventBus。问题是我认为EventBus完成的反射操作不喜欢我的任意事件类型的泛型。 本质上,该方法接受双消费者,其中C是Swing组件,E是订阅EventBus的任意事件类型。 事件

  • 我很难将同一个类的多个实例注册到一个Google guava事件总线上。如果注册了一个类的单个实例,它运行得很好,如果我试图注册多个实例,它会抛出handlerException。完全错误: 以下是我如何注册听众: SerialCommunicator类中的注册码: serialEventBus只是一个未经编辑的guava eventBus SingleSeriesLineChartModule(

  • 我的 Spark 版本是 2.2.0,它在本地工作,但在具有相同版本的 EMR 上,它给出了以下异常。

  • 我在一个库中有一个带注释的Activity,它是来自同一个库的EventBus事件的订阅者。它看起来像这样,大大简化了: 它应该根据这个来工作: http://timnew.me/blog/2014/09/14/otto-and-android-annotations-compatibility-issue-analysis/ 但实际上它返回了此错误: 无法开始活动...de . green ro

  • 番石榴供应商类包含备忘录供应商: 有人能解释一下这句话是什么意思吗? “价值”不需要是易变的;可见性依赖于对“已初始化”的易失性读取。 “初始化”字段上的挥发性如何影响“值”字段?根据这篇文章,我们可以得到“初始化”和“值”字段的不一致组合(例如。真空值)。我说错了吗?