Pianifica le attività con WorkManager Parte di Android Jetpack.

WorkManager è la soluzione consigliata per il lavoro permanente. Il lavoro rimane costante quando rimane pianificato durante i riavvii delle app e di sistema. Poiché la maggior parte dell'elaborazione in background è ideale per il lavoro permanente, WorkManager è l'API principale consigliata per l'elaborazione in background.

Tipi di lavoro persistente

WorkManager gestisce tre tipi di lavoro permanente:

  • Immediata: attività che devono iniziare immediatamente e completare a breve. Può essere accelerato.
  • Lunga esecuzione: attività che possono essere eseguite più a lungo e potenzialmente più di 10 minuti.
  • Rinviabili: attività pianificate che iniziano in un secondo momento e possono essere eseguite periodicamente.

La figura 1 illustra in che modo i diversi tipi di lavoro permanente sono correlati tra loro.

Il lavoro permanente può essere immediato, a lunga esecuzione 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 setExpedited() per la tua richiesta OneTimeWork.

Corsa lunga Una volta o periodicamente Qualsiasi WorkRequest o Worker. Chiama setForeground() nel worker per gestire la notifica.
Decriptabile Una volta o periodicamente 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 principali:

Vincoli di lavoro

Definisci in modo dichiarativo le condizioni ottimali per l'esecuzione del lavoro utilizzando i vincoli di lavoro. Ad esempio, esegui questa operazione solo quando il dispositivo si trova su una rete non a consumo, quando è inattivo o quando la batteria è sufficiente.

Pianificazione affidabile

WorkManager ti consente di pianificare il lavoro per l'esecuzione una tantum o ripetuto utilizzando finestre di pianificazione flessibili. I lavori possono essere taggati e denominati, consentendo di pianificare lavoro unico e sostituibile e di monitorare o annullare i gruppi di lavoro.

Il lavoro programmato viene archiviato in un database SQLite gestito internamente e si occupa di assicurarsi che questo lavoro continui e sia ripianificato sui riavvii del dispositivo.

Inoltre, WorkManager aderisce alle funzionalità e alle best practice per il risparmio energetico come la modalità di sospensione, quindi non devi preoccuparti.

Lavoro accelerato

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

Norme sui nuovi tentativi flessibili

A volte il lavoro non riesce. WorkManager offre criteri relativi ai nuovi tentativi flessibili, incluso un criterio di backoff esponenziale configurabile.

Concatenamento dei lavori

Per i lavori correlati complessi, catena le singole attività di lavoro utilizzando un'interfaccia intuitiva che ti consente di controllare quali elementi vengono eseguiti 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 per quell'attività. Durante la concatenazione del lavoro, WorkManager passa automaticamente i dati di output da un'attività di lavoro all'altra.

Interoperabilità integrata in thread

WorkManager si integra perfettamente con Coroutine e RxJava e offre la flessibilità necessaria per collegare le tue API asincrone.

Usa WorkManager per lavorare in modo affidabile

WorkManager è progettato per funzionare in modo necessario per eseguire operazioni affidabili anche se l'utente esce da uno schermo, l'app esce o il dispositivo si riavvia. Ad esempio:

  • Invio di log o analisi ai servizi di backend.
  • Sincronizzazione periodica dei dati delle applicazioni con un server.

WorkManager non è pensato per le operazioni in background che possono essere terminate in sicurezza se il processo dell'app scompare. Inoltre, non è una soluzione generale per tutto il lavoro che richiede 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 alcuni casi d'uso, non devi utilizzarle 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 usare AlarmManager solo per orologi e calendari.

API Consigliato per Relazione con WorkManager
Coroutine Tutto il lavoro asincrono che non deve necessariamente essere permanente. Le coroutine sono il mezzo standard per lasciare il filo principale in Kotlin. Tuttavia, lasciano il ricordo quando l'app viene chiusa. Per il lavoro permanente, utilizza WorkManager.
Gestore allarme Solo sveglie. A differenza di WorkManager, AlarmManager riattiva un dispositivo dalla modalità di sospensione. Pertanto, non è efficiente in termini di potenza e gestione delle risorse. Usala solo per sveglie precise o notifiche come gli eventi nel calendario, non per lavori in background.

Sostituzione delle API deprecate

L'API WorkManager è il sostituto consigliato di tutte le precedenti API di pianificazione in background di Android, tra cui FirebaseJobDispatcher, GcmNetworkManager e Job Scheduler.

Come 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 non è attivo
  • Avvio di app