#android #greenrobot-eventbus
#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 ( onStop
вызывается для действия A), но, к удивлению, событие снова принимается в действии B, когда оно должно было быть удалено при onStop
вызове в действии A.
Кроме того, если действие B отображается на экране, и я получаю уведомление (которое запускает событие), событие также используется в первый раз.
Но когда я нажал физическую кнопку «Назад», чтобы вернуться к действию A, событие снова принимается в действии A, когда оно должно было быть удалено.
Пожалуйста, что должно быть причиной этого и как это можно исправить?
ПРИМЕЧАНИЕ: я решил использовать событие stick, потому что, если я использую событие non-sticky, событие не доставляется, когда экран считается выключенным для любого из действий.
Комментарии:
1. Вы пытались удалить его
onPause()
вместоonDestroy()
?2. Привет, эта проблема решена?
Ответ №1:
Похоже, вам нужно было позвонить EventBus.getDefault().removeStickyEvent(event);
внутрь consumeNotification(NotificationEvent event)
и оставить EventBus.getDefault().unregister(this);
в onStop()