【问题标题】:How does START_REDELIVER_INTENT behave with multiple Intents?START_REDELIVER_INTENT 如何处理多个 Intent?
【发布时间】:2017-01-12 21:17:22
【问题描述】:

如果一个 Service 使用不同的 Intent 多次调用 startService(),当应用程序因内存不足而被终止后重新启动时,它与 START_REDELIVER_INTENT 的行为如何?

示例:我用不同的Intents 呼叫startService(intent, class) 三次。在服务自行停止之前,操作系统会因内存使用而终止应用程序或服务。稍后,服务返回。根据 START_REDELIVER_INTENT onStartCommand() 应该使用启动它的原始 Intent 调用。这三个都会被调用吗?只有第一个?只有最后一个?

我考虑过对其进行测试,但我想知道预计会发生什么,而不仅仅是我的特定设备会做什么。谢谢!

【问题讨论】:

  • 我认为它应该通过stopSelf() 的单参数版本重新交付您未标记为已完成的所有内容。不过,docs for it 在这个话题上很模糊。

标签: android android-service


【解决方案1】:

采用的答案不正确。

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

在服务调用 {@link #stopSelf(int)} 并使用提供给 {@link #onStartCommand} 的开始 ID 之前,此 Intent 将保持计划重新传递

意思是当一个intent来了,调用了onStartCommand,如果我们不stopSelf这个intent关联的onStartCommand的startId,系统就把这个intent当作not-handled,那么当服务重新创建,这些not-handled 意图将重新交付给onStartCommand

所以,它会被调用 3 次。

【讨论】:

    【解决方案2】:

    这三个都会被调用吗?只有第一个?只有最后一个 一个?

    只有最后一个。

    documentation 对此非常清楚:

    ...如果该服务的进程在启动时被杀死(在从onStartCommand() 返回之后),那么它将被安排重新启动并且最后交付的 Intent 重新交付到 再次通过onStartCommand()

    【讨论】:

      猜你喜欢
      • 2017-03-16
      • 1970-01-01
      • 2016-01-14
      • 1970-01-01
      • 2021-05-11
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      • 2011-03-25
      相关资源
      最近更新 更多