Pierwsze kroki z WorkManagerem

Aby zacząć korzystać z WorkManagera, zaimportuj bibliotekę do projektu Android.

Dodaj te zależności do pliku build.gradle aplikacji:

Odlotowy

dependencies {
    def work_version = "2.9.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"
}

Kotlin

dependencies {
    val work_version = "2.9.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"
}

Po dodaniu zależności i zsynchronizowaniu projektu Gradle następnym krokiem jest zdefiniowanie zadań do wykonania.

Zdefiniuj zadanie

Zadanie jest definiowane za pomocą klasy Worker. Metoda doWork() działa asynchronicznie w wątku w tle udostępnianym przez WorkManager.

Aby utworzyć zadanie do uruchomienia przez WorkManager, rozszerz klasę Worker i zastąp metodę doWork(). Aby na przykład utworzyć Worker, który przesyła obrazy, możesz wykonać te czynności:

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();
   }
}

Parametr Result zwrócony z doWork() informuje usługę WorkManager, czy zadanie się udało, a w przypadku niepowodzenia – czy należy je ponowić.

  • Result.success(): zadanie zostało zakończone.
  • Result.failure(): zadanie się nie powiodło.
  • Result.retry(): zadanie się nie udało. Można to zrobić w innym czasie zgodnie z zasadami ponawiania próby.

Tworzenie żądania WorkRequest

Po zdefiniowaniu zadania musisz je zaplanować w usłudze WorkManager, aby zostało ono uruchomione. WorkManager zapewnia dużą elastyczność planowania pracy. Możesz zaplanować jego cykliczne uruchamianie w określonych przedziałach czasu lub jednorazowe uruchamianie.

Niezależnie od tego, jak zaplanujesz pracę, zawsze będziesz używać WorkRequest. Element Worker określa jednostkę pracy, a klasa WorkRequest (i jej podklasy) określają, jak i kiedy ma być uruchamiana. W najprostszym przypadku możesz użyć właściwości OneTimeWorkRequest, jak w tym przykładzie.

Kotlin


val uploadWorkRequest: WorkRequest =
   OneTimeWorkRequestBuilder<UploadWorker>()
       .build()

Java


WorkRequest uploadWorkRequest =
   new OneTimeWorkRequest.Builder(UploadWorker.class)
       .build();

Przesyłanie żądania WorkRequest do systemu

Na koniec musisz przesłać WorkRequest do WorkManager przy użyciu metody enqueue().

Kotlin


WorkManager
    .getInstance(myContext)
    .enqueue(uploadWorkRequest)

Java


WorkManager
    .getInstance(myContext)
    .enqueue(uploadWorkRequest);

Dokładny czas wykonania instancji roboczej zależy od ograniczeń stosowanych w WorkRequest i od optymalizacji systemu. Usługa WorkManager została zaprojektowana tak, aby zapewnić najlepsze działanie przy tych ograniczeniach.

Dalsze kroki

Ten przewodnik dla początkujących zawiera jedynie rysy na powierzchni. Element WorkRequest może też zawierać dodatkowe informacje, np. ograniczenia, na podstawie których należy pracować, dane wejściowe, zasady opóźnienia i ponowne próby ponowienia pracy. W następnej sekcji, w sekcji Określanie próśb o pracę, dowiesz się więcej o tych opcjach oraz jak zaplanować zadania niepowtarzalne i powtarzające się.

Dodatkowe materiały

Oprócz dokumentacji udostępniamy kilka blogów, ćwiczeń z programowania i przykładów kodu, które pomogą Ci zacząć.

Próbki

  • WorkManagerSample – prosta aplikacja do przetwarzania obrazów.
  • Sunflower: aplikacja demonstracyjna prezentująca sprawdzone metody dotyczące różnych komponentów architektury, w tym WorkManager.

Ćwiczenia z programowania

Blogi