【发布时间】:2018-06-24 13:54:26
【问题描述】:
我目前正在研究一种在应用程序之间传递流量消息(“Como-Monte Olimpino 和 Brogeda 之间的 A9 上的静态流量”)的架构。
这些消息的来源是专用应用程序:一个通过TMC 获取消息,其他人可能从 Internet 上的各种服务中提取消息。
消费者是典型用例中的导航应用程序,但其他用例也是可能的。
多个来源和消费者可以同时处于活动状态。
当一个源接收到一条新消息时,它会发送一个广播 Intent,并将该消息作为额外的消息。消费者注册BroadcastReceiver 以获取这些消息。 (消息的有效负载通常为几百字节。)
当消费者启动时,我需要为其提供一种方法来轮询每个来源以获取来源可能在其缓存中的消息(同时记住消费者无法知道哪些来源可用)。
我最初的想法是也通过广播来做到这一点:在启动时,消费者会发送一个隐式广播,每个来源都会用其当前活动消息的广播提要进行响应。
有些来源在消费者启动时可能没有运行,但缓存中可能仍有消息需要传递给消费者。如果应用程序未运行,上下文注册的BroadcastReceiver 将无法捕获轮询广播,因此在清单中声明接收者似乎是合乎逻辑的。
但是,从 Android 8.0 开始,manifest-declared receivers can no longer be used to receive implicit broadcasts。此外,this comment 建议即使在早期版本和某些版本的 Android 上,通过隐式广播唤醒应用程序也无法按预期工作(我正在开发的设备似乎也有这个限制)。
什么是让消费者从所有来源检索所有当前活动消息的好机制,即使它们没有运行?实现内容提供者看起来有点矫枉过正,那么还有哪些其他选项可用?
【问题讨论】:
标签: android polling android-broadcast