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.
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
- Workmanager - MAD Skills, serie di video
- Lavorare con WorkManager, dall'Android Dev Summit 2018
- WorkManager: oltre le basi, dal team di sviluppo Android 2019 Vetta