#android #event-bus #otto
#Android #шина событий #otto
Вопрос:
Я пытаюсь передать событие с помощью шины событий Otto из SplashActivity в LoginActivity, что через 2 или 3 действия с:
SplashActivity
@Override
public void onStart() {
super.onStart();
BusProvider.getInstance().register(this);
if(UtilityManager.isAppOpenedFromNotificationTap(this)){
BusProvider.getInstance().post(new AppOpenedFromNotificationClickEvent());
}
}
@Override
public void onStop() {
super.onStop();
BusProvider.getInstance().unregister(this);
}
И я получаю значение с:
LoginActivity
@Override
public void onStart() {
super.onStart();
BusProvider.getInstance().register(this);
}
@Override
public void onStop() {
super.onStop();
BusProvider.getInstance().unregister(this);
}
@Subscribe
public void onAppOpenedFromNotificationEvent(AppOpenedFromNotificationClickEvent event) {
Log.e("LOGIN", "ARRIVED" );
appOpenedFromNotification = true;
}
Этот журнал, который я помещаю в subscribe, никогда не показывается. В чем проблема?
Комментарии:
1. Возможно ли, что LoginActivity не был создан (и запущен), когда SplashActivity отправляет событие; в этом случае LoginActivity еще не зарегистрирован и, следовательно, никогда не получает событие.
2. Вероятно, мне нужно переосмыслить поток.
3. В случае, если вы хотите обработать событие позже или быть готовым к получению, когда компонент будет готов в вашем случае для входа в систему, вы можете создать липкое событие, которого должно быть достаточно greenrobot.org/eventbus/documentation/configuration /…
Ответ №1:
Используйте липкое событие
для отправки
EventBus.getDefault().postSticky(new MessageEvent("Hello everyone!"));
для получения
// UI updates must run on MainThread
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onEvent(MessageEvent event) {
textField.setText(event.message);
}