gpt4 book ai didi

java - 服务(事件总线订阅者)未接收来自 Activity 的帖子

转载 作者:行者123 更新时间:2023-12-02 09:14:26 25 4
gpt4 key购买 nike

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

我的 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 的更新字符串,而不是仅在收到通知时。

可能的黑客解决方案

我可以在每次启动应用程序时向自己发送一条通知(而不是显示它)。这将启动服务并允许事件总线更新字符串。这并不理想,而且会在预算时耗尽我的火力工资。因此,本地解决方案仍然会受到极大的赞赏。

最佳答案

第一,记录 Firebase 服务创建以确保其真正启动。第二,如果 green 作为 otto 工作,您需要让服务在同一进程中运行,否则它们将不会共享允许您在它们之间发布消息的资源(线程、内存堆栈)。

最后, Intent 可能是从 Activity 到服务的更好/更可靠的通信方式。

关于java - 服务(事件总线订阅者)未接收来自 Activity 的帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59120822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com