Чтобы начать использовать WorkManager, сначала импортируйте библиотеку в свой проект Android.
Добавьте следующие зависимости в файл build.gradle
вашего приложения:
классный
dependencies { def work_version = "2.9.1" // (Java only) implementation "androidx.work:work-runtime:$work_version" // Kotlin + coroutines implementation "androidx.work:work-runtime-ktx:$work_version" // optional - RxJava2 support implementation "androidx.work:work-rxjava2:$work_version" // optional - GCMNetworkManager support implementation "androidx.work:work-gcm:$work_version" // optional - Test helpers androidTestImplementation "androidx.work:work-testing:$work_version" // optional - Multiprocess support implementation "androidx.work:work-multiprocess:$work_version" }
Котлин
dependencies { val work_version = "2.9.1" // (Java only) implementation("androidx.work:work-runtime:$work_version") // Kotlin + coroutines implementation("androidx.work:work-runtime-ktx:$work_version") // optional - RxJava2 support implementation("androidx.work:work-rxjava2:$work_version") // optional - GCMNetworkManager support implementation("androidx.work:work-gcm:$work_version") // optional - Test helpers androidTestImplementation("androidx.work:work-testing:$work_version") // optional - Multiprocess support implementation("androidx.work:work-multiprocess:$work_version") }
После того, как вы добавили зависимости и синхронизировали проект Gradle, следующим шагом будет определение некоторой работы для выполнения.
Определите работу
Работа определяется с помощью класса Worker
. Метод doWork()
выполняется асинхронно в фоновом потоке, предоставленном WorkManager.
Чтобы создать некоторую работу для выполнения WorkManager, расширьте класс Worker
и переопределите метод doWork()
. Например, чтобы создать Worker
, который загружает изображения, вы можете сделать следующее:
Котлин
class UploadWorker(appContext: Context, workerParams: WorkerParameters): Worker(appContext, workerParams) { override fun doWork(): Result { // Do the work here--in this case, upload the images. uploadImages() // Indicate whether the work finished successfully with the Result return Result.success() } }
Ява
public class UploadWorker extends Worker { public UploadWorker( @NonNull Context context, @NonNull WorkerParameters params) { super(context, params); } @Override public Result doWork() { // Do the work here--in this case, upload the images. uploadImages(); // Indicate whether the work finished successfully with the Result return Result.success(); } }
Result
, возвращаемый функцией doWork()
сообщает службе WorkManager, была ли работа успешной и, в случае сбоя, следует ли повторить работу.
-
Result.success()
: работа успешно завершена. -
Result.failure()
: Работа не удалась. -
Result.retry()
: Работа не удалась, и ее следует повторить в другое время в соответствии с политикой повторных попыток .
Создать рабочий запрос
После определения вашей работы ее необходимо запланировать с помощью службы WorkManager, чтобы она могла выполняться. WorkManager предлагает большую гибкость в планировании вашей работы. Вы можете запланировать его периодический запуск в течение определенного интервала времени или запланировать его запуск только один раз .
Как бы вы ни решили запланировать работу, вы всегда будете использовать WorkRequest
. В то время как Worker
определяет единицу работы, WorkRequest
(и его подклассы) определяют, как и когда его следует запускать. В простейшем случае вы можете использовать OneTimeWorkRequest
, как показано в следующем примере.
Котлин
val uploadWorkRequest: WorkRequest = OneTimeWorkRequestBuilder<UploadWorker>() .build()
Ява
WorkRequest uploadWorkRequest = new OneTimeWorkRequest.Builder(UploadWorker.class) .build();
Отправьте WorkRequest в систему
Наконец, вам нужно отправить WorkRequest
в WorkManager
используя метод enqueue()
.
Котлин
WorkManager .getInstance(myContext) .enqueue(uploadWorkRequest)
Ява
WorkManager .getInstance(myContext) .enqueue(uploadWorkRequest);
Точное время выполнения работника зависит от ограничений, используемых в вашем WorkRequest
и от оптимизации системы. WorkManager спроектирован так, чтобы обеспечить наилучшее поведение при этих ограничениях.
Следующие шаги
Это руководство по началу работы лишь поверхностно. WorkRequest
также может включать дополнительную информацию, такую как ограничения, при которых должна выполняться работа, входные данные для работы, задержка и политика отсрочки для повторной попытки работы. В следующем разделе «Определение рабочих запросов» вы узнаете об этих параметрах более подробно, а также поймете, как планировать уникальные и повторяющиеся работы.
Дополнительные ресурсы
Помимо справочной документации, существует несколько блогов, лабораторий кода и примеров кода, которые помогут вам начать работу.
Образцы
- WorkManagerSample — простое приложение для обработки изображений.
- Sunflower — демонстрационное приложение, демонстрирующее лучшие практики работы с различными компонентами архитектуры, включая WorkManager.
Кодлабы
- Работа с WorkManager (Kotlin) и (Java)
- Расширенный WorkManager (Котлин)
Блоги
- Представляем WorkManager
- Основы WorkManager
- WorkManager и Котлин
- Периодичность WorkManager
- Настройка WorkManager — основы
- Настройка WorkManager с помощью Dagger