firebaseを使用して通知を送信します。アプリがフォアグラウンドにあるとき、通知はFirebaseMessagingService
を拡張するクラスによって受け取られます。だから、onMessageReceived
で、私はこれを行う:イベントバス:消費後にスティッキーイベントを削除します
EventBus.getDefault().postSticky(new NotificationEvent(body, title, url));
私はこのイベントのリスナー2つのアクティビティがあります。アクティビティ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");
}
を、活動B.
を起動アクティビティAにあるボタンは、アクティビティAが上で表示されている場合があり(イベントをトリガーする)通知を受け取ると、そのイベントは初めて消費されます。
だから私は活動Bを(onStop
は、アクティビティAに呼ばれている)を起動するボタンをクリックすると、意外にもイベントは、それがonStop
は、アクティビティAに呼び出されたときに削除されていることになっていたとき、アクティビティBで再び受信され
また、アクティビティBが画面に表示され、(イベントをトリガーする)通知を受け取った場合、そのイベントも最初に消費されます。
しかし、物理バックボタンをクリックしてアクティビティAに戻ると、アクティビティAでイベントが削除されるはずです。
どうしたのでしょうか、どのように修正できますか?
注:スティッキー・イベントを使用する場合、スティッキー・イベントを使用しないと、いずれのアクティビティーでも画面がオフであると見なされるため、イベントは配信されません。あなたのような
onStop()
でEventBus.getDefault().unregister(this);
を残すために必要な '' 'ではなくonDestroy()'のonPause()? – Maukerこんにちは、この問題は解決しましたか? –