Aby zacząć korzystać z WorkManagera, najpierw zaimportuj bibliotekę do projektu Androida.
Dodaj do pliku build.gradle
aplikacji te zależności:
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"
}
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:
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() } }
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.
val uploadWorkRequest: WorkRequest = OneTimeWorkRequestBuilder<UploadWorker>() .build()
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()
.
WorkManager .getInstance(myContext) .enqueue(uploadWorkRequest)
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