Per iniziare a utilizzare WorkManager, devi prima importare la libreria nel tuo Android progetto.
Aggiungi le seguenti dipendenze al file build.gradle
dell'app:
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") }
Dopo aver aggiunto le dipendenze e sincronizzato il progetto Gradle, il passaggio successivo è definire il lavoro da eseguire.
Definisci il lavoro
Il lavoro viene definito utilizzando Worker
. Il metodo doWork()
viene eseguito in modo asincrono su un background
fornito da WorkManager.
Per creare alcuni lavori da far eseguire a WorkManager, estendi la classe Worker
e
sostituisci il metodo doWork()
. Ad esempio, per creare una Worker
che carichi
puoi procedere nel seguente modo:
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
restituito da doWork()
comunica al servizio WorkManager se
il lavoro è andato a buon fine e, in caso di fallimento, se il lavoro doveva
nuovo tentativo.
Result.success()
: il lavoro è stato completato correttamente.Result.failure()
: l'operazione non è riuscita.Result.retry()
: il lavoro non è riuscito e dovrebbe essere provato in un altro momento in base alle sue riprova criteri.
Crea una WorkRequest
Una volta definito, il lavoro deve essere pianificato con il servizio WorkManager in per l'esecuzione. WorkManager offre molta flessibilità nella pianificazione al lavoro. Puoi programmarne l'esecuzione periodicamente in un intervallo di tempo oppure puoi pianificarne l'esecuzione in modo che sarà eseguito nel tempo.
Indipendentemente da come tu decida di pianificare il lavoro, utilizzerai sempre un
WorkRequest
. Mentre
Worker
definisce l'unità di lavoro, un
WorkRequest
(e le relative
) definiscono come e quando deve essere eseguita. Nel caso più semplice, puoi
usa un
OneTimeWorkRequest
,
come mostrato nell'esempio seguente.
Kotlin
val uploadWorkRequest: WorkRequest = OneTimeWorkRequestBuilder<UploadWorker>() .build()
Java
WorkRequest uploadWorkRequest = new OneTimeWorkRequest.Builder(UploadWorker.class) .build();
Invia la WorkRequest al sistema
Infine, devi inviare il tuo WorkRequest
a WorkManager
utilizzando il
enqueue()
.
Kotlin
WorkManager .getInstance(myContext) .enqueue(uploadWorkRequest)
Java
WorkManager .getInstance(myContext) .enqueue(uploadWorkRequest);
Il tempo esatto in cui verrà eseguito il worker dipende
i vincoli utilizzati in WorkRequest
e sulle ottimizzazioni del sistema.
WorkManager è progettato per offrire il miglior comportamento in base a queste restrizioni.
Passaggi successivi
Questa guida introduttiva graffia solo la superficie. WorkRequest
può
includere anche informazioni aggiuntive, come i vincoli rispetto ai quali
deve essere eseguito, input al lavoro, ritardo e criterio di backoff per nuovi tentativi
al lavoro. Nella sezione successiva, Definisci il tuo lavoro
richieste,
scopri di più su queste opzioni in modo più dettagliato e comprendi
di come programmare lavori unici e ricorrenti.
Risorse aggiuntive
Oltre alla documentazione della guida, sono disponibili diversi blog, codelab e esempi disponibili per aiutarti a iniziare.
Campioni
- WorkManagerSample, una semplice app per l'elaborazione delle immagini.
- Girasole un'app demo che mostra le best practice con varie architetture tra cui WorkManager.
Codelab
- Utilizzare WorkManager (Kotlin) e (Java)
- WorkManager avanzato (Kotlin)
Blog
- Introduzione a WorkManager
- Nozioni di base su WorkManager
- WorkManager e Kotlin
- Periodicità di WorkManager
- Personalizzazione di WorkManager - Concetti fondamentali
- Personalizzare WorkManager con Dagger