WorkManager

https://developer.android.com/topic/libraries/architecture/workmanager
https://developer.android.com/develop/background-work/background-tasks/persistent
https://developer.android.com/develop/background-work/background-tasks/persistent/getting-started
https://developer.android.com/develop/background-work/background-tasks/persistent/getting-started/define-work
https://developer.android.com/develop/background-work/background-tasks/persistent/how-to/states
https://developer.android.com/develop/background-work/background-tasks/persistent/how-to/manage-work
https://developer.android.com/develop/background-work/background-tasks/persistent/how-to/chain-work
https://developer.android.com/develop/background-work/background-tasks/persistent/how-to/long-running
https://developer.android.com/develop/background-work/background-tasks/persistent/how-to/observe
https://developer.android.com/develop/background-work/background-tasks/persistent/how-to/update-work
https://developer.android.com/develop/background-work/background-tasks/persistent/threading
https://developer.android.com/develop/background-work/background-tasks/persistent/threading/worker
https://developer.android.com/develop/background-work/background-tasks/persistent/threading/coroutineworker
https://developer.android.com/develop/background-work/background-tasks/persistent/threading/rxworker
https://developer.android.com/develop/background-work/background-tasks/persistent/threading/listenableworker
https://developer.android.com/develop/background-work/background-tasks/persistent/configuration/custom-configuration
WorkManager

Библиотека для фоновых задач в Android. Она гарантирует выполнение задач, даже если приложение закрыто или устройство перезагружено. Идеальна для задач, которые должны работать независимо от состояния приложения, например, синхронизация данных, отправка уведомлений, загрузка файлов.

OneTimeWorkRequestBuilder

Одноразовая задача.

val workRequest = OneTimeWorkRequestBuilder<MyWorker>()
    .setConstraints(Constraints.Builder().setRequiresCharging(true).build())
    .build()

WorkManager.getInstance(context).enqueue(workRequest)
PeriodicWorkRequestBuilder

Периодическая задача.

val periodicWorkRequest = PeriodicWorkRequestBuilder<MyWorker>(1, TimeUnit.HOURS)
    .setConstraints(Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build())
    .build()

WorkManager.getInstance(context).enqueue(periodicWorkRequest)
Вопросы на собесе (9)
  1. Что такое WorkManager?

    Библиотека для планирования и выполнения фоновых задач в Android, обеспечивающая надежность и совместимость с различными версиями ОС. Она позволяет создавать задания, которые могут выполняться даже после перезапуска устройства или приложения.

  1. Чем WorkManager отличается от других инструментов для работы с фоновыми задачами, такими как JobScheduler, AlarmManager, или Services?

    WorkManager отличается от других инструментов тем, что он работает на всех версиях Android, учитывает условия выполнения задач (состояние сети, батареи) и поддерживает управление зависимостями между задачами. Это делает его более универсальным и надежным решением.

  1. Какие есть типы Workers в WorkManager, и в чем их различия?

    Worker для синхронного выполнения одноразовых задач, таких как загрузка данных, с использованием метода doWork().

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

  1. Почему Google отказался от сервисов и предложил использовать WorkManager?

    Google отказался от JobScheduler и других сервисов в пользу WorkManager, чтобы предоставить более универсальное и надежное решение для фоновых задач. WorkManager автоматически обрабатывает зависимые задачи, учитывает состояние сети и ограничения по батарее, а также работает на всех версиях Android, обеспечивая единый API для планирования и выполнения фоновых работ, что упрощает разработку и улучшает совместимость.

  1. Как обеспечить надежность выполнения задач в WorkManager на разных версиях Android?

    Используйте его API, который автоматически обрабатывает фоновые задачи, учитывая ограничения по батарее и сети. Устанавливайте условия выполнения и обрабатывайте сбои с помощью повторных попыток, что гарантирует выполнение задач даже при временных ошибках.

  1. Для каких задач не походит WorkManager?

    Для непрерывных задач, которые не возвращают результат выполнения (прослушивание музыки).

  1. Как планировать выполнение задач с задержкой или повторением?

    Для задания задержки используйте OneTimeWorkRequestBuilder с setInitialDelay(), а для повторяющихся задач создайте PeriodicWorkRequestBuilder с указанием интервала повторения.

  1. Какой подход используется для безопасного выполнения фоновых операций в Android 8.0 и выше?

    JobScheduler

    HandlerThread

    AsyncTask

    WorkManager

  1. Какой метод используется для запуска WorkManager?

    executeWork

    enqueue

    startWork

    runTask