Per iniziare a utilizzare WorkManager, importa innanzitutto la libreria nel tuo progetto Android.
Aggiungi le seguenti dipendenze al file build.gradle dell'app:
Groovy
dependencies { def work_version = "2.12.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.12.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") }
Dopo aver aggiunto le dipendenze e sincronizzato il progetto Gradle, il passaggio successivo consiste nel definire un lavoro da eseguire.
Definisci il lavoro
Il lavoro viene definito utilizzando la classe Worker. Il metodo doWork() viene eseguito in modo asincrono su un thread in background fornito da WorkManager.
Per creare un lavoro da eseguire con WorkManager, estendi la classe Worker ed esegui l'override del metodo doWork(). Ad esempio, per creare un Worker che carica immagini, 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(); } }
Il Result
restituito da doWork() informa il servizio WorkManager se il
lavoro è andato a buon fine e, in caso di errore, se deve essere
riprovato o meno.
Result.success(): il lavoro è stato completato correttamente.Result.failure(): l'operazione non è riuscita.Result.retry(): l'operazione non è riuscita e deve essere riprovata in un altro momento in base alla sua policy di ripetizione.
Crea una richiesta di lavoro
Una volta definito, il lavoro deve essere pianificato con il servizio WorkManager per essere eseguito. WorkManager offre una grande flessibilità nella pianificazione del lavoro. Puoi pianificarne l'esecuzione periodica in un intervallo di tempo oppure puoi pianificarne l'esecuzione una sola volta.
Indipendentemente da come scegli di pianificare il lavoro, utilizzerai sempre un
WorkRequest. Mentre un
Worker definisce l'unità di lavoro, un
WorkRequest (e le sue
sottoclassi) definisce come e quando deve essere eseguito. Nel caso più semplice, puoi utilizzare un OneTimeWorkRequest, come mostrato nell'esempio seguente.
Kotlin
val uploadWorkRequest: WorkRequest = OneTimeWorkRequestBuilder<UploadWorker>() .build()
Java
WorkRequest uploadWorkRequest = new OneTimeWorkRequest.Builder(UploadWorker.class) .build();
Inviare WorkRequest al sistema
Infine, devi inviare il tuo WorkRequest a WorkManager utilizzando il metodo enqueue().
Kotlin
WorkManager .getInstance(myContext) .enqueue(uploadWorkRequest)
Java
WorkManager .getInstance(myContext) .enqueue(uploadWorkRequest);
Il momento esatto in cui verrà eseguito il worker dipende dai vincoli utilizzati in WorkRequest e dalle ottimizzazioni del sistema.
WorkManager è progettato per offrire il comportamento migliore in base a queste limitazioni.
Passaggi successivi
Questa guida introduttiva è solo un punto di partenza. WorkRequest può
includere anche informazioni aggiuntive, come i vincoli in base ai quali deve essere eseguito il lavoro, l'input per il lavoro, un ritardo e un criterio di backoff per riprovare il lavoro. Nella sezione successiva, Definisci le tue richieste di lavoro, scoprirai di più su queste opzioni e su come pianificare un lavoro unico e ricorrente.
Risorse aggiuntive
Oltre alla documentazione della guida, sono disponibili diversi blog e codelab per aiutarti a iniziare.
Codelab
- Utilizzo di 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 di base
- Personalizza WorkManager con Dagger