Теперь рекомендуемый способ выполнения фоновой обработки - это Jetpack WorkManager API.Я приведу официальную документацию по следующим причинам:
WorkManager выбирает подходящий способ выполнения вашей задачи на основе таких факторов, как уровень API устройства и состояние приложения.Если WorkManager выполняет одну из ваших задач во время работы приложения, WorkManager может запустить вашу задачу в новом потоке процесса вашего приложения.Если ваше приложение не работает, WorkManager выбирает подходящий способ планирования фоновой задачи - в зависимости от уровня API устройства и включенных зависимостей, WorkManager может использовать JobScheduler, Firebase JobDispatcher или AlarmManager.Вам не нужно писать логику устройства, чтобы выяснить, какими возможностями обладает устройство, и выбрать соответствующий API;вместо этого вы можете просто передать свою задачу в WorkManager и позволить ему выбрать лучший вариант.
Кроме того, WorkManager предоставляет несколько расширенных функций.Например, вы можете настроить цепочку задач;По завершении одной задачи WorkManager ставит в очередь следующую задачу в цепочке.Вы также можете проверить состояние задачи и ее возвращаемые значения, наблюдая за ее LiveData;это может быть полезно, если вы хотите, чтобы пользовательский интерфейс отображал состояние вашей задачи.
Так что вместо того, чтобы беспокоиться каждый раз, какую фоновую обработку выбрать (так как для каждой задачи есть рекомендуемый и подходящий способ), вы можете простоиспользуйте WorkManager, и он сделает свою работу.
Это учитывает следующее замечание:
WorkManager предназначен для задач, требующих гарантии того, что система их запустит, даже если приложение выйдет, например, загрузки данных приложения на сервер,Он не предназначен для фоновой работы в процессе, которую можно безопасно прекратить, если процесс приложения завершится;для подобных ситуаций мы рекомендуем использовать ThreadPools.
PS Поскольку API WorkManager использует JobScheduler, Firebase JobDistpacher или AlarmManager под капотом, необходимо учитывать минимальные уровни API для используемой функциональности.JobScheduler требует минимум API 21, Firebase JobDispatcher требует минимум API 14 и Google Play Services.
Для полной проверки документации: https://developer.android.com/topic/libraries/architecture/workmanager
Для вашего второго вопроса: насколько я знаю, вы будетевсегда смотрите это уведомление, так как оно уведомляет пользователя о том, что ваше приложение расходует заряд батареи.Уведомление может быть отключено пользователем из настроек в Android Oreo 8.1.