GcmTaskService:取消并为当前正在处理的任务安排标记

时间:2017-04-29 08:23:06

标签: java android multithreading gcm-network-manager gcmtaskservice

使用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同时运行同一个标签。

0 个答案:

没有答案