Постоянная работа . Часть 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 в своем приложении.

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

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

Видео

Блоги

Образцы

Learn how this app was designed and built in the design case study, architecture learning journey and modularization learning journey. This is the repository for the Now in Android app. It is a work in progress 🚧. Now in Android is a fully functional