Pianifica le attività con WorkManager Componente di Android Jetpack.
WorkManager è la soluzione consigliata per il lavoro persistente. Il lavoro persiste quando viene programmato tramite riavvii dell'app e riavvii del sistema. Poiché la maggior parte dell'elaborazione in background avviene al meglio tramite un lavoro permanente, WorkManager è l'API principale consigliata per l'elaborazione in background.
Tipi di lavoro persistente
WorkManager gestisce tre tipi di lavoro persistente:
- Immediate: attività che devono iniziare immediatamente e essere completate a breve. Può essere rapido.
- Lunga esecuzione: attività che potrebbero essere eseguite per più di 10 minuti.
- Rinviabile: 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 persistente.
Analogamente, la tabella seguente illustra i vari tipi di lavoro.
Digitare | Periodicità | Come accedere |
---|---|---|
Immediata | Una volta | OneTimeWorkRequest e Worker .
Per velocizzare il lavoro, chiama il numero |
Corsa lunga | Una tantum o periodica | Qualsiasi WorkRequest o Worker . Chiama setForeground() nel worker per gestire la notifica.
|
Rinviabile | Una tantum o periodica | PeriodicWorkRequest e Worker .
|
Per ulteriori informazioni su come configurare WorkManager, consulta la guida Definizione delle richieste di lavoro.
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 vincoli di lavoro. Ad esempio, esegui l'operazione soltanto quando il dispositivo si trova su una rete non a consumo, quando è inattivo o quando la batteria ha un'autonomia sufficiente.
Programmazione efficace
WorkManager ti consente di pianificare il lavoro in modo che venga eseguito una tantum o ripetutamente utilizzando finestre di pianificazione flessibili. È possibile anche taggare e assegnare nomi 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 assicurare che il lavoro venga mantenuto e riprogrammato per i riavvii tra dispositivi.
Inoltre, WorkManager è conforme a funzionalità e best practice di risparmio energetico come la modalità Sospensione, quindi non devi preoccuparti.
Lavoro accelerato
Puoi utilizzare WorkManager per pianificare il lavoro immediato per l'esecuzione in background. Dovresti utilizzare Lavoro accelerato per attività importanti per l'utente e che vengono completate in pochi minuti.
Criterio flessibile per i nuovi tentativi
A volte il lavoro non funziona. 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'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 di output relativi a tale attività. Quando concateni i lavori, WorkManager passa automaticamente i dati di output da un'attività di lavoro a quella successiva.
Interoperabilità di 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 è progettato per le attività che devono essere eseguite 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-process che può essere terminato in modo sicuro se il processo dell'app scompare. Non è nemmeno una soluzione generale per tutte le attività che richiedono un'esecuzione immediata. Consulta la guida all'elaborazione in background per vedere quale soluzione soddisfa le tue esigenze.
Relazione con altre API
Sebbene le coroutine siano la soluzione consigliata per determinati casi d'uso, non devi utilizzarle per il lavoro persistente. È 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 | Consigliati per | Relazione con WorkManager |
---|---|---|
Coroutine | Tutto il lavoro asincrono che non deve essere permanente. | Le coroutine sono il metodo standard per lasciare il thread principale in Kotlin. Tuttavia, lasciano la memoria alla chiusura dell'app. Per il lavoro persistente, utilizza WorkManager. |
Gestore sveglie | Solo sveglie. | A differenza di WorkManager, AlarmManager riattiva un dispositivo dalla modalità Sospensione. Pertanto, non è efficiente in termini di gestione dell'alimentazione e delle risorse. Utilizzalo solo per sveglie o notifiche precise, come eventi di calendario, non per operazioni in background. |
Sostituzione delle API deprecate
L'API WorkManager è la sostituzione consigliata per tutte le precedenti API di pianificazione in background di Android, 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.
Samples
Video
- Workmanager - MAD Skills, serie di video
- Lavorare con WorkManager, in occasione dell'Android Dev Summit 2018
- WorkManager: Beyond the Fundamentals, dall'Android Dev Summit 2019
Blog
Consigliato per te
- Nota: il testo del link viene visualizzato quando JavaScript è disattivato
- Avvio dell'app