服务(事件总线订阅者)未从 Activity 接收 post

Service (event bus subscriber) not receiving post from Activity

NotificationEvent Class (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");
}

我的Activity(海报)

        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

我试过粘性和非粘性都无济于事。感谢帮助

更新

我可以确认事件总线正常工作,真正的问题是:服务仅在收到通知时运行。这是一个问题,因为每次创建 activity 时服务都需要来自主 activity 的更新字符串,而不是仅在收到通知时才需要。

可能的 Hacky 解决方案

我可以在每次应用程序启动时向自己发送通知(而不显示)。这将启动服务并允许事件总线更新字符串。这并不理想,并且会在您预算时吃掉我的 firebase 工资。因此,仍然非常感谢本地解决方案。

1st,记录一下 firebase 服务的创建,以确保它真的启动了。 第二,如果 green 作为 otto 工作,你需要在同一个进程中拥有服务 运行,否则它们将不会共享允许你在它们之间发送 post 消息的资源(线程、内存堆栈) .

最后,意图可能是 better/more 从活动到服务进行通信的可靠方式。

您可以尝试关闭 Thread =Main Srrbice 不应该在主线程

上 运行