向IntentService询问有关其队列的信息

时间:2011-03-18 19:39:54

标签: android intentservice android-intentservice

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

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

有关于如何扩展IntentService以执行此操作的建议吗?是否可以遍历IntentService的Intent队列?或者我需要采用IntentService代码并改变它吗?

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

2 个答案:

答案 0 :(得分:21)

  

有关于如何扩展IntentService以执行此操作的建议吗?是否可以遍历IntentService的Intent队列?或者我需要采用IntentService代码并改变它吗?

可能是后者,如果你真的想检查实际的队列。 IntentService通过IntentsLooper转换为HandlerThread的邮件队列中弹出的邮件。但是,这些都不是通过SDK公开的。幸运的是,IntentService相当短 - 甚至不到150行。您可以将其克隆到您自己的包中,并根据需要进行修改。在AOSP存储库中发布新的源更新时,只需在源上运行差异,这样您就可以知道Google是否对IntentService本身进行了任何您可能想要利用的大手术。

  

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

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

答案 1 :(得分:1)

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

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