Постоянная работа . Часть Android Jetpack .

Работа считается постоянной, если она остается запланированной посредством перезапуска приложения и перезагрузки системы. WorkManager — рекомендуемое решение для постоянной работы. Поскольку большую часть фоновой обработки лучше всего выполнять посредством постоянной работы, WorkManager также является основным рекомендуемым API для фоновой обработки в целом.

Виды упорной работы

WorkManager обрабатывает три типа постоянной работы:

  • Немедленно : задачи, которые должны начаться немедленно и завершиться в ближайшее время. Возможно ускорение.
  • Длительное выполнение : задачи, которые могут выполняться дольше, потенциально дольше 10 минут.
  • Отложенный : запланированные задачи, которые начинаются позже и могут выполняться периодически.

На рисунке 1 показано, как различные типы постоянной работы связаны друг с другом.

Постоянная работа может быть немедленной, длительной или отложенной.
Рисунок 1 : Типы постоянной работы.

Аналогичным образом, в следующей таблице представлены различные типы работ.

Тип Периодичность Как получить доступ
Немедленный Один раз OneTimeWorkRequest и Worker . Для ускорения работы вызовите setExpedited() в OneTimeWorkRequest.
Долгий бег Разовое или периодическое Любой WorkRequest или Worker . Вызовите setForeground() в Worker для обработки уведомления.
отложенный Разовое или периодическое PeriodicWorkRequest и Worker .

Дополнительные сведения о настройке WorkManager см. в руководстве «Определение рабочих запросов» .

Возможности 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
Сопрограммы Вся асинхронная работа, которая не обязательно должна быть постоянной. Сопрограммы — это стандартное средство выхода из основного потока в Котлине. Однако они покидают память после закрытия приложения. Для постоянной работы используйте WorkManager.
Менеджер тревог Только будильники. В отличие от WorkManager, AlarmManager выводит устройство из спящего режима. Поэтому он неэффективен с точки зрения управления мощностью и ресурсами. Используйте его только для точных сигналов тревоги или уведомлений, таких как события календаря, а не для фоновой работы.

Заменить устаревшие API

WorkManager API — рекомендуемая замена всем предыдущим API фонового планирования Android, включая FirebaseJobDispatcher , GcmNetworkManager и JobScheduler .

Начать

Ознакомьтесь с руководством по началу работы , чтобы начать использовать WorkManager в своем приложении.

Дополнительные ресурсы

В следующих разделах представлены некоторые дополнительные ресурсы.

Видео

Блоги

Образцы