Итак, вы сделали несколько вещей неправильно ...
Сначала, глядя на жизненный цикл активности Android , если вы регистрируете что-то в onStart()
, вам следует отменить регистрацию в onStop()
, а если вы регистрируете что-то в onResume()
, то вам следует отменить регистрацию в onPause()
. В противном случае вы регистрируете его, когда начинается действие, но когда пользователь на некоторое время помещает приложение в фоновый режим, оно отменяет регистрацию и не регистрируется снова, так как приложение не запущено, оно только что возобновилось.
Во-вторых, если вы посмотрите на EventBus GitHub , вы должны регистрировать Activity, а не класс.
Вот пример:
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {
/* Do something */
}
Теперь вы можете вызывать функцию onMessageEvent
из любого места в приложении с кодом:
EventBus.getDefault().post(new MessageEvent("update"));
На дополнительном примечании это может быть результатом вашего ProGuard. К счастью, существуют правила EventBus ProGuard , которые мы можем использовать для предотвращения удаления подписчиков из вашего кода:
-keepattributes *Annotation*
-keepclassmembers class * {
@org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
# Only required if you use AsyncExecutor
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
<init>(java.lang.Throwable);
}