2015-07-20 2 views
1

Есть три вида деятельности A, B и CМогу ли я использовать связь EventBus в действии?

  1. Регистрация EventBus в деятельности по onCreate() и разрегистрировать на onDestroy() и метод onEvent(TestEvent e);

  2. активность A начинается активность B

  3. Деятельность B начинает деятельность C

  4. В деятельности C:

    EventBus.getDefault().post(new TestEvent("close A")); 
    

Я использую EventBus таким образом, и он работает хорошо. Что-то не так в моем коде?

+0

Если это хорошо работает, в чем смысл вопроса? – DDsix

+0

мой коллега сказал, что я не могу использовать EventBus таким образом, и я не уверен, что использование EventBus в этом случае прекрасное. Из-за проблемы жизненного цикла работы я помещаю регистр в onCreate() и не регистрирую в onDestroy(). –

ответ

1

Все в порядке. EventBus является потокобезопасным и имеет множество методов, позволяющих упростить работу, например onEventMainThread, onEventBackgroundThread, onEventAsync.

Вещь с вашим кодом такова: ваша деятельность будет продолжать получать события, даже если она находится в фоновом режиме. И это нормально (в данном конкретном случае). Если, однако, вы должны осуществить что-то еще в будущем, имейте это в виду:

  • OnCreate регистр -> OnDestroy незарегистрированный
  • OnStart регистр -> OnStop незарегистрированный
  • onResume регистр -> OnPause unregister

И еще есть что-то еще: вы должны быть абсолютно уверены, что ваша деятельность регистрируется только один раз. Потому что, если вы регистрируетесь более одного раза, вы получите столько же событий, сколько количество регистров. Таким образом, пожалуйста, измените реестр, как это:

if (!EventBus.getDefault().isRegistered(this)) { 
    EventBus.getDefault().register(this); 
} 

Если вам нужно больше информации, пожалуйста, подробнее о EventBus here.

Однако, если вы следуете этим простым правилам, жизненный цикл вашей деятельности. Я использую его много, и я не сталкиваюсь с проблемами.