Lavoro costante Parte di Android Jetpack.

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

Tipi di lavoro persistente

WorkManager gestisce tre tipi di lavoro permanente:

  • Immediate: attività che devono iniziare immediatamente e completate a breve. Potrebbe essere rapidamente.
  • Lunga esecuzione: attività che possono essere eseguite per un periodo più lungo, potenzialmente più lungo del 10 minuti.
  • Rinviabili: attività pianificate che vengono avviate in un secondo momento e possono essere eseguite periodicamente.

La Figura 1 illustra la relazione tra i diversi tipi di lavoro persistente un'altra.

Il lavoro persistente può essere immediato, lungo o irrecuperabile
Figura 1: tipi di lavori persistenti.

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

Tipo Periodicità Come accedere
Vista fattura Una volta OneTimeWorkRequest e Worker. Per velocizzare il lavoro, chiama il numero setExpedited() tramite OneTimeWorkRequest.
Corsa lunga Una volta o periodica Qualsiasi valore WorkRequest o Worker. Chiama setForeground() nel worker per gestire la notifica.
Rinviabile Una volta o periodica PeriodicWorkRequest e Worker.

Per ulteriori informazioni su come impostare WorkManager, consulta la sezione Definire WorkRequests.

Funzionalità di WorkManager

Oltre a fornire un'API più semplice e più coerente, WorkManager ha una di altri vantaggi principali:

Vincoli di lavoro

Definire in modo dichiarativo le condizioni ottimali per l'esecuzione del tuo lavoro utilizzando il lavoro vincoli. Ad esempio, esegui solo quando il dispositivo è in modalità unmetered quando il dispositivo è inattivo o quando la 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. È possibile taggare e assegnare un nome al lavoro nonché di programmare lavori unici e sostituibili, nonché monitorare o annullare di gruppi di lavoro.

Le attività pianificate vengono archiviate in un database SQLite gestito internamente WorkManager si occupa di garantire che questo lavoro venga mantenuto e che venga riprogrammato tra i riavvii dei dispositivi.

Inoltre, WorkManager rispetta le funzionalità e le best practice per il risparmio energetico. come la modalità Sospensione, per non doverti preoccupare.

Lavoro accelerato

Puoi utilizzare WorkManager per pianificare l'esecuzione immediata del lavoro nel sfondo. Ti consigliamo di usare Lavoro accelerato per le attività importanti l'utente e che vengono completate in pochi minuti.

Criterio flessibile per i nuovi tentativi

A volte il lavoro non riesce. 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 un'interfaccia intuitiva che ti consente di controllare quali elementi vengono eseguiti che 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 relativi dati di input e output. Quando si concatenano le attività, WorkManager trasmette automaticamente i dati di output da un'attività di lavoro all'altra.

Interoperabilità dei thread integrata

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

Utilizzare WorkManager per un lavoro affidabile

WorkManager è destinato al lavoro necessario per essere eseguito in modo affidabile anche se l'utente esce dalla schermata, l'app esce o il dispositivo si riavvia. Per esempio:

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

WorkManager non è pensato per il lavoro in background in fase di elaborazione, che può essere verrà interrotto se il processo dell'app scompare. Inoltre, non si tratta di una soluzione generale per tutte le attività che richiedono l'esecuzione immediata. Rivedi i precedenti per capire quale soluzione soddisfa le tue esigenze.

Relazione con altre API

Sebbene le coroutine siano la soluzione consigliata per determinati casi d'uso, per lavorare in modo continuativo. È importante notare che le coroutine è un framework di contemporaneità, mentre WorkManager è una libreria per al lavoro. Allo stesso modo, devi utilizzare allarme 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 metodo standard per abbandonare il thread principale in Kotlin. Tuttavia, lasciano memoria alla chiusura dell'app. Per il lavoro persistente, utilizza WorkManager.
Sistema di gestione degli allarmi Solo sveglie. A differenza di WorkManager, Avvisi di sveglia riattiva un dispositivo dalla modalità Sospensione. Non è quindi efficiente in termini di alimentazione e gestione delle risorse. Usala solo per sveglie o notifiche precise, come gli eventi nel calendario, non per lavori in background.

Sostituisci le API deprecate

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

Inizia

Consulta la Guida introduttiva per iniziare a utilizzare WorkManager nel tuo dell'app.

Risorse aggiuntive

Le sezioni seguenti forniscono alcune risorse aggiuntive.

Video

Blog

Campioni