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

Java 服务(事件总线订户)未从活动接收post,java,android,event-bus,greenrobot-eventbus-3.0,Java,Android,Event Bus,Greenrobot Eventbus 3.0,NotificationEvent类(POJO) } MyFirebaseMessagingService(订户) 我的活动(海报) 错误 成功日志 Activity post call done EventBus call received in service 不成功日志 Activity post call done EventBus call received in service 我试过粘的和不粘的都没有用。谢谢你的帮助 更新 我可以确认事件总线是否工作,真正的问题是:服务仅在

NotificationEvent类(POJO)

}

MyFirebaseMessagingService(订户)

我的活动(海报)

错误

成功日志

Activity post call done
EventBus call received in service
不成功日志

Activity post call done
EventBus call received in service
我试过粘的和不粘的都没有用。谢谢你的帮助

更新

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

可能的黑客解决方案


我可以在每次启动应用程序时给自己发送一个通知(而不是显示它)。这将启动服务并允许事件总线更新字符串。这并不理想,会耗尽我的firebase现收现付预算。因此,本地解决方案仍将非常受欢迎。

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


最后,意图可能是从活动到服务的更好/更可靠的沟通方式

您可以尝试取下Thread=Main
srbice不应在主线程上运行

我无法使用intent发送数据,因为我无法覆盖服务的onStartCommand()-这是最后一种方法。我在onCreate()中添加了日志:日志没有在LogCat中打印。我认为这项服务只有在收到来自firebase的消息/通知时才会启动。现在这听起来像是一个棘手的问题——我现在无法到计算机上阅读文档。你最感兴趣的是什么,a)知道什么时候发生了什么事情,或者b)发送数据,以便服务可以在认为合适的时候使用它?传统上,您可以通过使用保存该数据的单例来求解b,在某些情况下,将其称为XyzRepository是合适的。现在,如果您想要的是一个,请努力将该逻辑置于服务之外,对我来说,这似乎是一种代码味道。理想情况下,我希望从活动向服务发送一个接口对象,使服务能够调用活动中的方法。至少我想从活动向服务发送一个字符串。我对B更感兴趣。这里有两件事情活动不应该做:1-保存值以便其他对象可以获取最新的,2-具有其他对象可以调用的方法。虽然2经常因为复杂的原因发生,但我认为这不是你的情况。我将这样做:一个运行逻辑的XManager类和一个存储数据的XRepository。活动将数据发送给repo,repo可以选择将数据写入共享首选项。服务从X管理器调用方法,X管理器从存储库中读取数据。它是一个更加灵活的体系结构,避免了活动、服务和消息总线特有的问题。我希望这是有意义的。两个问题:什么是共同偏好?服务将如何在X manager中调用方法?很好,我将线程模式更改为POST-默认设置。请阅读问题中的更新,因为我已经缩小了问题的范围。
Activity post call done
EventBus call received in service