询问IntentService以获取有关其队列的信息

我有一个IntentService将需要对我的Web服务器进行的Web服务调用排队。 因此,每个意图是一个Web服务调用。

我想设置一些东西,如果我的应用程序可以请求这个IntentService,如果它有任何含有特定数据的Intents(IE:“你是否已经在等待向云查询x数据?或者我需要告诉你这样做?“)。

有什么build议我可以扩展IntentService来做到这一点? IntentService的Intent队列可以遍历吗? 或者我需要采取IntentService代码,并改变它?

我唯一的想法是向数据库添加一个表并logging哪些调用在队列中,每个日志在完成时从表中删除。

Solutions Collecting From Web of "询问IntentService以获取有关其队列的信息"

有什么build议我可以扩展IntentService来做到这一点? IntentService的Intent队列可以遍历吗? 或者我需要采取IntentService代码,并改变它?

可能后者,如果你真的想检查实际的队列。 IntentService通过HandlerThreadIntents转换为在Looper的消息队列中popup的消息。 尽pipe如此,这些都不是通过SDK公开的。 幸运的是, IntentService相当短 – 甚至没有150行。 您可以将其克隆到您自己的包中,并根据需要进行修改。 在AOSP存储库中发布新的源更新时,只需在源代码上运行diff,那么您知道Google是否对IntentService本身执行了任何您可能想要利用的大手术。

我唯一的想法是向数据库添加一个表并logging哪些调用在队列中,每个日志在完成时从表中删除。

它甚至不需要像这样持久化,因为IntentService自己的队列不是持久的。 只需在onStartCommand()维护自己的FIFO队列,链接到超类,并在onHandleIntent()的末尾将您的Intent从队列中popup。 这有可能与主队列不同步(例如,你finally想要使用,以确保你的工作从你自己的队列中popup),但是你不需要克隆这个类。

另一个解决scheme可以通过覆盖onStartCommand来解决。

这里是一个顺利的解决scheme,我发现类似的问题的灵感:)