Я бы не стал использовать JobScheduler или AlarmManager.WorkManager сидит поверх них и обрабатывает все для вас, не имеет значения, на какой версии Android работает ваше приложение.
https://codelabs.developers.google.com/codelabs/android-workmanager Вот хороший пример WorkManager, где они используют Worker дляобработка изображений, но это очень хорошо для выполнения любых длительных задач.Вы можете указать ограничения на различные вещи, в том числе, если вы хотите, чтобы устройство не использовалось для запуска работника.Вы также можете связать работников в цепочку, передать данные от одного к другому, даже сгруппировать их и выполнить несколько параллелей, дождаться завершения всех и затем продолжить работу с другим (или более) работниками.В зависимости от вашего варианта использования, вы можете в основном запускать работника из любой точки (активность, приемник вещания, STC).
На самом деле я использую работников, запущенных из приемника вещания, для выполнения некоторых вызовов API, только когда у вас есть Интернет.Конечно, это соединение (настраиваемое ограничение), и его так легко настроить и он работает так хорошо, что я могу только рекомендовать его использовать (и благословить Google за окончательное создание этих библиотек AC).Мне также очень нравится тот факт, что WorkManager сохраняет работы в БД с комнатой, поэтому он может забрать его, когда все условия проверяются, даже если вы перезапускаете устройство между ними.Если у вас настроен какой-то мониторинг (например, stetho), вы можете увидеть, как он сохраняет задания в своей собственной базе данных.
Он все еще в альфа-версии, но он настолько прочный, что я не думаю, чтоони слишком сильно изменятся, пока не выпустят финальную версию.