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
- Praca z WorkManagerem (Kotlin) i (Java)
- Advanced WorkManager (Kotlin)
Blogi
- Przedstawiamy WorkManager
- Podstawy WorkManagera
- WorkManager i Kotlin
- Okresowalność WorkManagera
- Dostosowywanie narzędzia WorkManager – podstawy
- Dostosowywanie modułu WorkManager za pomocą Daggera