null意图重新发送到Service的onStartCommand()方法

7
在Android文档中,Service的“onStartCommand()”有一个被给定为参数的Intent,根据文档所述:“作为startService(Intent)提供的Intent。如果服务在其进程消失后被重新启动,并且它之前返回了除START_STICKY_COMPATIBILITY之外的任何内容,则此值可能为null。”
然而,返回值START_REDELIVER_INTENT应该在重新启动服务时返回原始意图。
有人能解释一下为什么即使将标志设置为START_REDELIVER_INTENT,意图也可能为空吗?

+1:我也观察到了相同的行为:START_REDELIVER_INTENT会给出空的意图。然而,大多数设备都是来自不太知名的品牌,如Alps、Tecno和Wiko。到目前为止,我还没有看到任何主流品牌的设备。 - Roy Solberg
实际上,查看其他问题时,我发现Google自己的com.google.android.gms.measurement.AppMeasurementService在Itel设备上的onStartCommand()中崩溃了,出现了NullPointerException。看起来他们在没有检查intent是否为空的情况下使用了intent.getAction()。他们使用START_NOT_STICKY,其中服务不应该重新启动(这应该避免空意图)。 - Roy Solberg
1个回答

2
您是否可能将START_FLAG_REDELIVERYSTART_REDELIVER_INTENT混淆了?您的帖子中写道:“返回值START_FLAG_REDELIVERY”。该常量不是从onStartCommand返回的值之一,而是作为flags参数传递到onStartCommand中的位值之一。 START_FLAG_REDELIVERYSTART_STICKY的值都为1。如果您错误地在onStartCommand()末尾使用return START_FLAG_REDELIVERY,则服务将以粘性模式重新启动,并且如果没有待处理的启动命令,则使用空intent。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接