Чтобы начать использовать WorkManager, импортируйте библиотеку в проект Android.
Добавьте в файл build.gradle своего приложения следующие зависимости:
Классный
dependencies { def work_version = "2.12.0" // (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.12.0" // (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, который загружает изображения, можно сделать следующее:
Kotlin
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() } }
Java
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()– задача не выполнена и должна быть запущена повторно в соответствии с правилами повторных попыток.
Создание WorkRequest
После того как вы определили задачу, ее нужно запланировать с помощью сервиса WorkManager. WorkManager предлагает большую гибкость в планировании работы. Вы можете настроить периодическое или однократное выполнение правила.
Независимо от того, как вы решите планировать работу, вы всегда будете использовать WorkRequest. Если Worker определяет единицу работы, то WorkRequest (и его подклассы) определяют, как и когда она должна выполняться. В простейшем случае можно использовать OneTimeWorkRequest, как показано в примере ниже.
Kotlin
val uploadWorkRequest: WorkRequest = OneTimeWorkRequestBuilder<UploadWorker>() .build()
Java
WorkRequest uploadWorkRequest = new OneTimeWorkRequest.Builder(UploadWorker.class) .build();
Отправка WorkRequest в систему
Наконец, вам нужно отправить WorkRequest в WorkManager с помощью метода enqueue().
Kotlin
WorkManager .getInstance(myContext) .enqueue(uploadWorkRequest)
Java
WorkManager .getInstance(myContext) .enqueue(uploadWorkRequest);
Точное время выполнения зависит от ограничений, заданных в WorkRequest, и оптимизации системы.
WorkManager разработан для обеспечения наилучшего поведения в этих условиях.
Дальнейшие действия
Это руководство – лишь начало. WorkRequest также может содержать дополнительную информацию, например ограничения, при которых должна выполняться работа, входные данные для работы, задержку и политику отсрочки для повторной попытки работы. В следующем разделе Определение рабочих запросов вы узнаете больше об этих вариантах, а также поймёте, как планировать уникальную и повторяющуюся работу.
Дополнительные ресурсы
Помимо руководств, вы можете ознакомиться с блогами, практическими работами и примерами кода.
Образцы
- Sunflower – демонстрационное приложение, в котором показаны рекомендации по работе с различными компонентами архитектуры, включая WorkManager.
Практические работы
- Работа с WorkManager (Kotlin) и (Java)
- Расширенные возможности WorkManager (Kotlin)
Блоги
- Знакомство с WorkManager
- Основы WorkManager
- WorkManager и Kotlin
- Периодичность WorkManager
- Настройка WorkManager – основы
- Как настроить WorkManager с помощью Dagger