多次接收事件 - Greenrobot eventbus

时间:2015-01-23 23:35:41

标签: android greenrobot-eventbus

我在我的应用程序中使用Greenrobot的EventBus,它运行正常。

但是,如果我按后退按钮关闭应用程序,然后立即重新启动应用程序我似乎收到了两次事件。如果我再这样做,我会收到它三次等等。

我正在检查日志和调试,看看我是否有多个类的实例,或者我多次注册,但是我看不到任何额外的类,并且使用isRegistered返回false。

有什么想法吗?

由于

5 个答案:

答案 0 :(得分:12)

您的注册/取消注册呼叫是否正确配对?例如。如果register()中的Activity.onResume(),您是否在unregister()中呼叫Activity.onPause()

关闭所有活动不会导致您的进程失败。即所有已注册的类仍然存在,您必须从事件总线中明确清理和取消注册,或者在Activity返回时重复使用它们。

答案 1 :(得分:2)

这是旧的,但万一有人也遇到这个问题:在动态生成的东西(如Fragments或其他类)中使用EventBus时要轻微踩踏;我不太明白为什么他们不止一次发布到EventBus,但我认为它与此有关(我有多个动态生成的片段)。一旦我将register()unregister()onEvent()放入父活动代码(它也方便地使用onPause()onResume()),它就能正常工作。

答案 2 :(得分:0)

问题不在于事件实际上是多次被触发,但是处理程序被多次调用。如上面的代码所示,每次创建对象时都会调用bus.register方法;由于活动生命周期,这种情况多次发生,导致处理程序被多次调用。

答案 3 :(得分:0)

在我使用

时,发生了同样的事情
  

EventBus.getDefault()。postSticky(new Event(“ Hii!”)));

用于发送事件。
当我参加该活动时,该活动被多次接收。
因此我通过在接收onEvent方法后删除事件来解决此问题。这解决了我的问题。
已使用:removeStickyEvent(object)

@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
    public void onEvent(Event event) {
        /* Do something */
        EventBus.getDefault().removeStickyEvent(event);
}

答案 4 :(得分:0)

我有一个具体案例要分享。也许它可以帮助别人。 当我们为项目中的所有活动使用父活动时,我们为父类中的每个活动注册和取消注册 EvenBus。 在我们的一个活动中,我们在调用前一个活动的 EventBus 之前调用了 EventBas。然后我们有两次触发