Android 如果操作系统已终止IntentService,该怎么办?

Android 如果操作系统已终止IntentService,该怎么办?,android,intentservice,Android,Intentservice,假设我们有一个IntentService的实现,然后我们从Activity开始,然后在队列中添加几个其他Intent以进行处理。现在我们有第一个Intent正在处理中,剩下的Intent在队列中。现在,让我们想象一下,操作系统出于可以理解的原因杀死了我们的应用程序进程。问题是: 如何重新启动IntentService 如何恢复队列 嗯,我知道总有一个服务可以覆盖它的onStartCommand()并告诉服务该做什么。但是我需要一个IntentService,因为它的队列模型。IntentServ

假设我们有一个
IntentService
的实现,然后我们从
Activity
开始,然后在队列中添加几个其他
Intent
以进行处理。现在我们有第一个
Intent
正在处理中,剩下的
Intent
在队列中。现在,让我们想象一下,操作系统出于可以理解的原因杀死了我们的
应用程序
进程。问题是:

  • 如何重新启动
    IntentService

  • 如何恢复队列


  • 嗯,我知道总有一个
    服务
    可以覆盖它的
    onStartCommand()
    并告诉
    服务
    该做什么。但是我需要一个
    IntentService
    ,因为它的
    队列
    模型。

    IntentService
    不是您想要使用的,如果工作队列需要持久化。如果将许多
    Intent
    s发送到
    IntentService
    ,然后进程被Android终止,则无法重建队列
    IntentService
    只是使用内部
    处理程序将
    Intent
    排队,而这些不会在任何地方持久化。他们只是迷路了


    如果我是你,我会亲自实施。
    IntentService
    的代码没有那么大,您可以查看它并将其用作自己的
    服务的模型。您需要将队列写入数据库,以便它是持久的。从
    onStartCommand()
    返回
    START\u STICKY
    ,这样,如果您的
    服务因资源需求而停用,Android将自动重新启动它。

    谢谢,David。第一个问题呢?如果IntentService被终止,如何重新启动它?要重新启动它,您必须知道它已被终止。正如我在回答中所说,
    IntentService
    在这里不是正确的技术。但是,由于您似乎希望在任何情况下都使用它,因此可以在派生类的构造函数中调用
    setIntentRedelivery(true)
    。这将导致Android自动重新启动
    IntentService
    ,如果它在处理
    Intent
    时被终止(即:如果Android在工作时终止了进程)。不,我将使用您建议的方法,只是想知道重新启动IntentService的可能方法。谢谢