Совместимая версия Android JobScheduler - альтернатива [закрыта]

Есть ли библиотека или хотя бы какой-нибудь пример с открытым исходным кодом, который обеспечивает функциональность нового Android-L JobScheduler API. Реализовать мою собственную версию (с очень ограниченным функционалом) несложно, но, с другой стороны, и не тривиально.

Подводя итог, есть ли что-нибудь, что хотя бы может предоставить подмножество функций нового API JobScheduler?


person Gordon Freeman    schedule 08.08.2014    source источник


Ответы (4)


Бэкпорт JobScheduler Android Lollipop на API 10+ https://github.com/evant/JobSchedulerCompat

person Vijay    schedule 24.12.2014
comment
Большое спасибо! Я дам ему попробовать - person Gordon Freeman; 24.12.2014
comment
@GordonFreeman, ты пробовал? Стабильный? Насколько близок к оригинальному L JobScheduler? - person surlac; 07.01.2015
comment
Обратите внимание, что если вы не находитесь в редкой ситуации, когда его невозможно использовать, GcmNetworkManager является официальным API обратной совместимости. Все остальное, что вы используете (в виде библиотеки, которую вы включаете в свое приложение), будет гораздо худшим решением — вы не можете написать эквивалент JobScheduler без процесса, работающего (почти) все время, и вы хотите, чтобы этот процесс быть в сервисах Google Play, а не в собственном приложении, которое много работает и тратит впустую оперативную память пользователя. - person hackbod; 22.02.2016
comment
@hackbod, вот почему Службы Google разряжают 50-90% батареи на всех моих устройствах;) Я по-прежнему предпочитаю AlarmManager, потому что он работает, даже если службы недоступны на устройстве. - person deviant; 02.01.2017

Просто используйте GCM Network Manager. Он предоставляет API для планирования задач. Он доступен на устройствах до уровня API 21. На устройствах уровня API 21+ внутри используется планировщик заданий.

person Nouman Hanif    schedule 02.11.2015
comment
Чтобы сэкономить время другим людям: GCM Network Manager, похоже, требует Android версии 2.3 или выше. (Если кто-то знает по-другому, пожалуйста, дайте мне знать.) - person LarsH; 16.02.2016

Вы можете сделать некоторые из них самостоятельно, но, к сожалению, само приложение не может обеспечить сопоставимую функциональность с API-интерфейсом планировщика заданий. Проблема в том, что отслеживание нескольких критериев выполнения, предоставляемых планировщиком заданий (в частности, состояния зарядки, бездействия устройства и подключения), потребует, чтобы ваше приложение работало постоянно только для того, чтобы получать широковещательные сообщения об этих состояниях. постоянно будет перевешивать другие преимущества, даже если ваше приложение — единственное, что делает это. Если каждое приложение будет пытаться работать непрерывно, чтобы выполнять один и тот же мониторинг, пользовательский опыт будет ужасным.

Самое близкое, что вы можете сделать разумным образом самостоятельно, - это запускать службу "время от времени", чтобы проверить интересующие вас ограничения, а затем отступить и повторить попытку позже, если они не выполняются в то время, когда вы проверяете. Вы также должны быть осторожны при планировании событий — в частности, если вы собираетесь использовать сеть, вам нужно быть чрезвычайно осторожным, чтобы случайно не вызвать много устройства, чтобы подключиться к сети в то же время. Операторы сотовой связи очень недовольны, если видят одновременный трафик вашего приложения со всех устройств в своей сети. Кроме того, не забывайте по возможности избегать точных сигналов тревоги, чтобы у ОС была возможность пакетировать работу вашего приложения вместе с другими.

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

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

person ctate    schedule 15.09.2014
comment
Я знаю, что JobScheduler, который будет запущен с Android L, имеет много преимуществ, поскольку он будет работать на уровне ОС и будет более эффективным, чем любое другое решение, которое я придумаю. Дело в том, что я хочу использовать новый API, чтобы сделать мое приложение более эффективным на новой платформе, но мне также нужно такое же поведение на старых устройствах, хотя это будет не так хорошо, как сам JobService. Какая-то библиотека совместимости, если нет такого решения, я не буду переходить на JobScheduler в ближайшее время. - person Gordon Freeman; 17.09.2014
comment
Как упоминалось ниже @nouman-hanif, средства GCM Network Manager в наборе сервисов Google Play обеспечивают семантику, подобную JobScheduler, в старых версиях Android и используют JobScheduler непосредственно в последних версиях. - person ctate; 26.12.2015
comment
Не могли бы вы уточнить, что вы подразумеваете под диспетчером синхронизации? У вас есть ссылка? Веб-поиск возвращает множество различных результатов для Sync Manager. - person LarsH; 16.02.2016
comment
Диспетчер синхронизации — это системный объект, отвечающий за запуск адаптеров синхронизации вашего приложения и так далее. Я вижу, что на самом деле это не называется в документации, извините за это. Я бы начал с базовой документации по возможностям адаптера синхронизации в Android и пошел дальше: developer.android.com/training/sync-adapters/index.html - person ctate; 19.02.2016

По состоянию на ноябрь 2015 года в этой библиотеке https://github.com/evant/JobSchedulerCompat указано, что она не поддерживается активно

Внимание, этот проект не поддерживается!

Вот библиотека под названием Trigger https://github.com/airk000/Trigger, которая также претендует на звание backport службы JobScheduler и имеет следующие функции в соответствии с его документацией.

  1. поддержка сочетания нескольких условий с одной работой
  2. внутренние условия: зарядка устройства, безлимитная сеть и состояние ожидания
  3. поддержка задания сохранения, означает, что задание с возможностью сохранения может быть запущено после перезагрузки устройства
  4. Крайний срок работы поддержки, последний шанс быть запущенным
  5. разрешить выполнение вашего задания в фоновом режиме или в основном потоке, следуйте вашей конфигурации
person PirateApp    schedule 04.11.2015
comment
Чтобы сэкономить время: для триггера требуется уровень API 14+. - person LarsH; 16.02.2016