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 中再次收到。
请问这是什么原因造成的,怎么解决?
注意:我选择使用粘滞事件是因为如果我使用非粘滞事件,则当屏幕在任何一个活动中被视为关闭时,不会传递该事件。
看起来你需要打电话 EventBus.getDefault().removeStickyEvent(event);
进去consumeNotification(NotificationEvent event)
然后EventBus.getDefault().unregister(this);
离开onStop()
归档时间: |
|
查看次数: |
2840 次 |
最近记录: |