Pianificare le attività con WorkManager Componente di Android Jetpack.
WorkManager è la soluzione consigliata per il lavoro persistente. Il lavoro è persistente se rimane pianificato durante i riavvii dell'app e del sistema. Poiché la maggior parte dell'elaborazione in background viene eseguita al meglio tramite il lavoro persistente, WorkManager è l'API principale consigliata per l'elaborazione in background.
Tipi di lavoro persistente
WorkManager gestisce tre tipi di attività persistenti:
- Immediata: attività che devono iniziare immediatamente e essere completate a breve. Potrebbe essere accelerata.
- A esecuzione prolungata: attività che potrebbero essere eseguite per più tempo, potenzialmente più di 10 minuti.
- Rimandabili: attività pianificate che iniziano in un secondo momento e possono essere eseguite periodicamente.
La Figura 1 illustra la relazione tra i diversi tipi di lavoro permanente.
Analogamente, la seguente tabella illustra i vari tipi di lavoro.
Digitare | Periodicità | Come accedere |
---|---|---|
Vista fattura | Una volta | OneTimeWorkRequest e Worker .
Per un lavoro rapido, chiama |
A lungo termine | Una tantum o periodica | Qualsiasi WorkRequest o Worker . Chiama setForeground() in Worker per gestire la notifica.
|
Posticipabile | Una tantum o periodica | PeriodicWorkRequest e Worker .
|
Per ulteriori informazioni su come configurare WorkManager, consulta la guida Definire le WorkRequest.
Funzionalità
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 limiti di lavoro. Ad esempio, esegui solo quando il dispositivo è su una rete senza misurazione, quando è inattivo o quando ha una 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. I lavori possono anche essere etichettati e denominati, il che ti consente di pianificare lavori unici e sostituibili e di monitorare o annullare insieme gruppi di lavori.
Il lavoro pianificato viene archiviato in un database SQLite gestito internamente e WorkManager si occupa di garantire che questo lavoro persista e venga riprogrammato dopo i riavvii del dispositivo.
Inoltre, WorkManager rispetta le best practice e le funzionalità di risparmio energetico come la modalità Sospensione, quindi non devi preoccuparti.
Lavoro rapido
Puoi utilizzare WorkManager per pianificare l'esecuzione immediata di un'attività in background. Devi utilizzare il lavoro rapido per le attività importanti per l'utente e che vengono completate in pochi minuti.
Criterio di ripetizione flessibile
A volte il lavoro non va a buon fine. WorkManager offre criteri flessibili per i nuovi tentativi, tra cui un criterio di backoff esponenziale configurabile.
Catena di lavoro
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à, puoi definire i dati di input e output. Quando concatena i lavori, WorkManager passa automaticamente i dati di output da un'attività di lavoro all'altra.
Interoperabilità del threading integrato
WorkManager si integra perfettamente con Coroutines e RxJava e offre la flessibilità di collegare le tue API asincrone.
Utilizzare WorkManager per un lavoro affidabile
WorkManager è destinato a operazioni che devono eseguirsi in modo affidabile anche se l'utente esce da una schermata, l'app esce o il dispositivo si riavvia. Per esempio:
- Invio di log o dati di analisi ai servizi di backend.
- Sincronizzazione periodica dei dati dell'applicazione con un server.
WorkManager non è progettato per i lavori in background in-process che possono essere terminati in sicurezza se il processo dell'app viene interrotto. Inoltre, non è una soluzione generale per tutte le attività che richiedono 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 determinati casi d'uso, non dovresti usarle per il lavoro persistente. È importante notare che le coroutine sono un framework di concorrenza, mentre WorkManager è una libreria per il lavoro persistente. Analogamente, devi utilizzare AlarmManager solo per orologi o calendari.
API | Consigliato per | Relazione con WorkManager |
---|---|---|
Coroutine | Tutti i lavori asincroni che non devono essere permanenti. | Le coroutine sono il mezzo standard per uscire dal thread principale in Kotlin. Tuttavia, vengono rimossi 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à Sospensione. Non è quindi efficiente in termini di potenza e gestione delle risorse. Utilizzalo solo per sveglie o notifiche precise, ad esempio eventi nel calendario, non per attività in background. |
Sostituzione delle API deprecate
L'API WorkManager è la sostituzione consigliata per tutte le API di pianificazione in background di Android precedenti, tra cui FirebaseJobDispatcher, GcmNetworkManager e Job Scheduler.
Per iniziare
Consulta la Guida introduttiva per iniziare a utilizzare WorkManager nella tua app.
Risorse aggiuntive
Per ulteriori informazioni su WorkManager
, consulta le seguenti risorse.
Campioni
Video
- Workmanager - MAD Skills, serie di video
- Lavorare con WorkManager, dall'Android Dev Summit 2018
- WorkManager: oltre le nozioni di base, dall'Android Dev Summit 2019
Blog
Consigliati per te
- Nota: il testo del link viene visualizzato quando JavaScript è disattivato
- Avvio dell'app