3

Я пытаюсь обвести голову поведением setTag и setUpdateCurrent из OneoffTask в оснастке GcmNetworkManager.
The documentation of setUpdateCurrent говорит, что это:Уточнение setUpdateCurrent на OneOffTask

Необязательный сеттер, чтобы указать, следует ли эта задача переопределять уже существующие задачи с тем же тегом. По умолчанию это значение равно false, что означает, что новая задача не будет переопределять существующую.

Fair достаточно, но это не говорит, что будет происходить с поставленной задачей, это говорит только одна вещь, которая будет не произойдет - то задача не будет отменено. :) Мне непонятно, если использование setUpdateCurrent означает, что дублированные задачи разрешены, это означает, что они отбрасываются?

Чтобы было ясно, что мой вопрос заключается в следующем: Учитывая то, что вы использовали setUpdateCurrent (ложь), когда вы создаете OneoffTask с тем же тегом, как другой OneoffTask, что уже запланировано, будет новая задача по-прежнему происходят в дополнение к уже запланированный, или новая задача будет выброшена, опущена как дубликат?

ответ

8

Учитывая, что вы использовали setUpdateCurrent (ложь), при создании 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), одно задание также остается запланированным, но, как и ожидалось, это будет новая задача.

Наконец, если вы зададите задачи с разными тегами и планируете их, счет задачи станет два, и обе задачи будут ожидаться, что также ожидается.

Смежные вопросы