Eventbus:消费后删除粘性事件

X09*_*X09 6 android greenrobot-eventbus

我使用 firebase 发送通知。当应用程序在前台时,通知由扩展的类接收FirebaseMessagingService。所以在onMessageReceived,我这样做:

EventBus.getDefault().postSticky(new NotificationEvent(body, title, url));

我有两个活动可以侦听此事件。活动 A 和活动 B。

在这两项活动中,我都这样做:

@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
    public void consumeNotification(NotificationEvent event) {
        //Consume event
    }

    @Override
    public void onStart() {
        super.onStart();
        EventBus.getDefault().register(this);
        Log.d(TAG, "onStart called");
    }

    @Override
    public void onStop() {
        NotificationEvent event = EventBus.getDefault().getStickyEvent(NotificationEvent.class);
        if (event != null) {
            EventBus.getDefault().removeStickyEvent(event);
        }
        EventBus.getDefault().unregister(this);
        super.onStop();
        Log.d(TAG, "onStop called");
    }
Run Code Online (Sandbox Code Playgroud)

现在,Activity A 中有一个按钮可以启动 Activity B。

如果活动 A 在屏幕上可见,并且我收到通知(触发事件),则第一次使用该事件。

因此,当我单击按钮启动 Activity B(onStop在 Activity A 上调用)时,但令人惊讶的是,当它onStop在 Activity A 中被调用时本应已删除的事件在 Activity B 中再次收到。

此外,如果 Activity B 在屏幕上可见并且我收到通知(触发事件),则该事件也会在第一次被消耗。

但是,当我单击物理后退按钮返回活动 A 时,该事件在本应已删除的活动 A 中再次收到。

请问这是什么原因造成的,怎么解决?

注意:我选择使用粘滞事件是因为如果我使用非粘滞事件,则当屏幕在任何一个活动中被视为关闭时,不会传递该事件。

Chu*_*uck 7

看起来你需要打电话 EventBus.getDefault().removeStickyEvent(event);进去consumeNotification(NotificationEvent event) 然后EventBus.getDefault().unregister(this);离开onStop()