Фон
Я хотел использовать новый API JobScheduler, который был представлен на Lollipop, но, к сожалению, у него нет официального порта для pre-Lollipop.
Однако существует GcmTaskService, который обеспечивает очень похожие функции.
Проблема
Этот API довольно новый, поэтому есть очень мало мест для поиска информации о том, как его использовать ( здесь и здесь).
Вопросы
У меня есть несколько вопросов об этом новом API:
-
Кажется, что для этого требуется Google Play Services ( здесь) (кроме случаев использования Lollipop версии Android, который будет использовать обычный JobScheduler). Что делать, если сервисы Google Play недоступны?
-
Кажется, что даже если я использовал "setPersisted (true)" для повторной задачи, при перезагрузке устройства задача не будет вызываться снова. Как так? EDIT: это потому, что я пропустил разрешение RECEIVE_BOOT_COMPLETED.
-
Что такое поведение задачи по умолчанию, если я не использую "setRequiredNetwork"? Это "NETWORK_STATE_ANY"?
-
docs говорят о том, что возвращается из onRunTask, я могу вернуть любые значения "RESULT_FAILURE", "RESULT_RESCHEDULE", "RESULT_SUCCESS" (информация здесь). Кажется, что оба параметра FAILURE и SUCCESS будут делать то же самое - удалите задачу из очереди. Это правда? Если да, то в чем же разница между ними? Они работают по-разному?
-
Используются ли TaskParams только для тега задачи? Могу ли я каким-то образом передать набор задач с помощью API? В противном случае мне нужно будет установить БД для хранения того, что должно быть передано в задачи, не так ли?
-
Возможно ли, чтобы приложение получило очередь задач? Я знаю, что это возможно с помощью adb, но возможно ли это с помощью API?
-
Говорят ( здесь), что каждая задача имеет wakelock длиной до 3 минут. Что делать, если задача требует больше? Должен ли он приобрести еще один вакелон для себя? Будет ли API предупреждать о выпуске wakelock? Вот что говорят документы:
Планировщик будет держать PowerManager.WakeLock для вашей службы, однако после трех минут выполнения, если ваша задача не была возвращена это будет считаться тайм-аутом, и wakelock будет выпущенный. Перенос вашей задачи на данный момент не будет иметь никакого эффекта. Если вы подозреваете, что ваша задача будет работать дольше, чем вы должны начать свой самостоятельно использовать или использовать какой-либо другой механизм; этот API предназначенный для относительно быстрых сетевых операций.
-
Говорят ( здесь), что все сетевые задачи удаляются каждый раз, когда приложение обновляется/заменяется, и там это вызов для "onInitializeTasks", когда это происходит, и что вы можете повторно назначить их снова. Как перепланировать задания? Я не думаю, что могу даже получить список задач...
-
Можно ли задание задавать предпочтение конкретному времени в течение дня? Например, между 14: 00-15: 00?
-
Я заметил, что если вы планируете задачу, а затем принудительно останавливаете и/или очищаете данные приложения, задача все равно будет выполняться. Как я могу избежать такого поведения?