事件被多次接收 - Greenrobot eventbus

Events being received multiple times - Greenrobot eventbus

我在我的应用程序中使用了 Greenrobot 的 EventBus,它工作正常。

但是,如果我按下后退按钮关闭应用程序,然后立即重新启动应用程序,我似乎收到了两次事件。如果我再这样做,我将收到它 3 次,依此类推。

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

有什么想法吗?

谢谢

您的 register/unregister 通话配对正确吗?例如。如果你 register()Activity.onResume(),你是在 unregister()Activity.onPause() 打电话吗?

关闭所有活动不会终止您的进程。 IE。所有已注册的 类 仍然存在,您必须明确清理并从事件总线中注销,或者在 Activity 返回时重新使用它们。

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

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

当我使用

时,我的情况也发生了同样的事情

EventBus.getDefault().postSticky(new Event("Hii !"));

用于发送事件。
当我到达那个activity时多次收到该事件。
所以我通过在 onEvent 方法中接收后删除事件来解决这个问题。这解决了我的问题。
已使用:removeStickyEvent(对象)

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

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