服务(事件总线订户)未从活动接收帖子

问题描述 投票:0回答:2

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

我可以确认事件总线是否正常工作,真正的问题是:该服务仅在收到通知时运行。这是一个问题,因为每次创建活动(而不是仅在收到通知时),服务都需要从主要活动中获取更新的字符串。

可能的棘手解决方案

我可以在每次启动应用程序时向自己发送通知(而不显示它)。这将启动服务,并允许事件总线更新字符串。这是不理想的,并且会在预算时吞噬我的薪水。因此,仍将不胜感激本地解决方案。

java android event-bus greenrobot-eventbus-3.0
2个回答
0
投票

首先,将日志输入Firebase服务创建以确保其真正开始。第二,如果绿色作为otto起作用,则您需要使服务在同一进程中运行,否则它们将不会共享资源(线程,内存堆栈),而您无法在它们之间发布消息。

最后,意图可能是从活动到服务进行交流的更好/更可靠的方式。


0
投票

您可以尝试摘下Thread = MainSrrbice不应在主线程上运行

© www.soinside.com 2019 - 2024. All rights reserved.