Я пытаюсь использовать GCM Network Manager для отправки журналов в бэкэнд-сервис. У нас есть будильник, который запускается каждый час, который создает OneoffTask, который при его выполнении вызовет бэкэнд-сервис с сообщением журнала.GCM Network Manager потерял работу
Это работает, НО очень большое количество Заданий теряется (путь более половины). Сначала я подумал, что это имеет какое-то отношение к нашему бэкенду или сети, но после добавления тонны регистрации файлов получается, что onRunTask в службе никогда не запускается для этих задач (но они определенно планируются. ? которые они потеряли ли я непонимание API, или OneoffTasks просто не надежен
Это как OneoffTask планируется:
GcmNetworkManager.getInstance(context).schedule(new OneoffTask.Builder()
.setService(AvroLogService.class)
.setExtras(bundle)
// A mandatory tag which identifies the task
// We add a unique hash to the tag to make sure that
// tasks are logged and not thrown away as dupes.
// See: http://stackoverflow.com/q/34528960/304262
.setTag(java.util.UUID.randomUUID().toString())
// Persist to disk, even across boots:
.setPersisted(true)
// Sets a time frame for the execution of this task in seconds.
// This specifically means that the task can either be
// executed right now, or at latest at a certain point:
.setExecutionWindow(0, TWO_WEEKS_IN_SECONDS)
.build());
Опять же, это не работает, а только часть сообщений For. сообщения, которые впоследствии потеряны, приведенный выше код: определенно выполнено (я добавил регистрацию файла, чтобы проверить это), но никогда не существует соответствия nding onRunTask запущен для потерянных.
Я проверил, что:
- Manifest обновляется в соответствии с Руководство по внедрению Менеджер сети (https://developers.google.com/cloud-messaging/network-manager)
- AvroLogService (моя служба) расширяет GcmTaskService
- Он переопределяет onRunTask
- Приложение имеет RECEIVE_BOOT_COMPLETED.
- AvroLogService НЕ переопределяет onStartCommand.
Я потерян. Может ли кто-нибудь рассказать об этом?
Возможно, вы захотите проверить это сообщение [GitHub post] (https://github.com/google/gcm/issues/67) для дополнительного идеи и примеры использования «GcmNetworkManager». Если вы этого еще не сделали, в сообщении упоминалось о необходимости обеспечить логику выполнения вашей задачи внутри 'onRunTask()', и вам нужно отслеживать состояние, которое вам нужно для этой конкретной задачи что ты хочешь. – Teyam
Благодарим за попытку помочь, но этот пост не предоставил никаких существенных сведений для этой проблемы. В сообщении говорится о передаче данных в задачи, и я использую функцию setExtras (которая, похоже, не существовала, когда была написана запись), но это не имеет особого отношения к этой проблеме. Проблема в том, что код внутри onRunTask прерывается с ошибкой. То есть он выполняется много раз, но он также потеряет многие из поставленных задач. Это похоже на большой процент задач, которые просто теряются и никогда не достигают onRunTask, хотя они успешно поставлены в очередь. –