NotificationEvent类(POJO)
public class NotificationEvent {
LoggedInUserInterface liui;
public NotificationEvent(LoggedInUserInterface liui) {
this.liui = liui;
}
}
MyFirebaseMessagingService(订阅者)
LoggedInUserInterface liui;
@Override
public void onCreate() {
super.onCreate();
EventBus.getDefault().register(this);
}
@Override
public void onDestroy() {
EventBus.getDefault().unregister(this);
super.onDestroy();
}
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onMessageEvent(NotificationEvent notificationEvent) {
LoggedInUserInterface liui = notificationEvent.liui;
this.liui = liui;
Log.d("notifyUser", "EventBus call received in service");
}
我的活动(海报)
EventBus.getDefault().postSticky(new NotificationEvent(this));
Log.d("notifyUser", "Activity post call done");
错误
EventBus: No subscribers registered for event class com.myCompany.myApp.NotificationEvent
No subscribers registered for event class org.greenrobot.eventbus.NoSubscriberEvent
成功日志
Activity post call done
失败日志
EventBus call received in service
我尝试过粘性和不粘性均无济于事。感谢帮助
UPDATE
我可以确认事件总线是否正常工作,真正的问题是:该服务仅在收到通知时运行。这是一个问题,因为每次创建活动(而不是仅在收到通知时),服务都需要从主要活动中获取更新的字符串。
可能的棘手解决方案
我可以在每次启动应用程序时向自己发送通知(而不显示它)。这将启动服务,并允许事件总线更新字符串。这是不理想的,并且会在预算时吞噬我的薪水。因此,仍将不胜感激本地解决方案。
首先,将日志输入Firebase服务创建以确保其真正开始。第二,如果绿色作为otto起作用,则您需要使服务在同一进程中运行,否则它们将不会共享资源(线程,内存堆栈),而您无法在它们之间发布消息。
最后,意图可能是从活动到服务进行交流的更好/更可靠的方式。
您可以尝试摘下Thread = MainSrrbice不应在主线程上运行