Aby zacząć korzystać z WorkManagera, najpierw zaimportuj bibliotekę do projektu Androida.
Dodaj do pliku build.gradle
aplikacji te zależności:
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 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(); } }
Result
zwró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
- Praca z WorkManager (Kotlin) i (Java)
- Zaawansowany WorkManager (Kotlin)
Blogi
- Przedstawiamy WorkManager
- Podstawy WorkManagera
- WorkManager i Kotlin
- Okresowość WorkManagera
- Dostosowywanie WorkManagera – podstawy
- Dostosowywanie WorkManagera za pomocą Daggera