10

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

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

关于如何扩展 IntentService 来做到这一点有什么建议吗?IntentService的Intent队列可以遍历吗?还是我需要获取 IntentService 代码并对其进行更改?

我唯一的另一个想法是向数据库中添加一个表并记录队列中的调用,完成后从表中删除每个日志。

4

2 回答 2

22

关于如何扩展 IntentService 来做到这一点有什么建议吗?IntentService的Intent队列可以遍历吗?还是我需要获取 IntentService 代码并对其进行更改?

如果您真的想检查实际队列,可能是后者。IntentService将通过 aIntents的消息队列中弹出的消息变成消息。但是,这些都没有通过 SDK 公开。幸运的是,它相当短——甚至没有 150 行。您可以将其克隆到您自己的包中并根据需要进行修改。只需在 AOSP 存储库中发布新的源更新时对源运行 diff,这样您就知道 Google 是否对自己进行了任何您可能想要利用的重大手术。LooperHandlerThreadIntentServiceIntentService

我唯一的另一个想法是向数据库中添加一个表并记录队列中的调用,完成后从表中删除每个日志。

它甚至不需要像那样持久化,因为IntentService' 自己的队列不是持久化的。只需维护您自己的 FIFO 队列onStartCommand(),链接到超类,并IntentonHandleIntent(). 这有可能与主队列不同步(例如,您将希望使用它finally来确保将工作从自己的队列中弹出),但您不必克隆该类。

于 2011-03-18T20:18:31.360 回答
1

另一种解决方案可能是通过覆盖 onStartCommand 来解决它。

是一个顺利的解决方案,我在其中找到了类似问题的灵感:)

于 2011-10-26T21:16:11.167 回答