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