Pianificare le attività con WorkManager   Componente di Android Jetpack.

WorkManager è la soluzione consigliata per il lavoro persistente. Il lavoro è persistente se rimane pianificato durante i riavvii dell'app e del sistema. Poiché la maggior parte dell'elaborazione in background viene eseguita al meglio tramite il lavoro persistente, WorkManager è l'API principale consigliata per l'elaborazione in background.

Tipi di lavoro persistente

WorkManager gestisce tre tipi di attività persistenti:

  • Immediata: attività che devono iniziare immediatamente e essere completate a breve. Potrebbe essere accelerata.
  • A esecuzione prolungata: attività che potrebbero essere eseguite per più tempo, potenzialmente più di 10 minuti.
  • Rimandabili: attività pianificate che iniziano in un secondo momento e possono essere eseguite periodicamente.

La Figura 1 illustra la relazione tra i diversi tipi di lavoro permanente.

Il lavoro persistente può essere immediato, di lunga durata o differibile
Figura 1: tipi di lavoro permanente.

Analogamente, la seguente tabella illustra i vari tipi di lavoro.

Digitare Periodicità Come accedere
Vista fattura Una volta OneTimeWorkRequest e Worker.

Per un lavoro rapido, chiama setExpedited() nella tua richiesta di lavoro una tantum.

A lungo termine Una tantum o periodica Qualsiasi WorkRequest o Worker. Chiama setForeground() in Worker per gestire la notifica.
Posticipabile Una tantum o periodica PeriodicWorkRequest e Worker.

Per ulteriori informazioni su come configurare WorkManager, consulta la guida Definire le WorkRequest.

Funzionalità

Oltre a fornire un'API più semplice e coerente, WorkManager offre una serie di altri vantaggi chiave:

Vincoli di lavoro

Definisci in modo dichiarativo le condizioni ottimali per l'esecuzione del tuo lavoro utilizzando i limiti di lavoro. Ad esempio, esegui solo quando il dispositivo è su una rete senza misurazione, quando è inattivo o quando ha una batteria sufficiente.

Programmazione solida

WorkManager ti consente di pianificare il lavoro in modo che venga eseguito una tantum o ripetutamente utilizzando finestre di pianificazione flessibili. I lavori possono anche essere etichettati e denominati, il che ti consente di pianificare lavori unici e sostituibili e di monitorare o annullare insieme gruppi di lavori.

Il lavoro pianificato viene archiviato in un database SQLite gestito internamente e WorkManager si occupa di garantire che questo lavoro persista e venga riprogrammato dopo i riavvii del dispositivo.

Inoltre, WorkManager rispetta le best practice e le funzionalità di risparmio energetico come la modalità Sospensione, quindi non devi preoccuparti.

Lavoro rapido

Puoi utilizzare WorkManager per pianificare l'esecuzione immediata di un'attività in background. Devi utilizzare il lavoro rapido per le attività importanti per l'utente e che vengono completate in pochi minuti.

Criterio di ripetizione flessibile

A volte il lavoro non va a buon fine. WorkManager offre criteri flessibili per i nuovi tentativi, tra cui un criterio di backoff esponenziale configurabile.

Catena di lavoro

Per lavori correlati complessi, collega le singole attività di lavoro utilizzando un'interfaccia intuitiva che ti consente di controllare quali parti vengono eseguite in sequenza e quali in parallelo.

Kotlin


val continuation = WorkManager.getInstance(context)
    .beginUniqueWork(
        Constants.IMAGE_MANIPULATION_WORK_NAME,
        ExistingWorkPolicy.REPLACE,
        OneTimeWorkRequest.from(CleanupWorker::class.java)
    ).then(OneTimeWorkRequest.from(WaterColorFilterWorker::class.java))
    .then(OneTimeWorkRequest.from(GrayScaleFilterWorker::class.java))
    .then(OneTimeWorkRequest.from(BlurEffectFilterWorker::class.java))
    .then(
        if (save) {
            workRequest<SaveImageToGalleryWorker>(tag = Constants.TAG_OUTPUT)
        } else /* upload */ {
            workRequest<UploadWorker>(tag = Constants.TAG_OUTPUT)
        }
    )

Java


WorkManager.getInstance(...)
.beginWith(Arrays.asList(workA, workB))
.then(workC)
.enqueue();

Per ogni attività, puoi definire i dati di input e output. Quando concatena i lavori, WorkManager passa automaticamente i dati di output da un'attività di lavoro all'altra.

Interoperabilità del threading integrato

WorkManager si integra perfettamente con Coroutines e RxJava e offre la flessibilità di collegare le tue API asincrone.

Utilizzare WorkManager per un lavoro affidabile

WorkManager è destinato a operazioni che devono eseguirsi in modo affidabile anche se l'utente esce da una schermata, l'app esce o il dispositivo si riavvia. Per esempio:

  • Invio di log o dati di analisi ai servizi di backend.
  • Sincronizzazione periodica dei dati dell'applicazione con un server.

WorkManager non è progettato per i lavori in background in-process che possono essere terminati in sicurezza se il processo dell'app viene interrotto. Inoltre, non è una soluzione generale per tutte le attività che richiedono l'esecuzione immediata. Consulta la guida all'elaborazione in background per scoprire quale soluzione soddisfa le tue esigenze.

Relazione con altre API

Sebbene le coroutine siano la soluzione consigliata per determinati casi d'uso, non dovresti usarle per il lavoro persistente. È importante notare che le coroutine sono un framework di concorrenza, mentre WorkManager è una libreria per il lavoro persistente. Analogamente, devi utilizzare AlarmManager solo per orologi o calendari.

API Consigliato per Relazione con WorkManager
Coroutine Tutti i lavori asincroni che non devono essere permanenti. Le coroutine sono il mezzo standard per uscire dal thread principale in Kotlin. Tuttavia, vengono rimossi dalla memoria una volta chiusa l'app. Per il lavoro persistente, utilizza WorkManager.
AlarmManager Solo sveglie. A differenza di WorkManager, AlarmManager riattiva un dispositivo dalla modalità Sospensione. Non è quindi efficiente in termini di potenza e gestione delle risorse. Utilizzalo solo per sveglie o notifiche precise, ad esempio eventi nel calendario, non per attività in background.

Sostituzione delle API deprecate

L'API WorkManager è la sostituzione consigliata per tutte le API di pianificazione in background di Android precedenti, tra cui FirebaseJobDispatcher, GcmNetworkManager e Job Scheduler.

Per iniziare

Consulta la Guida introduttiva per iniziare a utilizzare WorkManager nella tua app.

Risorse aggiuntive

Per ulteriori informazioni su WorkManager, consulta le seguenti risorse.

Campioni

Video

Blog

  • Nota: il testo del link viene visualizzato quando JavaScript è disattivato
  • Avvio dell'app