Предположим, что в нашем приложении есть 3 действия: A, B и C. И только A зарегистрирован в EventBus по адресу onStart()
и не зарегистрирован по адресу onStop()
, как объяснено здесь, и у него есть метод обработчика событий: onEvent(X event){...}
, который направляет пользователя на C после получения события X.
Но см. ниже несчастный сценарий:
- Пользователь запускает А.
- Пользователь запускает фоновую операцию на A.
- Пользователь переходит к B, нажав кнопку на A, не дожидаясь завершения фоновой операции. A будет отменена регистрация в EventBus.
- Пользователь возвращается к A. A снова будет зарегистрирован в EventBus.
- Фоновая операция, которая была запрошена до того, как пользователь перешел к B, завершена, событие X запускается из фона.
- Событие X доставляется в A, и обработчик событий (
onEvent(X event){...}
) немедленно направляет пользователя к действию C.
Это странный пользовательский опыт, как мы можем избежать доставки события в A, когда оно будет снова зарегистрировано?
Одним из решений является отмена текущих фоновых операций в onStop()
, чтобы событие никогда не запускалось; однако отмена фоновой операции не всегда возможна.
Я использую EventBus GreenRobot.