START_REDELIVER_INTENT如何处理多个Intent?

时间:2017-01-12 21:17:23

标签: android android-service

如果某个服务使用不同的Intent对startService()进行了多次调用,那么当应用程序因内存不足而被杀死后重启时,它如何与START_REDELIVER_INTENT一起使用?

示例:我使用不同的startService(intent, class)三次致电Intents。在服务停止之前,由于内存使用,操作系统会终止应用程序或服务。之后,服务返回。根据{{​​1}} START_REDELIVER_INTENT应该使用启动它的原始Intent调用。这三个人都会被召唤吗?只有第一个?只有最后一个?

我考虑过对它进行测试,但我想知道所谓的会发生什么,而不仅仅是我的具体设备所做的事情。谢谢!

2 个答案:

答案 0 :(得分:2)

  

这三个人都会被召唤吗?只有第一个?只有最后一个   一个?

只有最后一个。

documentation对此很清楚:

...如果此服务的进程在启动时被终止(从<ul> <li>One</li> <li>Two</li> <li>Three</li> <li>Four</li> </ul>返回后),那么它将被安排重新启动并且最后一次传递的Intent重新传递到  它再次通过onStartCommand()

答案 1 :(得分:2)

采纳的答案不正确。

他没有看到接下来的几个字:

  

此Intent将保持计划重新发送,直到服务调用{@link #stopSelf(int)}并将起始ID提供给{@link #onStartCommand}

这意味着当一个意图出现并onStartCommand被调用时,如果我们没有停止与onStartCommand的startId相关联的意图,系统会将此意图视为not-handled,因此,当服务重新创建时,这些not-handled意图将重新发送到onStartCommand

所以,它将被调用三次。