使用GcmNetworkManager
,我的理解是两个具有相同标记的任务永远不能同时运行。这是根据文档here
每个服务,具有相同标记的两个任务将永远不会执行 同时。新计划的任务是否应该在现有任务到达时到达 任务仍在运行,新任务将被删除。此外, 可以同时调度不同的任务,每个任务在a中调用 单独的线程,如果他们的日程表重叠。由您来确保 调度多个任务时的线程安全性。
我的问题是:
如果我们安排任务(OneoffTask
):
Task myTask = ... ;// create task of MY_TAG
gcmNetworkManager.schedule(myTask);
然后稍后我们取消它,但让我们假设它正在运行(它的GcmTaskService:onRunTask
仍在其线程上运行):
// Cancel task
// At this point GcmTaskService:onServiceRun could still be running (on a different thread)!
// `GcmTaskService:onRunTask` will continue to run
gcmNetworkManager.cancelTask(MY_TAG, ..);
然后在以后的另一个时间,我们重新安排相同的标签:
// Re-schedule task.
// At this point GcmTaskService:onRunTask could still be running (on a different thread)!
Task myTask = ... ;// create task of MY_TAG
gcmNetworkManager.schedule(myTask);
当重新安排的任务运行GcmTaskService:onRunTask
时,GcmNetworkManager
是否仍然知道有任务正在运行(GcmTaskService::onRunTask()
还没有返回?(请注意,这一点它的标签被取消了)
或者它实际上是否会启动新的GcmTaskService
并调用GcmTakService:onRunTask
,因为其标记已被取消?
这意味着实际上可能有两个GcmTaskService:onRunTask
同时运行同一个标签。