Pierwsze kroki z WorkManagerem

Aby zacząć korzystać z WorkManagera, zaimportuj bibliotekę do Androida w projektach AI.

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

Odlotowe

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 Kolejny krok to określenie pracy do wykonania.

Zdefiniuj utwór

Praca jest określana za pomocą atrybutu Worker zajęcia. Metoda doWork() działa asynchronicznie w tle w wątku udostępnianym przez usługę WorkManager.

Aby utworzyć zadanie do uruchomienia przez WorkManager, rozwiń klasę Worker i zastąpi metodę doWork(). Aby na przykład utworzyć plik Worker, który przesyła pliki 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();
   }
}

Result zwrócona z doWork() informuje usługę WorkManager, czy czy praca została wykonana pomyślnie, a w przypadku niepowodzenia – podjęto próbę ponowienia próby.

  • Result.success(): zadanie zakończyło się powodzeniem.
  • Result.failure(): nie udało się wykonać zadania.
  • Result.retry(): nie udało się wykonać zadania i należy spróbować ponownie później zgodnie ze swoim spróbuj ponownie.

Utwórz żądanie WorkRequest

Zdefiniowaną pracę należy zaplanować w usłudze WorkManager w przed uruchomieniem. WorkManager oferuje dużą elastyczność planowania w naszej pracy. Możesz zaplanować jego uruchamianie okresowo w wybranym okresie. Możesz też zaplanować, by uruchomiły się tylko 1 raz .

Niezależnie od tego, jak zaplanujesz zadanie, będziesz zawsze korzystać z WorkRequest Chociaż Worker określa jednostkę pracy: WorkRequest (i jej podklas) definiują sposób i czas jego uruchamiania. W najprostszym przypadku możesz użyj OneTimeWorkRequest, jak w poniższym 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 za pomocą 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 optymalizacji systemu. Usługa WorkManager została zaprojektowana w taki sposób, aby zapewniać najlepsze działanie w ramach tych ograniczeń.

Dalsze kroki

Ten przewodnik dla początkujących zawiera jedynie obserwację. WorkRequest może zawierają również dodatkowe informacje, takie jak ograniczenia, w ramach których praca powinna być uruchomiona, dane wejściowe do pracy, zasady opóźnienia i wycofywania dla ponawiania próby w naszej pracy. W następnej sekcji Określ zakres zadań , dowiedz się więcej o tych opcjach i zrozumiej, jak zaplanować niepowtarzalne i powtarzające się zadania.

Dodatkowe materiały

Oprócz materiałów w przewodnikach dostępnych jest kilka blogów, ćwiczeń z programowania i kodu przykłady, które ułatwią Ci rozpoczęcie pracy.

Próbki

  • WorkManagerSample, To prosta aplikacja do przetwarzania obrazów.
  • Słonecznik, aplikacja demonstracyjna prezentująca sprawdzone metody o różnej architekturze. , w tym także z WorkManagera.

Ćwiczenia z programowania

Blogi