我目前在我的android应用程序中有两项服务,为简单起见,我将拨打DataService
和CommunicationService
。 DataService
从内容提供者检索数据,然后将其序列化并传递到CommunicationService
。然后CommunicationService
将序列化的数据分成数据包,并一次发送给第三方设备一个数据包。 CommunicationService
知道发送下一个数据包的方式是通过BroadcastReceiver
。从广播接收器发送未绑定服务消息
CommunicationService
由DataService
开始,但是未结合的,并且具有比DataService
更长的寿命(其一旦其已经开始CommunicationService
结束时)。 BroadcastReceiver
调用CommunicationService
的方法让它知道现在是发送下一个数据包的时间的最佳方法是什么?我见过的两个想法是:
- 在BroadcastReceiver中绑定服务,调用方法并解除绑定。这似乎是最好的情况下非常糟糕的做法,最坏的情况是不可行的。
peekService
,尽管看起来这只适用于已经绑定了至少一次的服务,该服务将其排除。
我知道这个架构看起来有点混乱,但CommunicationService
的目标是能够在与第三方设备通信的多个应用中重复使用它;因此,它不能太紧密地绑定到特定的实现。
你不能从'BroadcastReceiver'调用'context.bindService()'。你能解释一下为什么你不能只从接收器调用'startService()'?即使服务已经运行,它也会收到一个'onStartCommand()' – Karakuri
的调用。我的印象是,startService()会启动一个服务的新实例 - 没有意识到它只是表示现有的服务。这似乎是最简单的解决方案,所以我最终可能会用它!谢谢! – Aaron