Lavoro continuo Componente di Android Jetpack.

Il lavoro è permanente quando rimane pianificato tramite riavvii delle app e del sistema. WorkManager è la soluzione consigliata per il lavoro persistente. Poiché la maggior parte dell'elaborazione in background avviene al meglio mediante un lavoro permanente, WorkManager è quindi anche l'API consigliata principale per l'elaborazione in background in generale.

Tipi di lavoro persistente

WorkManager gestisce tre tipi di lavoro persistente:

  • Immediate: attività che devono iniziare immediatamente e completarsi a breve. Possono essere veloci.
  • Lunga esecuzione: attività che potrebbero essere eseguite per più tempo, potenzialmente più di 10 minuti.
  • Rinviabili: 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 permanente.

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

Analogamente, la tabella seguente illustra i vari tipi di attività.

Tipo Periodicità Come accedere
Immediata Una volta OneTimeWorkRequest e Worker. Per velocizzare il lavoro, chiama setExpedited() sul tuo OneTimeWorkRequest.
Corsa lunga Una volta o periodicamente Qualsiasi WorkRequest o Worker. Chiama setForeground() nel worker per gestire la notifica.
Differibile Una volta o periodicamente PeriodicWorkRequest e Worker.

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

Funzionalità di WorkManager

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 solo quando il dispositivo si trova su una rete non a consumo, quando è inattivo o quando la batteria ha un livello di carica sufficiente.

Programmazione solida

WorkManager ti consente di pianificare il lavoro in modo che venga eseguito una volta o ripetutamente utilizzando finestre di pianificazione flessibili. È possibile assegnare tag e nomi anche 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 garantire che il lavoro venga mantenuto e riprogrammato per tutti i riavvii tra dispositivi.

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

Lavoro accelerato

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

Criterio flessibile per i nuovi tentativi

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

Concatenamento del lavoro

Per attività correlate complesse, collega le singole attività di lavoro utilizzando un'interfaccia intuitiva che ti consente di controllare quali parti vengono eseguite in sequenza e quali vengono eseguite 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 si concatenano le collaborazioni, WorkManager passa automaticamente i dati di output da un'attività di lavoro a quella successiva.

Interoperabilità del 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 è destinato al lavoro necessario per essere eseguito 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 corso, che può essere terminato in sicurezza se il processo dell'app scompare. Inoltre, non è una soluzione generale per tutte le attività che richiedono un'esecuzione immediata. Consulta la guida all'elaborazione in background per sapere 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 lavori persistenti. È 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 Consigliato per Relazione con WorkManager
Coroutine Tutto il lavoro asincrono che non deve essere permanente. Le coroutine sono il mezzo standard per lasciare il thread principale in Kotlin. Tuttavia, lasciano la memoria alla chiusura dell'app. Per il lavoro persistente, utilizza WorkManager.
Gestore avvisi Solo sveglie. A differenza di WorkManager, AlarmManager riattiva un dispositivo dalla modalità Sospensione. Non è quindi efficiente in termini di gestione dell'alimentazione e delle risorse. Utilizzala solo per sveglie o notifiche precise, ad esempio eventi nel calendario, non per operazioni in background.

Sostituisci le API ritirate

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

Inizia

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

Risorse aggiuntive

Le sezioni seguenti forniscono alcune risorse aggiuntive.

Video

Blog

Campioni