GcmTaskService: отмена и планирование тега для задачи, которая в данный момент обрабатывается

С GcmNetworkManagerНасколько я понимаю, две задачи с одним тегом никогда не могут выполняться одновременно. Это согласно документации здесь

Для каждой службы две задачи с одним и тем же тегом никогда не будут выполняться одновременно. Если новая запланированная задача поступит во время выполнения существующей задачи, новая задача будет удалена. Кроме того, разные задачи могут планироваться одновременно, каждая из которых вызывается в отдельном потоке, если их расписания перекрываются. Это зависит от вас, чтобы обеспечить безопасность потоков при планировании нескольких задач.

Мой вопрос:

Если мы наметим задачу (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 ответов

Другие вопросы по тегам