Persistent work Parte di Android Jetpack.
Il lavoro è persistente quando rimane pianificato durante i riavvii delle app e del sistema. WorkManager è la soluzione consigliata per il lavoro persistente. Poiché la maggior parte dell'elaborazione in background viene eseguita al meglio tramite un lavoro persistente, WorkManager è quindi anche l'API principale consigliata per l'elaborazione in background in generale.
Tipi di lavoro persistente
WorkManager gestisce tre tipi di lavoro persistente:
- Immediato: attività che devono iniziare immediatamente e terminare a breve. May be expedited.
- Lunga esecuzione: attività che potrebbero essere eseguite più a lungo, potenzialmente più di 10 minuti.
- Differibili: attività pianificate che iniziano in un secondo momento e possono essere eseguite periodicamente.
La figura 1 mostra la relazione tra i diversi tipi di lavoro persistente.
Allo stesso modo, la tabella seguente descrive i vari tipi di lavoro.
Tipo | Periodicità | Come accedere |
---|---|---|
Vista fattura | Una volta | OneTimeWorkRequest e Worker . Per un'attività rapida, chiama setExpedited() sulla tua richiesta di attività una tantum. |
A lunga esecuzione | Una tantum o periodico | Qualsiasi WorkRequest o Worker . Chiama setForeground() nel lavoratore per gestire la notifica. |
Differibile | Una tantum o periodico | PeriodicWorkRequest e Worker . |
Per ulteriori informazioni su come configurare WorkManager, consulta la guida Definizione delle WorkRequest.
Funzionalità di WorkManager
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 solo quando il dispositivo è connesso a una rete non a consumo, quando è inattivo o quando la batteria è sufficiente.
Pianificazione solida
WorkManager ti consente di pianificare l'esecuzione di un'attività una tantum o ripetutamente utilizzando finestre di pianificazione flessibili. Il lavoro può essere taggato e denominato, consentendoti di programmare lavori unici 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 questo lavoro venga mantenuto e riprogrammato in caso di riavvio del dispositivo.
Inoltre, WorkManager rispetta le funzionalità e le best practice di risparmio energetico come la modalità Doze, quindi non devi preoccuparti.
Attività rapida
Puoi utilizzare WorkManager per pianificare l'esecuzione immediata del lavoro in background. Devi utilizzare Expedited work per le attività importanti per l'utente e che vengono completate in pochi minuti.
Policy di ripetizione flessibile
A volte il lavoro non va a buon fine. WorkManager offre criteri di ripetizione flessibili, tra cui un criterio di backoff esponenziale configurabile.
Work chaining
Per lavori correlati complessi, collega 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 output. Quando concateni il lavoro, WorkManager passa automaticamente i dati di output da un'attività di lavoro alla successiva.
Interoperabilità dei thread integrata
WorkManager si integra perfettamente con Coroutine e RxJava e offre la flessibilità di collegare le tue API asincrone.
Utilizzare WorkManager per un lavoro affidabile
WorkManager è progettato per il lavoro che deve essere eseguito in modo affidabile anche se l'utente esce da una schermata, l'app si chiude o il dispositivo viene riavviato. Per esempio:
- Invio di log o analisi ai servizi di backend.
- Sincronizzazione periodica dei dati dell'applicazione con un server.
WorkManager non è progettato per il lavoro in background in-process che può essere terminato in modo sicuro se il processo dell'app viene interrotto. Inoltre, non è una soluzione generale per tutto il lavoro che richiede un'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 determinati casi d'uso, non dovresti utilizzarle per attività persistenti. È importante notare che le coroutine sono un framework di concorrenza, mentre WorkManager è una libreria per il lavoro persistente. Allo stesso modo, devi utilizzare AlarmManager solo per orologi o calendari.
API | Consigliato per | Relazione con WorkManager |
---|---|---|
Coroutines | Tutto il lavoro asincrono che non deve essere persistente. | Le coroutine sono il mezzo standard per uscire dal thread principale in Kotlin. Tuttavia, vengono eliminati dalla memoria una volta chiusa l'app. Per il lavoro persistente, utilizza WorkManager. |
AlarmManager | Solo sveglie. | A differenza di WorkManager, AlarmManager riattiva un dispositivo dalla modalità Doze. Pertanto, non è efficiente in termini di gestione dell'alimentazione e delle risorse. Utilizzalo solo per sveglie o notifiche precise, ad esempio eventi del calendario, non per attività in background. |
Sostituisci le API deprecate
L'API WorkManager è la sostituzione consigliata per le precedenti API di pianificazione in background di Android, tra cui FirebaseJobDispatcher
e GcmNetworkManager
.
Inizia
Consulta la Guida introduttiva per iniziare a utilizzare WorkManager nella tua app.
Risorse aggiuntive
Le seguenti sezioni forniscono alcune risorse aggiuntive.
Video
- Workmanager - MAD Skills, serie di video
- Working with WorkManager, dall'Android Dev Summit 2018
- WorkManager: oltre le nozioni di base, dall'Android Dev Summit 2019