Pierwsze kroki z WorkManagerem

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

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

Groovy

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"
}

Kotlin

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")
}

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

Określ pracę

Praca jest definiowana za pomocą klasy Worker. Metoda doWork() jest wywoływana asynchronicznie w wątku w tle udostępnianym przez WorkManager.

Aby utworzyć zadanie do wykonania przez WorkManager, rozszerz klasę Worker i zastąp metodę doWork(). Aby na przykład utworzyć Worker, który przesyła obrazy, wykonaj 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();
   }
}

Resultzwrócone z doWork() informuje usługę WorkManager, czy działanie zakończyło się powodzeniem, a w razie niepowodzenia – czy należy je powtórzyć.

  • Result.success(): zadanie zostało ukończone.
  • Result.failure(): zadanie nie zostało wykonane.
  • Result.retry(): zadanie nie powiodło się i należy spróbować je wykonać w innym momencie zgodnie z zasadami ponownego próbowania.

Tworzenie zadania

Po zdefiniowaniu zadania musisz je zaplanować za pomocą usługi WorkManager, aby mogło zostać wykonane. WorkManager zapewnia dużą elastyczność w planowaniu pracy. Możesz zaplanować jego okresowe uruchamianie w określonym przedziale czasu lub tylko raz.

Niezależnie od tego, jak zdecydujesz się zaplanować pracę, zawsze będziesz używać WorkRequest. Element Worker definiuje jednostkę pracy, a element WorkRequest (oraz jego podklasy) określa, jak i kiedy ma być ona wykonywana. W najprostszym przypadku możesz użyć elementu OneTimeWorkRequest, jak w tym przykładzie.

Kotlin

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

Java

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

Prześlij do systemu żądanie wykonania pracy

Na koniec musisz przesłać WorkRequest do WorkManager, używając metody enqueue().

Kotlin

WorkManager
    .getInstance(myContext)
    .enqueue(uploadWorkRequest)

Java

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

Dokładny czas wykonania zadania zależy od ograniczeń używanych w Twoim WorkRequest oraz od optymalizacji systemu. WorkManager jest zaprojektowany tak, aby zapewniać optymalne działanie w ramach tych ograniczeń.

Dalsze kroki

Ten przewodnik wprowadzający opisuje tylko niektóre z dostępnych możliwości. Element WorkRequest może też zawierać dodatkowe informacje, takie jak ograniczenia, w których ramach powinno działać zadanie, dane wejściowe, opóźnienie i zasady wycofywania się z powtarzania zadania. W następnej sekcji Definiowanie próśb o wykonanie pracy dowiesz się więcej o tych opcjach oraz o tym, jak zaplanować wykonywanie pracy jednorazowej i powtarzalnej.

Dodatkowe materiały

Oprócz dokumentacji dostępne są też blogi, ćwiczenia z programowania i przykłady kodu, które pomogą Ci zacząć.

Próbki

  • Sunflower, aplikacja demonstracyjna, która pokazuje sprawdzone metody korzystania z różnych elementów architektury, w tym WorkManagera.

Ćwiczenia z programowania

Blogi