鉴于您使用了 setUpdateCurrent(false),当您创建一个与另一个已安排的 OneoffTask 具有相同标记的 OneoffTask 时,除了已安排的任务之外,新任务是否仍会发生,或者新任务是否会被丢弃、解雇作为副本?
新任务被丢弃并且永远不会被安排。我对此感到惊讶,并且绝对认为文档应该如此说明。
事实证明,您可以使用以下命令自行测试:
adb shell dumpsys activity service GcmService --endpoints YourGcmTaskServiceClassName
这使您可以查看有多少待处理的任务。在您的代码中调用之后GcmNetworkManager.getInstance(this).schedule(task)
,您的包的任务数将在 adb 命令的输出中立即增加:
Tasks count by package:
com.mypackage: 1
在其下方是显示待处理任务的区域:
Pending:
(scheduled) endpoint='com.mypackage/com.mypackage.YourGcmTaskServiceClassName'
tag='testing' : [PENDING] u0
Next execution: [early=17s, expires=37s]
Not yet run.
现在,如果您尝试使用setUpdateCurrent(false)
与当前待处理的任务相同的标记来安排另一个任务,您会注意到下次运行 adb 命令时,只有一个任务仍然待处理,这是您安排的第一个任务。
如果您指定setUpdateCurrent(true)
一项任务也保持计划,但正如预期的那样,它将是新任务。
最后,如果您指定具有不同标签的任务并安排它们,任务计数将变为两个,并且两个任务都将处于挂起状态,这也是预期的。