2016-10-08 4 views
2

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でイベントが削除されるはずです。

どうしたのでしょうか、どのように修正できますか?

注:スティッキー・イベントを使用する場合、スティッキー・イベントを使用しないと、いずれのアクティビティーでも画面がオフであると見なされるため、イベントは配信されません。あなたのような

+0

onStop()EventBus.getDefault().unregister(this);を残すために必要な '' 'ではなくonDestroy()'のonPause()? – Mauker

+0

こんにちは、この問題は解決しましたか? –

答えて

0

ルックはconsumeNotification(NotificationEvent event)EventBus.getDefault().removeStickyEvent(event);を呼び出して、あなたはそれを削除しようとしたことがあり

関連する問題