2015-02-17 2 views
30

Я смотрел учебник по планированию Vogella. Он упоминает Job Scheduler API, который был представлен в API 21 Android. Мой вопрос заключается в том, может ли он реализоваться в API ниже 21 (Lollipop), но не меньше, чем Android версии 3 (Honeycomb)?Использование планировщика заданий в Android API <21

+1

Я считаю, что это по-прежнему актуальный ответ; http://stackoverflow.com/a/27633880/680519. – harism

+0

в упоминаемом учебнике, он сравнивает планировщик заданий с диспетчером аварийных сигналов и адаптером синхронизации, оба решения, которые существуют в нижней части apis и имеют аналогичные функциональные возможности. – njzk2

ответ

33

теперь (после I/O 2015), вы также можете используйте новый GcmNetworkManager. Как его использовать и как он работает, здесь описывается - https://developers.google.com/cloud-messaging/network-manager

Он делает много классных вещей, как будто он сохраняет ваши задачи за счет перезагрузки. На Lolipop он использует JobScheduler, на пре-Lolipop он использует свою собственную реализацию.

EDIT:

Пример кода о том, как использовать его: https://github.com/jacktech24/gcmnetworkmanager-android-example

+0

Связано ли это с GCM? Может ли любое приложение, даже те, которые не имеют никакого отношения к GCM, использовать его? Может ли это быть полной заменой JobScheduler? Каковы недостатки? –

+6

Это не связано с GCM в любом случае, о чем вы должны заботиться. Это не замена планировщика заданий, потому что это связано только с задачами, связанными с Интернетом, но это способ получить сетевой планировщик заданий по сетям на более ранних версиях Android. – filipproch

+2

Может ли он также использоваться для материалов, не связанных между собой? Кроме того, знаете ли вы хороший пример того, как его использовать (кроме ссылки, которую вы предоставили)? –

5

Вы можете посмотреть на JobSchedulerCompat library.

Однако, как отмечают авторы, есть причина, по которой JobScheduler доступен только от Lollipop и далее, поэтому обратите внимание на это. Цитирование:

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

+2

тоже эта библиотека не рекомендуется для производства использование. – njzk2

+0

Да. Обновленный ответ, чтобы подчеркнуть это. – Sebastiano

7

Есть несколько способов запуска «рабочих мест» перед леденец.

Как уже упоминалось вы можете использовать JobSchedulerCompat библиотеку, но эта библиотека имеет огромное значение по сравнению с Lollipop по умолчанию API на:

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

Еще один вариант, который вы можете попробовать - это API AlarmManager. Этот API можно использовать для планирования заданий, но одно отличие состоит в том, что AlarmManager не имеет ограничений, кроме времени для выполнения заданий.

Поскольку KitKat API AlarmManager также выполняет задания, если они не запланированы с помощью «точных» методов. Перед тем, как задания KitKat не будут загружены.

Если ваша цель состоит в том, чтобы синхронизировать данные, чем API Sync-адаптер может быть полезным: Sync-Adapter

Ссылки: AlarmManager, JobSchedulerCompat

14

Существует очень хороший и мощный job scheduler library с Evernote. Он использует лучший метод на каждом уровне SDK и дает вам один очень чистый и элегантный интерфейс для планирования и запуска заданий.

1

См. this Ссылка об обзоре API Android N Preview.

GCMNetworkManager, входящий в состав Служб Google Play, который предлагает аналогичное планирование работы с совместимостью через устаревшие версии Android.

11

Рекомендуемый подход для предварительных леденцов устройств является использование https://github.com/firebase/firebase-jobdispatcher-android#user-content-firebase-jobdispatcher-

Подробнее о https://developer.android.com/topic/performance/scheduling.html#fjd

Firebase JobDispatcher является открытым исходным кодом библиотеки, которая предоставляет API, аналогичное JobScheduler на платформе Android . Firebase JobDispatcher служит для уровня совместимости JobScheduler для приложений, ориентированных на версии Android ниже 5.0 (API уровня 21).

Firebase JobDispatcher поддерживает использование Google Play услуги в виде реализации для диспетчеризации (погонных) рабочих мест, но библиотека также позволяет определить и использовать другие реализации: Например, вы может решить использовать JobScheduler или написать собственный собственный код. Из-за этой универсальности мы рекомендуем использовать эту Firebase JobDispatcher, если ваше приложение нацелено на версию Android ниже 5.0 (уровень API 21).

Дополнительную информацию о Firebase JobDispatcher см. В его документации и исходном коде .

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