Introduzione a WorkManager

Per iniziare a utilizzare WorkManager, devi prima importare la libreria nel tuo Android progetto.

Aggiungi le seguenti dipendenze al file build.gradle dell'app:

Alla moda

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

Blog