Pianifica le attività con WorkManager Componente di Android Jetpack.

WorkManager è la soluzione consigliata per il lavoro persistente. Il lavoro persiste quando viene programmato tramite riavvii dell'app e riavvii del sistema. Poiché la maggior parte dell'elaborazione in background avviene al meglio tramite un lavoro permanente, WorkManager è l'API principale consigliata per l'elaborazione in background.

Tipi di lavoro persistente

WorkManager gestisce tre tipi di lavoro persistente:

  • Immediate: attività che devono iniziare immediatamente e essere completate a breve. Può essere rapido.
  • Lunga esecuzione: attività che potrebbero essere eseguite per più di 10 minuti.
  • Rinviabile: attività pianificate che vengono avviate in un secondo momento e possono essere eseguite periodicamente.

La Figura 1 illustra la correlazione tra i diversi tipi di lavoro persistente.

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

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

Digitare Periodicità Come accedere
Immediata Una volta OneTimeWorkRequest e Worker.

Per velocizzare il lavoro, chiama il numero setExpedited() sul tuo OneTimeWorkRequest.

Corsa lunga Una tantum o periodica Qualsiasi WorkRequest o Worker. Chiama setForeground() nel worker per gestire la notifica.
Rinviabile Una tantum o periodica PeriodicWorkRequest e Worker.

Per ulteriori informazioni su come configurare WorkManager, consulta la guida Definizione delle richieste di lavoro.

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 vincoli di lavoro. Ad esempio, esegui l'operazione soltanto quando il dispositivo si trova su una rete non a consumo, quando è inattivo o quando la batteria ha un'autonomia sufficiente.

Programmazione efficace

WorkManager ti consente di pianificare il lavoro in modo che venga eseguito una tantum o ripetutamente utilizzando finestre di pianificazione flessibili. È possibile anche taggare e assegnare nomi ai lavori, in modo da poter pianificare lavori univoci e sostituibili e monitorare o annullare gruppi di lavoro insieme.

Il lavoro pianificato viene archiviato in un database SQLite gestito internamente e WorkManager si occupa di assicurare che il lavoro venga mantenuto e riprogrammato per i riavvii tra dispositivi.

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

Lavoro accelerato

Puoi utilizzare WorkManager per pianificare il lavoro immediato per l'esecuzione in background. Dovresti utilizzare Lavoro accelerato per attività importanti per l'utente e che vengono completate in pochi minuti.

Criterio flessibile per i nuovi tentativi

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

Concatenamento del lavoro

Per lavori correlati complessi, concatena 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à di lavoro, puoi definire i dati di input e di output relativi a tale attività. Quando concateni i lavori, WorkManager passa automaticamente i dati di output da un'attività di lavoro a quella successiva.

Interoperabilità di threading integrata

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

Usa WorkManager per un lavoro affidabile

WorkManager è progettato per le attività che devono essere eseguite in modo affidabile anche se l'utente esce da una schermata, l'app esce o il dispositivo si riavvia. Ad esempio:

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

WorkManager non è destinato al lavoro in background in-process che può essere terminato in modo sicuro se il processo dell'app scompare. Non è nemmeno una soluzione generale per tutte le attività che richiedono un'esecuzione immediata. Consulta la guida all'elaborazione in background per vedere quale soluzione soddisfa le tue esigenze.

Relazione con altre API

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

API Consigliati per Relazione con WorkManager
Coroutine Tutto il lavoro asincrono che non deve essere permanente. Le coroutine sono il metodo standard per lasciare il thread principale in Kotlin. Tuttavia, lasciano la memoria alla chiusura dell'app. Per il lavoro persistente, utilizza WorkManager.
Gestore sveglie Solo sveglie. A differenza di WorkManager, AlarmManager riattiva un dispositivo dalla modalità Sospensione. Pertanto, non è efficiente in termini di gestione dell'alimentazione e delle risorse. Utilizzalo solo per sveglie o notifiche precise, come eventi di calendario, non per operazioni in background.

Sostituzione delle API deprecate

L'API WorkManager è la sostituzione consigliata per tutte le precedenti API di pianificazione in background di Android, 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.

Samples

Video

Blog

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