Eventbus:消费后删除粘性事件

时间:2016-10-08 13:30:33

标签: 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");
    }

现在,活动A中有一个按钮,用于启动活动B.

如果屏幕上显示活动A,并且我收到通知(触发事件),则第一次消耗该事件。

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

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

但是,当我点击物理后退按钮返回活动A时,活动A中的活动将被删除。

请问,这应该是什么原因以及如何解决?

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

1 个答案:

答案 0 :(得分:1)

看起来你需要在EventBus.getDefault().removeStickyEvent(event);内拨打consumeNotification(NotificationEvent event) 并在EventBus.getDefault().unregister(this);

中留下onStop()