Постоянная работа Часть Android Jetpack .
Работа считается постоянной, если она сохраняется в расписании при перезапуске приложения и системы. WorkManager — рекомендуемое решение для постоянной работы. Поскольку большая часть фоновой обработки лучше всего выполняется именно в режиме постоянной работы, WorkManager также является основным рекомендуемым API для фоновой обработки в целом.
Виды постоянной работы
WorkManager обрабатывает три типа постоянной работы:
- Немедленно : задачи, которые необходимо начать немедленно и завершить в ближайшее время. Могут быть ускорены.
- Длительные задачи : задачи, которые могут выполняться дольше, потенциально дольше 10 минут.
- Откладываемые : запланированные задачи, которые начинаются в более позднее время и могут выполняться периодически.
На рисунке 1 показано, как различные типы постоянной работы соотносятся друг с другом.
Аналогичным образом, в следующей таблице описываются различные виды работ.
Тип | Периодичность | Как получить доступ |
---|---|---|
Немедленный | Один раз | OneTimeWorkRequest и Worker . Для ускорения работы вызовите setExpedited() в OneTimeWorkRequest. |
Длительный бег | Разовое или периодическое | Любой WorkRequest или Worker . Вызовите setForeground() в Worker для обработки уведомления. |
Отсрочка | Разовое или периодическое | PeriodicWorkRequest и Worker . |
Дополнительную информацию о настройке WorkManager см. в руководстве Определение WorkRequests .
Возможности WorkManager
Помимо предоставления более простого и последовательного API, WorkManager имеет ряд других ключевых преимуществ:
Ограничения в работе
Декларативно определите оптимальные условия для выполнения вашей работы с помощью ограничений работы . Например, запустите её только тогда, когда устройство подключено к сети без тарифного плана, находится в режиме ожидания или имеет достаточный заряд батареи.
Надежное планирование
WorkManager позволяет планировать разовое или многократное выполнение задач с помощью гибких окон планирования. Задачи можно помечать тегами и присваивать им имена, что позволяет планировать отдельные, заменяемые задачи, а также отслеживать или отменять группы задач одновременно.
Запланированная работа хранится во внутренней базе данных SQLite, а WorkManager заботится о том, чтобы эта работа сохранялась и перепланировалась при перезагрузке устройства.
Кроме того, WorkManager придерживается функций энергосбережения и лучших практик, таких как режим Doze , так что вам не о чем беспокоиться.
Ускоренная работа
WorkManager можно использовать для планирования срочных задач, которые будут выполняться в фоновом режиме. Для задач, важных для пользователя и завершающихся в течение нескольких минут, следует использовать функцию ускоренной работы .
Гибкая политика повторных попыток
Иногда работа даёт сбой. WorkManager предлагает гибкие политики повторных попыток , включая настраиваемую политику экспоненциальной задержки .
Цепочка работ
Для сложных взаимосвязанных работ объединяйте отдельные рабочие задачи с помощью интуитивно понятного интерфейса, который позволяет контролировать, какие части выполняются последовательно, а какие — параллельно.
Котлин
val continuation = WorkManager.getInstance(context) .beginUniqueWork( Constants.IMAGE_MANIPULATION_WORK_NAME, ExistingWorkPolicy.REPLACE, OneTimeWorkRequest.from(CleanupWorker::class.java) ).then(OneTimeWorkRequest.from(WaterColorFilterWorker::class.java)) .then(OneTimeWorkRequest.from(GrayScaleFilterWorker::class.java)) .then(OneTimeWorkRequest.from(BlurEffectFilterWorker::class.java)) .then( if (save) { workRequest<SaveImageToGalleryWorker>(tag = Constants.TAG_OUTPUT) } else /* upload */ { workRequest<UploadWorker>(tag = Constants.TAG_OUTPUT) } )
Ява
WorkManager.getInstance(...) .beginWith(Arrays.asList(workA, workB)) .then(workC) .enqueue();
Для каждой рабочей задачи вы можете определить входные и выходные данные . При объединении задач в цепочку WorkManager автоматически передаёт выходные данные из одной рабочей задачи в другую.
Встроенная совместимость потоков
WorkManager легко интегрируется с Coroutines и RxJava и обеспечивает гибкость для подключения ваших собственных асинхронных API .
Используйте WorkManager для надежной работы
WorkManager предназначен для задач, которые должны выполняться надёжно даже в случае, если пользователь закрывает экран, приложение закрывается или устройство перезагружается. Например:
- Отправка журналов или аналитики на внутренние службы.
- Периодическая синхронизация данных приложения с сервером.
WorkManager не предназначен для фоновой работы, которую можно безопасно завершить при завершении процесса приложения. Он также не является универсальным решением для всех задач, требующих немедленного выполнения. Ознакомьтесь с руководством по фоновой работе, чтобы выбрать решение, соответствующее вашим потребностям.
Связь с другими API
Хотя сопрограммы являются рекомендуемым решением для определённых случаев, их не следует использовать для постоянной работы. Важно отметить, что сопрограммы — это фреймворк для параллельной работы, тогда как WorkManager — это библиотека для постоянной работы. Аналогично, AlarmManager следует использовать только для часов или календарей.
API | Рекомендуется для | Связь с WorkManager |
---|---|---|
Корутины | Любая асинхронная работа, которая не должна быть постоянной. | Корутины — стандартный способ выхода из основного потока в Kotlin. Однако они освобождают память после закрытия приложения. Для постоянной работы используйте WorkManager. |
AlarmManager | Только будильники. | В отличие от WorkManager, AlarmManager выводит устройство из режима Doze. Поэтому он неэффективен с точки зрения энергопотребления и управления ресурсами. Используйте его только для точных будильников или уведомлений, таких как события календаря, а не для фоновой работы. |
Заменить устаревшие API
WorkManager API является рекомендуемой заменой предыдущих API фонового планирования Android, включая FirebaseJobDispatcher
и GcmNetworkManager
.
Начать
Ознакомьтесь с руководством по началу работы , чтобы начать использовать WorkManager в своем приложении.
Дополнительные ресурсы
В следующих разделах представлены некоторые дополнительные ресурсы.
Видео
- Workmanager - MAD Skills , видеосерия
- Работа с WorkManager , с саммита Android Dev Summit 2018
- WorkManager: за пределами основ , с саммита Android Dev Summit 2019