Постоянная работа . Часть Android Jetpack .
Работа считается постоянной, если она остается запланированной посредством перезапуска приложения и перезагрузки системы. WorkManager — рекомендуемое решение для постоянной работы. Поскольку большую часть фоновой обработки лучше всего выполнять посредством постоянной работы, WorkManager также является основным рекомендуемым API для фоновой обработки в целом.
Виды упорной работы
WorkManager обрабатывает три типа постоянной работы:
- Немедленно : задачи, которые должны начаться немедленно и завершиться в ближайшее время. Возможно ускорение.
- Длительное выполнение : задачи, которые могут выполняться дольше, потенциально дольше 10 минут.
- Отложенный : запланированные задачи, которые начинаются позже и могут выполняться периодически.
На рисунке 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 в своем приложении.
Дополнительные ресурсы
В следующих разделах представлены некоторые дополнительные ресурсы.
Видео
- Workmanager - MAD Skills , серия видео
- Работа с WorkManager , с конференции Android Dev Summit 2018.
- WorkManager: Помимо основ , с Android Dev Summit 2019