WorkManager
Aggiornamento più recente | Release stabile | Candidato per la release | Versione beta | Versione alpha |
---|---|---|---|---|
30 ottobre 2024 | 2.9.1 | - | - | - |
Dichiarazione delle dipendenze
Per aggiungere una dipendenza da WorkManager, devi aggiungere il repository Maven di Google al tuo progetto:
Aggiungi le dipendenze per gli elementi necessari nel file build.gradle
per la tua app o il tuo modulo:
Alla moda
dependencies { def work_version = "2.9.1" // (Java only) implementation "androidx.work:work-runtime:$work_version" // Kotlin + coroutines implementation "androidx.work:work-runtime-ktx:$work_version" // optional - RxJava2 support implementation "androidx.work:work-rxjava2:$work_version" // optional - GCMNetworkManager support implementation "androidx.work:work-gcm:$work_version" // optional - Test helpers androidTestImplementation "androidx.work:work-testing:$work_version" // optional - Multiprocess support implementation "androidx.work:work-multiprocess:$work_version" }
Kotlin
dependencies { val work_version = "2.9.1" // (Java only) implementation("androidx.work:work-runtime:$work_version") // Kotlin + coroutines implementation("androidx.work:work-runtime-ktx:$work_version") // optional - RxJava2 support implementation("androidx.work:work-rxjava2:$work_version") // optional - GCMNetworkManager support implementation("androidx.work:work-gcm:$work_version") // optional - Test helpers androidTestImplementation("androidx.work:work-testing:$work_version") // optional - Multiprocess support implementation("androidx.work:work-multiprocess:$work_version") }
Per informazioni sull'utilizzo delle estensioni Kotlin, consulta la documentazione di ktx.
Per ulteriori informazioni sulle dipendenze, consulta Aggiungere dipendenze di compilazione.
Feedback
Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se scopri nuovi problemi o hai idee per migliorare questa raccolta. Prima di crearne uno nuovo, dai un'occhiata ai problemi esistenti in questa raccolta. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.
Per ulteriori informazioni, consulta la documentazione di Issue Tracker.
Versione 2.10
Versione 2.10.0
30 ottobre 2024
androidx.work:work-*:2.10.0
viene rilasciato. La versione 2.10.0 contiene questi commit.
Modifiche significative dalla versione 2.9.1
- Sono stati aggiunti tag di traccia ai job da
WorkManager
, il che rende "adb shell dumpsys jobscheduler" molto più facile da capire, poiché conterrà il nome del worker in esecuzione. Vengono aggiunte anche sezioni di tracce intorno alle aree chiave diWorkManager
. Configuration.workerCoroutineContext
è stato aggiunto per il controllo del gestore in cui viene eseguitoCoroutineWorker
.- Gli sviluppatori possono specificare
NetworkRequest
come vincolo per un worker tramite il metodoConstraints.setRequiredNetworkRequest
. In questo modo, puoi avere un controllo più granulare sulla rete su cui deve essere eseguito questo worker. WorkManager
La versione 2.10.0 è ora compilata con l'SDK 35 e contiene varie modifiche per la compatibilità con SDK 35.
Versione 2.10.0-rc01
24 ottobre 2024
androidx.work:work-*:2.10.0-rc01
viene rilasciato. La versione 2.10.0-rc01 contiene questi commit.
Versione 2.10.0-beta01
2 ottobre 2024
androidx.work:work-*:2.10.0-beta01
viene rilasciato. La versione 2.10.0-beta01 contiene questi commit.
Versione 2.10.0-alpha04
18 settembre 2024
Viene rilasciato androidx.work:work-*:2.10.0-alpha04
. La versione 2.10.0-alpha04 contiene questi commit.
Modifiche all'API
- Aggiungi il motivo dell'interruzione
STOP_REASON_FOREGROUND_SERVICE_TIMEOUT
per quando un worker in primo piano viene interrotto a causa del timeout di esecuzione in base al tipo di servizio in primo piano. (Ibd0af)
Versione 2.10.0-alpha03
4 settembre 2024
androidx.work:work-*:2.10.0-alpha03
viene rilasciato. La versione 2.10.0-alpha03 contiene questi commit.
Nuove funzionalità
- Sono stati aggiunti tag di traccia ai job da
WorkManager
, il che rende "adb shell dumpsys jobscheduler" molto più facile da capire, poiché conterrà il nome del worker in esecuzione. Vengono aggiunte anche sezioni di traccia intorno alle aree chiave diWorkManager
.
Modifiche all'API
- WorkManager 2.10.0 viene ora compilato con l'SDK 35.
- Correggere il timeout dei thread in primo piano di tipo "servizio breve" e "sincronizzazione dei dati" e la causa di un ANR quando
WorkManager
non ha chiamatostopSelf()
. Questa correzione si applica solo ai dispositivi con API 34 e 35 in cui sono stati introdotti i tipi di servizi in primo piano. (ca06b2, b/364508145) - Nuove API
WorkerParameters
che consentono di cambiare il processo remoto a cui si associaWorker
quando si utilizza unWorkerFactory
. (Ibdc8a, Ie8a90, I7373f)
Correzioni di bug
- È stato corretto un arresto anomalo causato dal tentativo da parte di
WorkManager
di riavviare un worker a lunga esecuzione (ovvero un worker in primo piano) quando per il tipo in primo piano del lavoro erano state revocate le autorizzazioni per i prerequisiti di Android 14. (b/333957914) - È stato rimosso il riepilogo manuale dell'accesso alle nuove API di piattaforma, poiché questo avviene automaticamente tramite la definizione del modello API quando si utilizza R8 con AGP 7.3 o versioni successive (ad es. R8 versione 3.3) e per tutte le build quando si utilizza AGP 8.1 o versioni successive (ad es. D8 versione 8.1). Si consiglia ai clienti che non utilizzano AGP di eseguire l'aggiornamento alla versione D8 8.1 o successiva. Consulta questo articolo per ulteriori dettagli. (Ia60e0, b/345472586)
Versione 2.10.0-alpha02
17 aprile 2024
androidx.work:work-*:2.10.0-alpha02
viene rilasciato. La versione 2.10.0-alpha02 contiene questi commit.
Modifiche all'API
- È stata aggiunta la possibilità di emettere intervalli di traccia tramite un
@RestrictTo
Tracer
configurabile inWorkManager
. (I17d7f, b/260214125) Configuration.workerCoroutineContext
è stato aggiunto per il controllo del gestore in cui viene eseguitoCoroutineWorker
. Consente di evitare completamente l'utilizzo diDispatchers.Default
inWorkManager
. (Icd1b7)- Aggiungi gestori delle eccezioni personalizzati per i worker (Ib1b74, b/261190695)
- Ora è possibile creare
OneTimeWorkRequest.Builder
ePeriodicWorkRequest.Builder
conKClass
anziché conClass
:val request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build()
(Ib55f6) - È stata eseguita la migrazione di
WorkManager
classe a Kotlin. Ora i metodi che restituisconoLiveData
,ListenableFuture
oFlow
forniscono informazioni corrette sulla nullabilità. Potrebbero essere necessarie modifiche al codice sorgente dei clienti, se le ipotesi sulla nullità in quel codice non sono corrette. (If6757)
Versione 2.10.0-alpha01
24 gennaio 2024
Viene rilasciato androidx.work:work-*:2.10.0-alpha01
. La versione 2.10.0-alpha01 contiene questi commit.
Nuove funzionalità
- Gli sviluppatori possono specificare
NetworkRequest
come vincolo per un worker tramite il metodoConstraints.setRequiredNetworkRequest
. Ciò consente un controllo più granulare sulla rete che questo worker deve eseguire.
Modifiche alle API
- È stata aggiunta la possibilità di specificare
NetworkRequest
come vincolo. (Id98a1, b/280634452)
Versione 2.9
Versione 2.9.1
7 agosto 2024
androidx.work:work-*:2.9.1
viene rilasciato. La versione 2.9.1 contiene questi commit.
Correzioni di bug
- È stato corretto un arresto anomalo causato dal
WorkManager
tentativo di riavviare un worker a lungo termine (ovvero un worker in primo piano) quando il tipo di lavoro in primo piano aveva autorizzazioni di prerequisito di Android 14 revocate. (b/333957914)
Versione 2.9.0
29 novembre 2023
androidx.work:work-*:2.9.0
viene rilasciato. La versione 2.9.0 contiene questi commit.
Modifiche importanti dalla versione 2.8.0
- Osservabilità tramite
Flow
. AnzichéLiveData
, ora l'avanzamento del lavoratore può essere osservato tramiteWorkManager.getWorkInfosFlow
e metodi simili di Flow. - Ora
WorkManager
fornisce un suggerimento sul motivo per cui un worker è stato interrotto in precedenza. È possibile eseguire query da un worker stesso tramite il metodogetStopReason()
o daWorkInfo
tramitegetStopReason()
. - Programmazione precisa dei job periodici tramite
setNextScheduleTimeOverride
. Ciò consente il calcolo dinamico della pianificazione dei lavori periodici successiva, che può essere utilizzata per implementare funzionalità avanzate come i tempi di aggiornamento adattivi, il comportamento di ripetizione personalizzato o l'esecuzione di un job del feed di notizie prima che l'utente si svegli ogni mattina senza deriva.ExistingPeriodicWorkPolicy.UPDATE
deve essere utilizzato con queste tecniche per evitare di annullare un worker in esecuzione mentre ne viene pianificato un altro. - Test di WorkManager con l'organizzazione in thread corrispondente alla produzione.
ExecutorsMode.PRESERVE_EXECUTORS
può essere utilizzato ininitializeTestWorkManager
per conservare gli esecutori impostati inConfiguration
e per utilizzare il thread principale reale. - Le API di coroutine come
CoroutineWorker
sono state spostate dall'elemento aggiuntivo work-runtime-ktx all'elemento principale work-runtime. work-runtime-ktx ora è vuoto.
Modifiche all'API
stopReason
è stato aggiunto aWorkInfo
. RendestopReason
disponibile dopo l'esecuzione del worker. Potrebbe essere utile per i reportstopReason
in modo utilizzabile, perché una volta interrotto un worker, un'app stessa potrebbe essere interrotta molto rapidamente. (I21386)- Consenti di impostare
Clock
tramite la configurazione e di utilizzarlo per definire la sequenza di esecuzione dei test dei worker. (Ic586e) - Al metodo
getStopReason()
è stato aggiuntoListenableWorker
che fornisce un suggerimento sul motivo dell'interruzione del worker. (I07060) - È stato aggiunto
WorkManagerTestInitHelper#closeWorkDatabase()
per evitare l'avviso di Closeguard sulle risorse con accesso non autorizzato. (Ia8d49) - Ora il costruttore di
WorkInfo
è pubblico, il che può essere utile per i test. (Ia00b6, b/209145335) work-runtime-ktx
è ora vuoto,CoroutineWorker
e altre utilità specifiche per Kotlin sono ora disponibili nell'artifact principale di work-runtime. (I71a9a)- È stato aggiunto il metodo
setNextScheduleTimeOverride
, che consente di impostare in modo accurato i programmi di lavoro periodici (I3b4da) - È stato aggiunto
getNextScheduleTimeMillis
per ottenere informazioni sull'ora di esecuzione pianificata inWorkInfo
. (I797e4) - Le informazioni su ritardo iniziale e periodicità vengono aggiunte a
WorkInfo
. (I52f2f) - È stato aggiunto il metodo di osservazione dei lavoratori tramite i flussi tramite i metodi
getWorkInfosByTagFlow
,getWorkInfoByIdFlow
,getWorkInfosForUniqueWorkFlow
,getWorkInfosFlow
(If122a) - Sono state aggiunte le annotazioni
@RequiresApi(...)
mancanti ai costruttori e alle proprietà diConstraints
. Ora sono in linea con le annotazioni corrispondenti sui setter inConstraints.Builder
presenti nelle prime versioni diWorkManager
. (I6d7d2) WorkManager
ora ha un limite separato per i worker URI dei contenuti per assegnare loro slot garantiti inJobScheduler
al fine di evitare aggiornamenti mancanti dei contenuti in caso di carico elevato. Il limite può essere configurato tramiteConfiguration.Builder.setContentUriTriggerWorkersLimit
. (Ic128f)- I vincoli sono stati aggiunti a
WorkInfo
. (I162c0)
Versione 2.9.0-rc01
18 ottobre 2023
androidx.work:work-*:2.9.0-rc01
viene rilasciato. La versione 2.9.0-rc01 contiene questi commit.
- Nessuna modifica dall'ultima release beta
Versione 2.9.0-beta01
6 settembre 2023
androidx.work:work-*:2.9.0-beta01
viene rilasciato. La versione 2.9.0-beta01 contiene questi commit.
Modifiche all'API
- Sono state aggiunte costanti per i motivi di interruzione restituiti da
WorkInfo.stopReason
eListenableWorker.stopReason
(I0cc00)
Versione 2.9.0-alpha02
26 luglio 2023
androidx.work:work-*:2.9.0-alpha02
viene rilasciato. La versione 2.9.0-alpha02 contiene questi commit.
Nuove funzionalità
- Ora
WorkManager
fornisce un suggerimento sul motivo per cui un worker è stato precedentemente interrotto. È possibile eseguire query da un worker stesso tramite il metodogetStopReason()
o daWorkInfo
tramitegetStopReason()
.
Modifiche alle API
stopReason
è stato aggiunto aWorkInfo
. Rende disponibilestopReason
dopo l'esecuzione del worker. Potrebbe essere utile per i reportstopReason
in modo utilizzabile, perché una volta interrotto un worker, un'app stessa potrebbe essere interrotta molto rapidamente. (I21386)- Consenti di impostare l'orologio tramite la configurazione e di utilizzarlo per definire la sequenza di esecuzione dei test dei worker. (Ic586e)
- Al metodo
getStopReason()
è stato aggiuntoListenableWorker
che fornisce un suggerimento sul motivo dell'interruzione del worker. (I07060) - È stato aggiunto
WorkManagerTestInitHelper#closeWorkDatabase()
per evitare l'avviso di Closeguard sulle risorse con accesso non autorizzato. (Ia8d49)
Correzioni di bug
- È stata aggiunta la possibilità di bypassare
overrideNextScheduleTime
utilizzandoTestDriver
e sono stati risolti i problemi di testabilità. (Ic2905)
Versione 2.9.0-alpha01
7 giugno 2023
androidx.work:work-*:2.9.0-alpha01
viene rilasciato. La versione 2.9.0-alpha01 contiene questi commit.
Nuove funzionalità
- Osservabilità tramite
Flow
. AnzichéLiveData
, ora l'avanzamento del lavoratore può essere osservato tramiteWorkManager.getWorkInfosFlow
e metodi simili di Flow. - Programmazione precisa dei job periodici tramite
setNextScheduleTimeOverride
. Ciò consente il calcolo dinamico della pianificazione dei lavori periodici successiva, che può essere utilizzata per implementare funzionalità avanzate come i tempi di aggiornamento adattivi, il comportamento di ripetizione personalizzato o l'esecuzione di un job del feed di notizie prima che l'utente si svegli ogni mattina senza deriva.ExistingPeriodicWorkPolicy.UPDATE
deve essere utilizzato con queste tecniche per evitare di annullare un worker attualmente in esecuzione durante la pianificazione di quello successivo. WorkManager
sta testando la produzione con threading corrispondente.ExecutorsMode.PRESERVE_EXECUTORS
può essere utilizzato per conservare gli esecutori impostati inConfiguration
e per utilizzare il thread principale reale.- Le API Coroutines come
CoroutineWorker
sono state spostate dall'artefatto aggiuntivowork-runtime-ktx
all'artefatto principalework-runtime
.work-runtime-ktx
è ora vuoto.
Modifiche all'API
- Il costruttore di
WorkInfo
è ora pubblico, il che può essere utile per i test. (Ia00b6, b/209145335) work-runtime-ktx
ora è vuoto,CoroutineWorker
e altre utilità specifiche di Kotlin sono ora disponibili nell'elementowork-runtime
principale. (I71a9a)- È stato aggiunto il metodo
setNextScheduleTimeOverride
, che consente di impostare in modo accurato i programmi di lavoro periodici (I3b4da) getEarliestRunTimeMillis
rinominato ingetNextScheduleTimeMillis
. (I2bd7a)- Le informazioni sulla prossima ora di esecuzione pianificata vengono aggiunte a
WorkInfo
. (I797e4) - Le informazioni sul ritardo iniziale e sulla periodicità vengono aggiunte a
WorkInfo
. (I52f2f) - È stato aggiunto il metodo di osservazione dei lavoratori tramite i flussi tramite i metodi
getWorkInfosByTagFlow
,getWorkInfoByIdFlow
,getWorkInfosForUniqueWorkFlow
,getWorkInfosFlow
(If122a) - Sono state aggiunte le annotazioni
@RequiresApi(...)
mancanti ai costruttori e alle proprietà di Constraints. Ora sono in linea con le annotazioni corrispondenti sui setter inConstraints.Builder
esistenti nelle versioni precedenti diWorkManager
. (I6d7d2) WorkManager
ora ha un limite separato per i worker URI dei contenuti per assegnare loro slot garantiti inJobScheduler
al fine di evitare aggiornamenti mancanti dei contenuti in caso di carico elevato. Il limite può essere configurato tramiteConfiguration.Builder.setContentUriTriggerWorkersLimit
. (Ic128f)- I vincoli vengono aggiunti a
WorkInfo
. (I162c0)
Versione 2.8
Versione 2.8.1
22 marzo 2023
androidx.work:work-*:2.8.1
viene rilasciato. La versione 2.8.1 contiene questi commit.
Correzioni di bug
- È stato corretto l'ANR in
RescheduleReceiver
che in precedenza non gestiva correttamente due trasmissioni simultanee. (b/236906724)
Versione 2.8.0
8 febbraio 2023
Viene rilasciato androidx.work:work-*:2.8.0
. La versione 2.8.0 contiene questi commit.
Modifiche importanti dalla versione 2.7.0
Nuove funzionalità
- È stata aggiunta la possibilità di aggiornare
WorkRequests
in modo non invasivo, preservando l'ora di messa in coda originale, la catena e così via. Per ulteriori dettagli, consulta il post del blog dettagliato su questa funzionalità, nonché le javadoc diWorkManager.updateWork
eExistingPeriodicWorkPolicy.UPDATE
.
Modifiche all'API
- È stato aggiunto
WorkManager.updateWork
per aggiornare il lavoro preservando il tempo di accodamento e il concatenamento originali.(I9a248, b/219446409) - Membri aggiunti:
ExistingPeriodicWorkPolicy.UPDATE
Questo criterio consente di aggiornare un'attività periodica in base al nome. È simile aREPLACE
esistente, ma è meno invasivo: non annulla un worker se è attualmente in esecuzione e preserva il tempo di accodamento. Il ritardo e il periodo iniziali vengono calcolati in base all'ora di accodamento originale, anziché all'ora di aggiornamento.REPLACE
è stato ritirato per evitare confusione traREPLACE
eUPDATE
, che hanno nomi molto simili. Se vuoi mantenere la semantica precedente diREPLACE
, puoi utilizzareCANCEL_AND_REENQUEUE
, appena aggiunto, che è identico aREPLACE
. (I985ed, b/219446409) - È stata aggiunta la possibilità di intercettare le eccezioni di pianificazione fornendo
Consumer<Throwable>
tramite setSchedulingExceptionHandler) - È stata aggiunta la possibilità di fornire
Consumer<Throwable>
tramite setInitializationExceptionHandler per determinare se si sono verificati problemi durante il tentativo di inizializzare WorkManager. - Gli aiutanti in linea per
OneTimeWorkRequest
ePeriodicWorkRequest
sono stati spostati daandroidx.work:work-runtime-ktx
aandroidx.work:work-runtime
(I0010f, b/209145335) - Sono stati aggiunti i metodi di assistenza
WorkQuery.fromIds
,WorkQuery.fromStates
,WorkQuery.fromUniqueWorkNames
,WorkQuery.fromTags
per creare direttamenteWorkQuery
. (b/199919736) (If48f2, b/199919736) getForegroundInfo
è stato aggiunto aWorker
. (Ic1ead)RxWorker
sia per RxJava 2 che per RxJava 3 ora hasetForeground
che restituisceCompletable
che può essere utilizzato al posto disetForegroundInfoAsync
che restituisceListenableFuture
RxWorker
sia per RxJava 2 che per RxJava 3 hagetForegroundInfo
che restituisceSingle
che può essere utilizzato al posto digetForegroundInfoAsync
che restituisceListenableFuture
. (b/203851459)- Ora i vincoli possono essere costruiti direttamente anziché utilizzare
Constraints.Builder
, il che è pratico per gli utenti di Kotlin. (Idc390, b/137568653) - È stata aggiunta la possibilità di verificare se
WorkManager
è stato inizializzato. Inoltre, è stata aggiunta una nuova APIgetConfiguration()
per consentire agli sviluppatori di librerie di recuperare la configurazione con cui è stato inizializzatoWorkManager
. (I6eff3, b/212300336)
Correzioni di bug
- È stato risolto un problema con lo scheduler greedy che impediva l'esecuzione immediata dei worker sotto carico. (I9686b, b/248111307)
- È stato aggiunto
@RequiresPermission
alle API che richiedono l'autorizzazionePOST_NOTIFICATIONS
nell'SDK 33 e versioni successive. (Ie542e, b/238790278) - Propaga le cancellazioni in
CoroutineScope
aListenableFuture
quando utilizzisuspendCancellableCoroutine
.
Versione 2.8.0-rc01
7 dicembre 2022
androidx.work:work-*:2.8.0-rc01
viene rilasciato. La versione 2.8.0-rc01 contiene questi commit.
Nuove funzionalità
- Nessuna nuova funzione in questa release. Si tratta principalmente di un aggiornamento della versione
Versione 2.8.0-beta02
9 novembre 2022
androidx.work:work-*:2.8.0-beta02
viene rilasciato. La versione 2.8.0-beta02 contiene questi commit.
Correzioni di bug
- È stato corretto il metodo
equals
inWorkInfo
, che in precedenza non teneva conto delle informazioni sulla nuova generazione. (4977cc)
Versione 2.8.0-beta01
5 ottobre 2022
androidx.work:work-*:2.8.0-beta01
viene rilasciato. La versione 2.8.0-beta01 contiene questi commit.
Correzioni di bug
- È stato risolto un problema con lo scheduler greedy che impediva l'esecuzione immediata dei worker sotto carico. (I9686b, b/248111307)
Versione 2.8.0-alpha04
7 settembre 2022
androidx.work:work-*:2.8.0-alpha04
viene rilasciato. La versione 2.8.0-alpha04 contiene questi commit.
Modifiche all'API
- Sono stati aggiunti
WorkerInfo.getGeneration()
eWorkerParameters.getGeneration()
che restituiscono la generazione di un worker. Un worker ha più generazioni se è stato aggiornato tramiteWorkManager.updateWork
oWorkManager.enqueueUniquePeriodicWork
utilizzandoExistingPeriodicWorkPolicy.UPDATE
. Tieni presente che se il worker è attualmente in esecuzione, è possibile che questo metodo restituisca una generazione più recente rispetto a quella del worker in esecuzione se è stato eseguito un aggiornamento durante l'esecuzione del worker. (I665c5, b/219446409) (I128a9, b/219446409) - È stato aggiunto
InitializationExceptionHandler
, un gestore delle eccezioni che può essere utilizzato per determinare se si sono verificati problemi durante il tentativo di inizializzareWorkManager
. (I061de)
Versione 2.8.0-alpha03
10 agosto 2022
androidx.work:work-*:2.8.0-alpha03
viene rilasciato. La versione 2.8.0-alpha03 contiene questi commit.
Nuove funzionalità
- È stata aggiunta la possibilità di aggiornare
WorkRequests
in modo non invasivo, preservando l'ora di messa in coda originale, la catena e così via. Per maggiori dettagli, consultaWorkManager.updateWork
eExistingPeriodicWorkPolicy.UPDATE
.
Modifiche all'API
WorkManager.updateWork
è stato aggiunto per aggiornare il lavoro preservandone l'ora di messa in coda e la catena originali.(I9a248, b/219446409)- Membri aggiunti:
ExistingPeriodicWorkPolicy.UPDATE
Questo criterio consente di aggiornare un'attività periodica in base al nome. È simile al comandoREPLACE
esistente, ma è meno invasivo: non annulla un worker se è in esecuzione e conserva l'ora di messa in coda. Il ritardo iniziale e il periodo vengono calcolati dall'ora di messa in coda originale anziché dall'ora di aggiornamento.REPLACE
è stato ritirato per evitare confusione traREPLACE
eUPDATE
, che hanno nomi molto simili. Se vuoi mantenere la semantica precedente diREPLACE
, puoi utilizzare ilCANCEL_AND_REENQUEUE
appena aggiunto, che è identico aREPLACE
. (I985ed, b/219446409) - Aggiungi la possibilità di intercettare le eccezioni di pianificazione definendo un
SchedulingExceptionHandler
. (I033eb) - Gli aiuti in linea per
OneTimeWorkRequest
ePeriodicWorkRequest
sono stati spostati daandroidx.work:work-runtime-ktx
aandroidx.work:work-runtime
(I0010f, b/209145335)
Correzioni di bug
- È stato aggiunto
@RequiresPermission
alle API che richiedono l'autorizzazione POST_NOTIFICATIONS nell'SDK 33 e versioni successive. (Ie542e, b/238790278)
Versione 2.8.0-alpha02
6 aprile 2022
Viene rilasciato androidx.work:work-*:2.8.0-alpha02
. La versione 2.8.0-alpha02 contiene questi commit.
Modifiche alle API
- Ora i vincoli possono essere costruiti direttamente anziché utilizzare Builder, il che è pratico per gli utenti di Kotlin. (Idc390, b/137568653)
- Aggiunta la possibilità di verificare se
WorkManager
è stato inizializzato. Inoltre, è stata aggiunta una nuova APIgetConfiguration()
per consentire agli sviluppatori di librerie di recuperare la configurazione con cui è stato inizializzatoWorkManager
. (I6eff3, b/212300336)
Versione 2.8.0-alpha01
12 gennaio 2022
androidx.work:work-*:2.8.0-alpha01
viene rilasciato. La versione 2.8.0-alpha01 contiene questi commit.
Modifiche all'API
- Sono stati aggiunti i metodi di assistenza
WorkQuery.fromStates
,WorkQuery.fromUniqueWorkNames
,WorkQuery.fromTags
per creare direttamente WorkQuery. (If48f2, b/199919736) - Aggiunge metodi BuildCompat sperimentali per gli SDK futuri (Iafd82, b/207528937)
- Aggiungi
getForegroundInfo
aWorker
. (Ic1ead) - Sono stati aggiunti metodi di assistenza
WorkQuery.fromIds
per creare WorkQuery direttamente dagli ID. (Ie5bdf, b/199919736) - RxWorker ora ha
setForeground
che restituisceCompletable
e può essere utilizzato al posto disetForegroundInfoAsync
che restituisceListenableFuture
. (I85156) - RxWorker per RxJava 2 ora ha
getForegroundInfo
che restituisceSingle
che può essere utilizzato anzichégetForegroundInfoAsync
che restituisceListenableFuture
. (I21c91, b/203851459) - RxWorker per RxJava 3 ora ha
getForegroundInfo
che restituisceSingle
che può essere utilizzato al posto digetForegroundInfoAsync
che restituisceListenableFuture
. (I1ca8a) - RxWorker ora ha
setForeground
che restituisceCompletable
e può essere utilizzato al posto disetForegroundInfoAsync
che restituisceListenableFuture
. (I992a3, b/203851459)
Correzioni di bug
- Propaga le cancellazioni in
CoroutineScope
aListenableFuture
quando utilizzisuspendCancellableCoroutine
. (I77e63)
Versione 2.7
Versione 2.7.1
17 novembre 2021
androidx.work:work-*:2.7.1
viene rilasciato. La versione 2.7.1 contiene questi commit.
Correzioni di bug
- Gli annullamenti in
CoroutineScope
vengono propagati inListenableFuture
quando si utilizzasuspendCancellableCoroutine
. (I77e63) - Viene lanciata immediatamente un'eccezione quando le richieste di lavoro in ritardo vengono contrassegnate come expedite. bef1762
Versione 2.7.0
13 ottobre 2021
androidx.work:work-*:2.7.0
viene rilasciato. La versione 2.7.0 contiene questi commit.
Modifiche importanti dalla versione 2.6.0
WorkManager introduce una nuova API
WorkRequest.Builder.setExpedited(...)
per aiutare con le limitazioni dei servizi in primo piano in Android 12.Quando utilizzi
setExpedited(...)
, WorkManager esegue il riassemblaggio dei job in JobScheduler a partire da Android 12, garantendo al contempo la compatibilità con le versioni precedenti di Android tramite la delega a un servizio in primo piano.
Versione 2.7.0-rc01
29 settembre 2021
androidx.work:work-*:2.7.0-rc01
viene rilasciato. La versione 2.7.0-rc01 contiene questi commit.
Questa versione è identica a androidx.work:work-*:2.7.0-beta01
.
Versione 2.7.0-beta01
1° settembre 2021
Viene rilasciato androidx.work:work-*:2.7.0-beta01
. La versione 2.7.0-beta01 contiene questi commit.
Nuove funzionalità
- Riduci la contesa SQLite multiprocesso durante l'inizializzazione di WorkManager.
Modifiche all'API
- Rimuovi le API
@ExperimentalExpeditedWork
poiché le API di piattaforma sottostanti per Android 12 (S) sono stabili. (aosp/1792806)
Correzioni di bug
- Fornire un messaggio di errore migliore per gli operatori con priorità che non implementano
getForegroundInfoAsync()
. (aosp/1809376)
Versione 2.7.0-alpha05
21 luglio 2021
androidx.work:work-*:2.7.0-alpha05
viene rilasciato. La versione 2.7.0-alpha05 contiene questi commit.
Questa release include anche correzioni di bug della release WorkManager 2.6.0-beta02
.
Versione 2.7.0-alpha04
2 giugno 2021
androidx.work:work-*:2.7.0-alpha04
viene rilasciato.
Questa release contiene anche le modifiche della release 2.6.0-beta01.
Modifiche all'API
ListenableWorker.setForegroundAsync()
non è più deprecato.- Ti consigliamo di utilizzare l'API
WorkRequest.Builder.setExpedited(...)
, se possibile. Per supportare meglio le situazioni in cui l'app non è soggetta a limitazioni dei servizi in primo piano, gli sviluppatori possono utilizzare l'APIListenableWorker.setForegroundAsync()
. - Se viene chiamato
ListenableWorker.setForegroundAsync()
, quando l'app è soggetta a limitazioni dei servizi in primo piano, viene generata l'eccezione ForegroundServiceStartNotAllowedException.
Correzioni di bug
- Quando i job con priorità vengono riprogrammati, non sono più con priorità. Diventano lavori normali.
Versione 2.7.0-alpha03
21 aprile 2021
androidx.work:work-*:2.7.0-alpha03
viene rilasciato. La versione 2.7.0-alpha03 contiene questi commit.
Nuove funzionalità
Da WorkManager
2.6.0-alpha02
: aggiunge il supporto per i worker che possono essere eseguiti in qualsiasi processo. (Iaf200)Da WorkManager
2.6.0-alpha02
: è stato aggiunto unRemoteCoroutineWorker
, che è un'implementazione diRemoteListenableWorker
che può associarsi a un processo remoto. (I30578)
Modifiche all'API
- Da WorkManager
2.6.0-alpha02
:è stato aggiunto il supporto per il vincolo di reteTEMPORARILY_UNMETERED
. (I08d5e) - Da WorkManager
2.6.0-alpha02
:supporto dei worker multiprocesso persetProgressAsync()
. (Ib6d08) - Da WorkManager
2.6.0-alpha02
:rendi pubblicoWorkManagerInitializer
in modo che altriandroidx.startup.Initializer
possano utilizzarli come dipendenze. (I5ab11)
Versione 2.7.0-alpha02
10 marzo 2021
androidx.work:work-*:2.7.0-alpha02
viene rilasciato. La versione 2.7.0-alpha02 contiene questi commit.
Correzioni di bug
- Rendi esplicita la mutabilità di
PendingIntent
per correggere un arresto anomalo quando scegli come target Android 12. (b/180884673)
Versione 2.7.0-alpha01
18 febbraio 2021
androidx.work:work-*:2.7.0-alpha01
viene rilasciato. La versione 2.7.0-alpha01 contiene questi commit.
Nuove funzionalità
WorkManager introduce una nuova API
WorkRequest.Builder.setExpedited(...)
per tenere conto delle limitazioni dei servizi in primo piano in Android 12.Le applicazioni non possono più avviare un servizio in primo piano quando sono in background. Pertanto, per supportare meglio i lavori a lungo termine che in precedenza erano legati al ciclo di vita di un servizio in primo piano, le applicazioni possono contrassegnare i
WorkRequest
come espressi.Questa API sostituisce le API
setForegroundAsync(...)
/setForeground(...)
, che ora sono ritirate.Quando utilizzi
setExpedited(...)
, WorkManager delega i job accelerati inJobScheduler
a partire da Android 12, garantendo al contempo la compatibilità con le versioni precedenti di Android tramite la delega ai servizi in primo piano.
Modifiche all'API
- Aggiungi il supporto per
WorkRequest
accelerati.
Versione 2.6.0
Versione 2.6.0
1° settembre 2021
androidx.work:work-*:2.6.0
viene rilasciato. La versione 2.6.0 contiene questi commit.
Modifiche importanti dalla versione 2.5.0
Ora WorkManager utilizza
androidx.startup
per inizializzarsi. Se in passato hai utilizzatotools:node="remove"
, ilContentProvider
utilizzato per inizializzare WorkManager, devi eseguire la procedura riportata di seguito.<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.work.WorkManagerInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
<!-- If you want to disable android.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove" />
È stato aggiunto il supporto per i worker che possono essere eseguiti in qualsiasi processo. (Iaf200)
È stato aggiunto un
RemoteCoroutineWorker
, che è un'implementazione di RemoteListenableWorker che può associarsi a un processo remoto. (I30578)
Versione 2.6.0-rc01
4 agosto 2021
Viene rilasciato androidx.work:work-*:2.6.0-rc01
. La versione 2.6.0-rc01 contiene questi commit.
Questa versione è identica a androidx.work:work-*:2.6.0-beta02
.
Versione 2.6.0-beta02
21 luglio 2021
Viene rilasciato androidx.work:work-*:2.6.0-beta02
. La versione 2.6.0-beta02 contiene questi commit.
Correzioni di bug
- Ora
RemoteWorkManager
si scollega correttamente daRemoteWorkManagerService
, il che consente aRemoteWorkManagerService
di eseguire correttamente la pulizia. aosp/1730694 RemoteListenableWorker
ora si scollega correttamente daRemoteWorkerService
, il che consente aRemoteWorkerService
di eseguire la pulizia correttamente. aosp/1743817ForceStopRunnable
ora viene eseguito solo nel processo dell'app principale. Questa è un'ottimizzazione ed evita i conflitti delle risorse per le app che utilizzano più processi. aosp/1749180, aosp/1761729
Versione 2.6.0-beta01
2 giugno 2021
androidx.work:work-*:2.6.0-beta01
viene rilasciato. La versione 2.6.0-beta01 contiene questi commit.
Questa release contiene alcuni piccoli miglioramenti alla documentazione. La release è in gran parte identica a 2.6.0-alpha02.
Versione 2.6.0-alpha02
21 aprile 2021
androidx.work:work-*:2.6.0-alpha02
viene rilasciato. La versione 2.6.0-alpha02 contiene questi commit.
Nuove funzionalità
Aggiunge il supporto per i worker che possono essere eseguiti in qualsiasi processo. (Iaf200)
È stata aggiunta un'istruzione
RemoteCoroutineWorker
, che è un'implementazione diRemoteListenableWorker
in grado di associarsi a un processo remoto. (I30578)
Modifiche all'API
- È stato aggiunto il supporto per il vincolo di rete
TEMPORARILY_UNMETERED
. (I08d5e) - Supporto di worker multiprocesso per
setProgressAsync()
. (Ib6d08) - Rendi pubblico
WorkManagerInitializer
in modo che altriandroidx.startup.Initializer
possano utilizzarlo come dipendenze. (I5ab11).
Versione 2.6.0-alpha01
24 marzo 2021
androidx.work:work-*:2.6.0-alpha01
viene rilasciato. La versione 2.6.0-alpha01 contiene questi commit.
Nuove funzionalità
WorkManager
ora utilizzaandroidx.startup
per inizializzare WorkManager. In precedenza, questa operazione veniva eseguita daandroidx.work.impl.WorkManagerInitializer
. (aosp/1608813)Se in passato hai utilizzato
tools:node="remove"
, loContentProvider
utilizzato per inizializzare il ciclo di vita del processo, devi procedere come segue.<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.work.impl.WorkManagerInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
(oppure)
<!-- If you want to disable android.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
Modifiche alle API
- Aggiungi un'API
Result.getOutputData()
che restituisce iloutputData
di ListenableWorker. (Ie51e3)
Correzioni di bug
- Aggiungi una soluzione alternativa per un bug OEM che causa la generazione di un
SecurityException
quando si utilizzano le APIAlarmManager
. (aosp/1587518)
Versione 2.5.0
Versione 2.5.0
27 gennaio 2021
androidx.work:work-*:2.5.0
viene rilasciato. La versione 2.5.0 contiene questi commit.
Modifiche principali dalla versione 2.4.0
- Un nuovo artefatto
:work:work-multiprocess
per le app che utilizzano più processi. Questo introduce un miglioramento delle prestazioni unificando la pianificazione delle richieste di lavoro in un singolo processo.- Per utilizzare
work-multiprocess
, definisci una dipendenza da:implementation "androidx.work:work-multiprocess:2.5.0"
- Designa un processo principale utilizzando Configuration.Builder.setDefaultProcessName(String).
- Quando utilizzi
work-multiprocess
, devi utilizzare anche RemoteWorkManager per gestire i tuoiWorkRequest
. RemoteWorkManager contatta sempre il processo designato. Anche lo scheduler in-process viene eseguito nel processo designato.
- Per utilizzare
- A volte,
ActivityManager
non può creare un'istanza dell'istanzaJobService
per avviare un job. Ciò causa l'eliminazione silenziosa del job sottostante a causa di un bug della piattaforma.WorkManager
ora garantisce che esistano job di supporto per ogni singoloWorkRequest
quando viene inizializzato unApplication
tramite i job di riconciliazione. Ciò migliora notevolmente l'affidabilità dell'esecuzione dei job. (b/172475041, aosp/1489577) WorkManager
limita la crescita del database riducendo la durata del buffer in cui iWorkRequest
vengono monitorati al termine di unWorkRequest
. La durata era di7
giorni prima. È stato ridotto a1
giorni + la durata di keepResultsForAtLeast. (aosp/1419708)TestListenableWorkerBuilder
ora supporta la classe reificata che estendeListenableWorker
per semplificare i test. (aosp/1443299, b/169787349)- L'strumento di ispezione WorkManager è ora disponibile quando utilizzi Android Studio Arctic Fox.
Versione 2.5.0-rc01
13 gennaio 2021
androidx.work:work-*:2.5.0-rc01
viene rilasciato. La versione 2.5.0-rc01 contiene questi commit.
Correzioni di bug
- È stato corretto un bug per cui
getWorkInfosLiveData
non veniva invalidato correttamente dopo l'aggiornamento delle entità durante l'utilizzo dell'API basata suWorkQuery
. (aosp/1540566, b/173769028) - È stato corretto un bug per cui le transazioni del database non venivano contrassegnate come riuscite in alcuni rari casi. Ciò causa problemi su alcuni dispositivi Motorola. (aosp/1535368, b/175944460)
- È stato corretto un bug che ignorava i
NoSuchElementException
durante il tentativo di annullare l'associazione da un processo non attivo. (aosp/1530589). - Migliora
ConstraintTrackingWorker
in modo da arrestare unListenableWorker
solo se non è già stato arrestato. (aosp/1496844, b/172946965) - Aggiorna le librerie androidx.work per scegliere come target Java 8 (Ibd2f2)
Versione 2.5.0-beta02
2 dicembre 2020
androidx.work:work-*:2.5.0-beta02
viene rilasciato. La versione 2.5.0-beta02 contiene questi commit.
Correzioni di bug
- È stato corretto un bug in
androidx.work:work-multiprocess
in cui WorkManager bloccava inavvertitamente il thread chiamante durante il tentativo di eseguire il binding al processo designato. (aosp/1475538) - È stato corretto un bug per cui i
PeriodicWorkRequest
non venivano riconciliati correttamente. (b/172475041, aosp/1489577) - È stata aggiunta una soluzione alternativa per un bug della piattaforma durante l'interruzione del servizio in primo piano quando si utilizzano le API
setForeground*
. (b/170924044, aosp/1489901)
Versione 2.5.0-beta01
28 ottobre 2020
Viene rilasciato androidx.work:work-*:2.5.0-beta01
. La versione 2.5.0-beta01 contiene questi commit.
Nuove funzionalità
WorkManager
riduce automaticamente il numero diWorkRequest
che possono essere rilevati dal programmatore in-process. Le richieste vengono comunque eseguite nell'ordine FIFO. (aosp/1455228)WorkManager
tenta di eseguire il ripristino quando il datastore dell'applicazione è in uno stato non valido. (aosp/1463103)
Correzioni di bug
- Quando le
ListenableWorker
vengono interrotte, contrassegnale immediatamente comeENQUEUED
in modo che possano essere riprogrammate in un secondo momento. (aosp/1455618, b/170273988)
Versione 2.5.0-alpha03
14 ottobre 2020
androidx.work:work-*:2.5.0-alpha03
viene rilasciato. La versione 2.5.0-alpha03 contiene questi commit.
Modifiche all'API
TestListenableWorkerBuilder
eTestWorkerBuilder
non utilizzano tipi non elaborati. (I883ad, b/169787349)
Correzioni di bug
- Utilizza
ApplicationInfo
per determinare il nome del processo dell'app predefinito. (b/168716641, aosp/1429950) - Correggi le regole di visibilità per
RemoteWorkManager
eRemoteWorkContinuation
. Queste API non sono più contrassegnate come@Restricted
. (aosp/1432091) - Correggi le regole di ProGuard per
:work:work-multiprocess
. (aosp/1432091) - Migliora i cicli di vita delle notifiche per i processi di lunga durata associati a un servizio in primo piano. (b/168502234, aosp/1431331)
Versione 2.5.0-alpha02
16 settembre 2020
androidx.work:work-*:2.5.0-alpha02
viene rilasciato. La versione 2.5.0-alpha02 contiene questi commit.
Nuove funzionalità
- Aggiungi un'API a WorkQuery per poter utilizzare i
id
per eseguire query suiWorkInfo
. (aosp/1412372, b/157335295) - WorkManager supporta meglio le app che utilizzano più processi con un nuovo elemento (
androidx.work:work-multiprocess:*
). Questo nuovo elemento consente di risolvere alcuni problemi riscontrati dalle app di grandi dimensioni, tra cui:- In genere, WorkManager deve essere inizializzato in ogni processo dell'app. Questo non è un buon risultato perché aumenta la contesa SQLite, che a sua volta causa altri problemi. WorkManager ora dispone di nuove API che possono essere utilizzate per designare un processo dell'app principale utilizzando
Configuration#setDefaultProcessName(processName)
.processName
è un nome di processo completo che ha il seguente aspetto:packageName:processName
(ad es.com.example:remote
). - Un insieme di nuove API:
RemoteWorkManager
eRemoteWorkContinuation
per le richieste di lavoroenqueue
,cancel
equery
. Queste API non includono le variantiLiveData
per evitare conflitti SQLite tra più processi. Tutte le chiamate aenqueue
,cancel
equery
vengono inoltrate a un processo dell'appprimary
utilizzando AIDL e restituiscono unListenableFuture
fluido. (aosp/1392657, aosp/1411210, aosp/1412215, aosp/1417713)
- In genere, WorkManager deve essere inizializzato in ogni processo dell'app. Questo non è un buon risultato perché aumenta la contesa SQLite, che a sua volta causa altri problemi. WorkManager ora dispone di nuove API che possono essere utilizzate per designare un processo dell'app principale utilizzando
Modifiche all'API
- WorkManager ora elimina in modo più aggressivo i
WorkRequest
completati che non hanno dipendenze incomplete. La durata del buffer è passata da7
giorni a1
giorni. (aosp/1419708)
Correzioni di bug
- WorkManager ora riconcilia i job in modo proattivo, in modo che i job
WorkRequest
eJobScheduler
siano sincronizzati all'inizializzazione diWorkManager
. (aosp/1412794, b/166292069)
Versione 2.5.0-alpha01
19 agosto 2020
androidx.work:work-*:2.5.0-alpha01
viene rilasciato. La versione 2.5.0-alpha01 contiene questi commit.
Nuove funzionalità
- Modifiche alle API interne che ci consentono di fornire in futuro strumenti migliori con
WorkManager
. Continua a seguirci per altri aggiornamenti.
Correzioni di bug
- Gestire i
SecurityException
durante il monitoraggio dello stato della rete su alcuni dispositivi. (aosp/1396969)
Contributo esterno
- Correzione della documentazione per
ArrayCreatingInputMerger
da parte di Zac Sweers (github/43).
Versione 2.4.0
Versione 2.4.0
22 luglio 2020
Viene rilasciato androidx.work:work-*:2.4.0
. La versione 2.4.0 contiene questi commit.
Modifiche principali dalla versione 2.3.0
- Ora lo scheduler in-process di
WorkManager
è più potente. In precedenza,Scheduler
in fase di elaborazione prendeva in considerazione solo l'esecuzione di attività che non erano in ritardo e i cui vincoli erano soddisfatti. Ora lo scheduler in-process tiene traccia deiWorkRequest
che potrebbero essere eseguiti in futuro, incluse le PeriodicWorkRequests. Inoltre, ilScheduler
in-process non rispetta i limiti di pianificazione (ma è comunque limitato alle dimensioni delExecutor
utilizzato da WorkManager). Ciò significa che ora l'applicazione può eseguire molte più richieste di lavoro quando è in primo piano. Per gestire l'esecuzione del lavoro ritardato in primo piano,WorkManager
introduce anche una nuovaRunnableScheduler
configurabile. (aosp/1185778) - WorkManager ora supporta RxJava 3. Per utilizzare RxJava 3, devi includere la seguente dipendenza:
implementation "androidx.work:work-rxjava3:2.4.0"
. (aosp/1277904) - È stata aggiunta la possibilità di eseguire query sui
WorkInfo
utilizzando unWorkQuery
. Questa operazione è utile quando gli sviluppatori vogliono eseguire query suiWorkInfo
in base a una combinazione di più attributi. Per ulteriori informazioni, consulta le pagineWorkQuery.Builder.fromStates(...)
,WorkQuery.Builder. fromTags(...)
oWorkQuery.Builder.fromUniqueWorkNames(...)
. (aosp/1253230, b/143847546) Aggiungi la possibilità di richiedere informazioni di diagnostica da
WorkManager
utilizzando:adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
Fornisce molte informazioni utili, tra cui:
- Richieste di lavoro completate nelle ultime 24 ore.
- WorkRequest attualmente in esecuzione.
- richieste di lavoro pianificate. (aosp/1235501)
Aggiungi
ExistingWorkPolicy.APPEND_OR_REPLACE
che è simile aAPPEND
, ma sostituisce una catena che ha prerequisiti annullati o non sono stati superati. (b/134613984, aosp/1199640)Fornisci la possibilità di aggiungere un
RunnableScheduler
personalizzato per monitorare le richieste di lavoro da eseguire in futuro. Viene utilizzato dal programma in esecuzione. (aosp/1203944)È stato aggiunto il supporto per l'aggiunta dinamica di fabbriche a cui delegare, quando si utilizza un
DelegatingWorkerFactory
. (b/156289105, aosp/1309745)Allinea il monitoraggio dei vincoli
BATTERY_NOT_LOW
alla piattaforma. (aosp/1312583)Il programma di pianificazione in-process ora utilizza API migliori per determinare il nome del processo. Questo è utile per supportare meglio le app che utilizzano più processi. (aosp/1324732)
Nuove regole Lint che applicano:
- Utilizzo del
foregroundServiceType
corretto quando si utilizzano le APIsetForegroundAsync()
. (b/147873061, aosp/1215915) - Specifica gli ID JobScheduler che WorkManager deve utilizzare quando utilizzi direttamente le API JobService. aosp/1223567
- È stata aggiunta una nuova regola lint che garantisce che le
ListenableWorker
implementazioni siano orapublic
quando si utilizza l'impostazione predefinitaWorkerFactory
. (aosp/1291262)
- Utilizzo del
Le chiamate a
setForegroundAsync()
che non vengono completate prima del completamento di unListenableWorker
verranno ora segnalate tramite unIllegalStateException
sulListenableFuture
restituito. (aosp/1262743)È stato corretto un bug per cui il
ForegroundService
non viene interrotto dopo l'interruzione di unWorker
in primo piano. (b/155579898, aosp/1302153)Correzione di un bug in cui
WorkManager
tenta di eseguire più istanze di unWorker
associato a un servizio in primo piano (b/156310133, aosp/1309853)
Versione 2.4.0-rc01
24 giugno 2020
androidx.work:work-*:2.4.0-rc01
viene rilasciato. La versione 2.4.0-rc01 contiene questi commit.
Correzioni di bug
- Il programma di pianificazione in-process ora utilizza API migliori per determinare il nome del processo. Ciò è utile per un supporto migliore delle app che utilizzano più processi. (aosp/1324732)
Versione 2.4.0-beta01
20 maggio 2020
androidx.work:work-gcm:2.4.0-beta01
, androidx.work:work-runtime:2.4.0-beta01
, androidx.work:work-runtime-ktx:2.4.0-beta01
, androidx.work:work-rxjava2:2.4.0-beta01
e androidx.work:work-testing:2.4.0-beta01
vengono rilasciati. La versione 2.4.0-beta01 contiene questi commit.
Correzioni di bug
- È stato corretto un bug per cui il
ForegroundService
non viene interrotto dopo l'interruzione di unWorker
in primo piano. (b/155579898, aosp/1302153) - Correzione di un bug per cui
WorkManager
tenta di eseguire più istanze di un elementoWorker
associato a un servizio in primo piano (b/156310133, aosp/1309853) - È stato aggiunto il supporto per l'aggiunta dinamica di fabbriche a cui delegare, quando si utilizza un
DelegatingWorkerFactory
. (b/156289105, aosp/1309745) - Allinea il monitoraggio dei vincoli
BATTERY_NOT_LOW
alla piattaforma. (aosp/1312583)
Versione 2.4.0-alpha03
29 aprile 2020
androidx.work:work-*:2.4.0-alpha03
viene rilasciato. La versione 2.4.0-alpha03 contiene questi commit.
Nuove funzionalità
- WorkManager ora supporta RxJava 3. Per utilizzare RxJava 3, devi includere la seguente dipendenza:
implementation "androidx.work:work-rxjava3:2.4.0-alpha03"
. (aosp/1277904) - È stata aggiunta una nuova regola lint che garantisce che le implementazioni di
ListenableWorker
siano orapublic
quando si utilizzaWorkerFactory
predefinito. (aosp/1291262)
Modifiche all'API
- La chiamata a
setProgressAsync()
al termine dell'esecuzione di unListenableWorker
ora segnalerà unException
tramiteListenableFuture
. (aosp/1285494) WorkQuery.Builder
è ora contrassegnato comefinal
. (aosp/1275037)- I metodi di fabbrica
WorkQuery.Builder
withStates
,withTags
ewithUniqueWorkNames
sono stati rinominati rispettivamente infromStates
,fromTags
efromUniqueWorkNames
. (aosp/1280287)
Correzioni di bug
- Ignora i valori
SecurityException
quando monitori lo stato della rete di un dispositivo. (b/153246136, aosp/1280813)
Versione 2.4.0-alpha02
1° aprile 2020
androidx.work:work-*:2.4.0-alpha02
viene rilasciato. La versione 2.4.0-alpha02 contiene questi commit.
Nuove funzionalità
- È stata aggiunta una nuova regola Lint che avvisa quando
WorkRequest
richiede siaConstraints.setRequiresCharging(...)
cheConstraints.setRequiresDeviceIdle(...)
. Alcuni dispositivi non sono mai in carica e inattivi contemporaneamente. Di conseguenza, queste richieste vengono eseguite meno frequentemente del previsto. (aosp/1253840)
Modifiche alle API
È stata aggiunta la possibilità di eseguire query sui
WorkInfo
utilizzando unWorkQuery
. Questo è utile quando gli sviluppatori vogliono eseguire query suiWorkInfo
utilizzando una combinazione di più attributi. Per ulteriori informazioni, consultaWorkQuery.Builder withStates(...)
,WorkQuery.Builder withTags(...)
oWorkQuery.Builder withUniqueWorkNames(...)
. (aosp/1253230, b/143847546)Le chiamate a
setForegroundAsync()
che non vengono completate prima del completamento di unListenableWorker
verranno ora segnalate tramite unIllegalStateException
sulListenableFuture
restituito. (aosp/1262743)
Correzioni di bug
- È stata corretta la regola lint che verifica durate degli intervalli non valide per
PeriodicWorkRequest
s. (aosp/1254846, b/152606442)
Versione 2.4.0-alpha01
4 marzo 2020
Viene rilasciato androidx.work:work-*:2.4.0-alpha01
. La versione 2.4.0-alpha01 contiene questi commit.
Nuove funzionalità
Lo scheduler in-process di
WorkManager
è ora più efficiente. In precedenza, lo scheduler in-process prendeva in considerazione solo l'esecuzione di attività non in ritardo e i cui vincoli erano soddisfatti. Ora, il programmatore in-process monitora leWorkRequest
che potrebbero essere eseguite in futuro, incluse lePeriodicWorkRequest
. Inoltre, lo scheduler in-process non rispetta i limiti di pianificazione (ma è comunque limitato alle dimensioni delExecutor
utilizzato da WorkManager). Ciò significa che ora l'applicazione può eseguire molti piùWorkRequest
quando è in primo piano. (aosp/1185778)È stata aggiunta la possibilità di richiedere informazioni di diagnostica da WorkManager utilizzando
adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
. Fornisce molte informazioni utili, tra cui:- Richieste di lavoro completate nelle ultime 24 ore.
- WorkRequest attualmente in esecuzione.
- WorkRequest pianificate. (aosp/1235501)
Nuove regole Lint che applicano:
- Utilizzo del
foregroundServiceType
corretto quando si utilizzano le APIsetForegroundAsync()
. (b/147873061, aosp/1215915) - Specifica gli ID
JobScheduler
cheWorkManager
deve utilizzare quando utilizza direttamente le APIJobService
. (aosp/1223567)
- Utilizzo del
Modifiche all'API
Aggiungi
ExistingWorkPolicy.APPEND_OR_REPLACE
, che è simile aAPPEND
, ma sostituisce una catena con prerequisiti annullati o non superati. (b/134613984, aosp/1199640)Fornire la possibilità di aggiungere un
RunnableScheduler
personalizzato per monitorare iWorkRequest
da eseguire in futuro. Viene utilizzato dallo scheduler in-process. (aosp/1203944)
Correzioni di bug
setProgress()
deprecato inRxWorker
perché in precedenza restituiva unSingle<Void>
che è un tipo impossibile. È stata aggiunta una nuova APIsetCompletableProgress()
che restituisce unCompletable
e nuove regole Lint che aiutano a eseguire la migrazione alle nuove API. (b/150080946, aosp/1242665)
Versione 2.3.4
Versione 2.3.4
18 marzo 2020
androidx.work:work-*:2.3.4
viene rilasciato. La versione 2.3.4 contiene questi commit.
Correzioni di bug
- È stato corretto un bug che causava l'esecuzione di più istanze di un
Worker
a tempo di esecuzione lungo dopo aver superato la finestra di esecuzione di 10 minuti. (aosp/1247484, b/150553353) - Correzione del lint
IssueRegistry
di WorkManager. Grazie a @ZacSweers di Slack per il contributo. (aosp/1217923)
Versione 2.3.3
Versione 2.3.3
4 marzo 2020
Viene rilasciato androidx.work:work-*:2.3.3
. La versione 2.3.3 contiene questi commit.
Correzioni di bug
- È stato corretto un bug per cui, se un
Worker
veniva interrotto, non veniva riprogrammato correttamente. (b/150325687, aosp/1246571)
Versione 2.3.2
Versione 2.3.2
19 febbraio 2020
androidx.work:work-*:2.3.2
sono state rilasciate. La versione 2.3.2 contiene questi commit.
Correzioni di bug
- Corregge un problema per cui WorkManager supera il limite di 100 job in JobScheduler in rari casi. (aosp/1226859, b/149092520)
- Correzione di una condizione di gara in ConstraintControllers. (aosp/1220100)
- È stato migliorato il ciclo di vita del servizio in primo piano per i worker a lungo termine. (aosp/1226295)
- È stata migliorata la gestione dell'annullamento delle notifiche per i job di lunga durata al momento dell'annullamento del job. (aosp/1228346)
Versione 2.3.1
Versione 2.3.1
5 febbraio 2020
androidx.work:work-*:2.3.1
viene rilasciato. La versione 2.3.1 contiene questi commit.
Correzioni di bug
- Gestire meglio il ciclo di vita dei
Notification
per iWorker
di lunga durata che vengono eseguiti quando è attivo unService
in primo piano. (aosp/1218539, b/147249312) WorkManager
ora dipende daandroidx.sqlite:sqlite-framework:2.1.0
stabile. (aosp/1217729)- Sono state aggiunte regole di lint per garantire che un
foregroundServiceType
sia specificato nelAndroidManifest.xml
quando si utilizzanoforegroundServiceType
inForegroundInfo
. (aosp/1214207, b/147873061)
Versione 2.3.0
Versione 2.3.0
22 gennaio 2020
androidx.work:work-*:2.3.0
viene rilasciato senza modifiche dal giorno 2.3.0-rc01
. La versione 2.3.0 contiene questi commit.
Modifiche importanti dalla versione 2.2.0
- Supporto per attività importanti o che richiedono molto tempo tramite
ListenableWorker#setForegroundAsync()
. - Supporto per l'avanzamento dei worker tramite
ListenableWorker#setProgressAsync()
. - WorkManager ora include nella libreria regole di lint aggiuntive che consentono di rilevare i bug in anticipo.
Versione 2.3.0-rc01
8 gennaio 2020
Viene rilasciato androidx.work:work-*:2.3.0-rc01
. La versione 2.3.0-rc01 contiene questi commit.
Questa release è identica a 2.3.0-beta02
Correzioni di bug
- L'elemento
work-testing
ora definisce una dipendenzaapi
dawork-runtime-ktx
. (aosp/1194410)
Versione 2.3.0-beta02
18 dicembre 2019
androidx.work:work-*:2.3.0-beta02
viene rilasciato. La versione 2.3.0-beta02 contiene questi commit.
Nuove funzionalità
- È stato aggiunto un messaggio di errore migliore per le eccezioni SQLite non recuperabili. (aosp/1185777)
- È stata aggiunta una regola di lint che garantisce che il fornitore di contenuti
androidx.work.impl.WorkManagerInitializer
venga rimosso dalAndroidManifest.xml
quando si utilizza l'inizializzazione on demand. (aosp/1167007) - È stato aggiunto un avviso lint quando viene utilizzato
enqueue()
per unPeriodicWorkRequest
anzichéenqueueUniquePeriodicWork()
. (aosp/1166032)
Modifiche all'API
ForegroundInfo
ora richiede di specificare ilnotificationId
da utilizzare quando si utilizzaListenableWorker.setForegroundAsync()
. Si tratta di una modifica che provoca un errore. In questo modo puoi eseguire piùWorker
a lungo termine in parallelo.WorkManager
gestisce inoltre meglio la durata deiNotification
forniti. (b/145473554, aosp/1181208, asop/1181216, asop/1183577)
Correzioni di bug
- È stato corretto un bug nell'implementazione di HuntManager per cui gli allarmi non venivano sistemati correttamente. (aosp/1156444)
- È stato corretto un bug per cui un elenco vuoto di
WorkRequest
causava la creazione di una catenaWorkContinuation
errata. (b/142835274, aosp/1157051)
Modifiche alle dipendenze
- WorkManager ora utilizza la Stanza 2.2.2.
Versione 2.3.0-beta01
20 novembre 2019
androidx.work:work-*:2.3.0-beta01
viene rilasciato. La versione 2.3.0-beta01 contiene questi commit.
Nuove funzionalità
- È stata aggiunta una nuova regola lint che impedisce gli errori dello sviluppatore dovuti a un'implementazione non corretta di
androidx.work.Configuration.Provider
durante l'utilizzo dell'inizializzazione on demand. aosp/1164559
Versione 2.3.0-alpha03
23 ottobre 2019
androidx.work:work-*:2.3.0-alpha03
viene rilasciato. La versione 2.3.0-alpha03 contiene questi commit.
Nuove funzionalità
- È stata aggiunta l'API
WorkManager.createCancelPendingIntent()
che consente di annullare facilmente iWorkRequest
senza dover registrare un altro componente inAndroidManifest.xml
. Questa API semplifica in modo particolare l'annullamento deiWorkRequest
daNotification
. Prevediamo che questa funzionalità verrà accoppiata alle nuove API in primo piano nella versione 2.3.0. - Ora WorkManager dipende dalla versione stabile
androidx.room:*:2.2.0
.
Modifiche alle API
- Il nome
ForegroundInfo.getNotificationType()
è stato rinominato inForegroundInfo.getForegroundServiceType()
per maggiore coerenza con le API di piattaforma sottostanti. (b/142729893, aosp/1143316)
Correzioni di bug
- È stato corretto un bug causato da una chiamata non necessaria a
setTransactionSuccessful()
al di fuori di una transazione. Questo accade in caso di migrazioni rare. (b/142580433, aosp/1141737)
Versione 2.3.0-alpha02
9 ottobre 2019
Viene rilasciato androidx.work:work-*:2.3.0-alpha02
. La versione 2.3.0-alpha02 contiene questi commit.
Nuove funzionalità
- WorkManager ora supporta l'esecuzione di attività importanti o che richiedono molto tempo che devono essere mantenute attive dal sistema operativo. Per ulteriori informazioni, consulta
ListenableWorker#setForegroundAsync()
(oCoroutineWorker#setForeground()
per Kotlin). (aosp/1133636)
Modifiche all'API
- L'API
containsKey
inData
viene rinominata inhasKeyWithValueOfType
. Anche il metodo di estensione corrispondente nella libreriaktx
è stato rinominato. (b/141916545)
Correzioni di bug
- Le pianificazioni di WorkManager funzionano in modo adeguato quando il numero di
WorkRequest
in coda si avvicina ai limiti di pianificazione. (aosp/1105766) - WorkManager chiama
ListenableWorker#onStopped()
solo se il lavoro non è già stato completato. (b/140055777) - WorkManager ora rimuove le informazioni sull'avanzamento quando un worker viene interrotto o raggiunge il suo stato terminale. (aosp/1114572)
Data
ora ha una rappresentazionetoString()
molto più utile. (b/140945323)Data
ora ha un metodoequals()
migliore. Supporta anchedeepEquals
per i tipiArray
. (b/140922528)- Ora WorkManager archivia il database interno e i file delle preferenze in una directory senza backup. (b/114808216)
Versione 2.3.0-alpha01
22 agosto 2019
androidx.work:work-*:2.3.September 5, 20190-alpha01
viene rilasciato. I commit inclusi in questa versione sono disponibili qui.
Nuove funzionalità
- Ora i
ListenableWorker
possono impostare l'avanzamento tramite l'APIsetProgressAsync()
. È stata aggiunta anche un'APIsetProgress
corrispondente per le operazionisuspend
inCoroutineWorker
e unsetProgress
inRxWorker
che restituisce unSingle<Void>
. Con queste nuove API, i lavoratori possono trasmettere informazioni sui progressi tramiteWorkInfo
, che ha un'APIgetProgress
corrispondente. (b/79481554) Data
ha un'APIcontainsKey()
che può essere utilizzata per convalidare che i dati di input diWorker
abbiano chiavi con il tipo previsto. (b/117136838)- Ora
Data
può essere serializzato utilizzandoData.toByteArray()
eData.fromByteArray()
. Tieni presente che non ci sono garanzie di versionamento conData
, quindi non devi mantenerlo o utilizzarlo per l'IPC tra le applicazioni. Possono essere utilizzati in sicurezza solo tra più processi della stessa applicazione. - È stata aggiunta la possibilità di specificare un
InputMergerFactory
tramiteConfiguration.setInputMergerFactory
. (b/133273159)
Modifiche all'API
- WorkManager genera un'istanza di
IllegalStateException
se unWorkerFactory
restituisce un'istanza diListenableWorker
che è stata invocata in precedenza. (b/139554406) - Aggiornamenti della documentazione relativi all'annullamento di
ListenableFuture
e al callbackonStopped()
inListenableWorker
. (b/138413671)
Correzioni di bug
- Lo scheduler in-process ora ignora i
WorkRequest
con la limitazioneidle
. Ora queste richieste vengono rilevate daJobScheduler
solo quando il dispositivo è effettivamenteidle
. (aosp/1089779) TestScheduler
ora utilizza correttamenteExecutor
specificato per l'eseguitore di attività interno nei test. (aosp/1090749)
Versione 2.2.0
Versione 2.2.0
15 agosto 2019
androidx.work:work-*:2.2.0
viene rilasciato. I commit inclusi in questa versione sono disponibili qui.
Questa release è identica a androidx.work:work-*:2.2.0-rc01
.
Modifiche importanti nella versione 2.2.0 rispetto alla versione 2.1.0
androidx.work:work-gcm:2.2.0
è un nuovo artefatto Maven che supporta l'utilizzo di GCMNetworkManager come programmatore quando Google Play Services è disponibile per i livelli API <= 22. Si tratta di una dipendenza facoltativa che consente un'elaborazione in background più affidabile e performante nelle versioni precedenti dell'API. Se la tua app utilizza Google Play Services, aggiungi questa dipendenza al file gradle per ottenere automaticamente il supporto di GCMNetworkManager. Se Play Services non è disponibile, WorkManager continuerà a utilizzare AlarmManager sui dispositivi meno recenti.
Versione 2.2.0-rc01
30 luglio 2019
androidx.work:work-*:2.2.0-rc01
viene rilasciato. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
- È stato corretto un bug nell'implementazione di allarme che causava l'arresto prematuro del servizio e che, in rari casi, generava un valore
RejectedExecutionException
. (aosp/1092374) (b/138238197). - È stata aggiunta una soluzione alternativa per un problema
NullPointerException
quando si utilizzano le APIJobScheduler
su alcuni dispositivi. (aosp/1091020) (b/138364061), (b/138441699)
Versione 2.2.0-beta02
19 luglio 2019
androidx.work:work-*:2.2.0-beta02
viene rilasciato. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
- È stata rimossa la dipendenza da jacoco involontaria, introdotta in
2.2.0-beta01
.
Versione 2.2.0-beta01
17 luglio 2019
androidx.work:work-*:2.2.0-beta01
viene rilasciato. I commit inclusi in questa versione sono disponibili qui.
Nuove funzionalità
androidx.work:work-gcm:2.2.0-beta01
è un nuovo artefatto Maven che supporta l'utilizzo di GCMNetworkManager come scheduler quando Google Play Services è disponibile per i livelli API <= 22. Si tratta di una dipendenza facoltativa che consente un'elaborazione in background più affidabile e performante nelle versioni precedenti dell'API. Se la tua app utilizza Google Play Services, aggiungi questa dipendenza al file gradle per ottenere automaticamente il supporto di GCMNetworkManager. Se Play Services non è disponibile, WorkManager continuerà a utilizzare AlarmManager sui dispositivi meno recenti.
Correzioni di bug
- Correzione per
IllegalArgumentException
durante il monitoraggio dello stato della rete su tablet Nvidia Shield K1. (aosp/1010188)
Versione 2.1.0
Versione 2.1.0
11 luglio 2019
androidx.work:work-*:2.1.0
viene rilasciato. Questa release è identica a androidx.work:work-*:2.1.0-rc01
.
Modifiche importanti dalla versione 2.0.1
work-runtime-ktx
ora richiede Java 8. Se riscontri problemi, puoi aggiungere quanto segue abuild.gradle
:kotlinOptions { jvmTarget = "1.8" }
- È stata aggiunta l'inizializzazione on demand per WorkManager, che creerà WorkManager solo quando viene fatto riferimento. b/127497100 Per configurare il progetto per l'inizializzazione on demand:
- Disattiva l'inizializzazione automatica.
- Implementa
Configuration.Provider
nell'oggettoApplication
personalizzato. - Cambia tutti i riferimenti a
WorkManager.getInstance()
inWorkManager.getInstance(Context)
. Nell'ambito di questa modifica, abbiamo ritiratoWorkManager.getInstance()
. È sempre più sicuro chiamare la nuova sostituzioneWorkManager.getInstance(Context)
, anche se non esegui l'inizializzazione on demand.
- I ritardi iniziali sono ora supportati da
PeriodicWorkRequest
. Puoi utilizzare il metodosetInitialDelay
suPeriodicWorkRequest.Builder
per impostare un ritardo iniziale. b/111404867 - È stata aggiunta la possibilità di delegare a uno o più
WorkerFactory
registrati utilizzandoDelegatingWorkerFactory
. B/131435993 - È stata aggiunta la possibilità di personalizzare il
Executor
utilizzato da WorkManager per tutta la sua contabilità interna tramiteConfiguration.Builder.setTaskExecutor
. - È stata aggiunta la possibilità di creare classi
Worker
eListenableWorker
testabili con le unità utilizzandoTestWorkerBuilder
eTestListenableWorkerBuilder
nell'artefattowork-testing
.- Tieni presente che
work-testing
ora importa Kotlin come dipendenza e include diverse estensioni Kotlin per impostazione predefinita.
- Tieni presente che
- È stato aggiunto il conteggio dei tentativi di esecuzione a
WorkInfo
. b/127290461 - Ora i tipi
Data
possono archiviare e recuperare byte e array di byte. NON modifica la dimensione massima degli oggettiData
. - Ora WorkManager dipende da
Room 2.1.0
, che dovrebbe risolvere alcuni problemi relativi al database.
Versione 2.1.0-rc01
27 giugno 2019
androidx.work:work-*:2.1.0-rc01
viene rilasciato. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
- È stato risolto un bug che causava l'arresto anomalo di un'applicazione durante l'esecuzione di job con
JobScheduler
mentre era in corso un backup b/135858602.
Versione 2.1.0-beta02
20 giugno 2019
androidx.work:work-*:2.1.0-beta02
viene rilasciato. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
TestListenableWorkerBuilder
ora utilizza ilWorkerFactory
corretto quando crea istanze diListenableWorker
. b/135275844- È stato corretto un bug che causava scostamenti nelle finestre di esecuzione per i
WorkRequest
a causa dell'interruzione del processo. b/135272196
Versione 2.1.0-beta01
13 giugno 2019
Viene rilasciato androidx.work:work-*:2.1.0-beta01
. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
- Ora WorkManager dipende da
Room 2.1.0
, che dovrebbe risolvere alcuni problemi relativi al database. - È stata rimossa parte dell'I/O del disco di avvio nel thread principale.
- È stato corretto un potenziale deadlock nel monitoraggio dei vincoli. b/134361006
- Annullamento preventivo dei job non validi attribuiti a WorkManager. b/134058261
- Sono state aggiunte alcune chiamate difensive alle API JobScheduler per il comportamento anomalo dei dispositivi.
Versione 2.1.0-alpha03
5 giugno 2019
androidx.work:*:2.1.0-alpha03
viene rilasciato.
Correzioni di bug
- Documentazione migliorata per i
PeriodicWorkRequest
. - Ora
WorkManagerTestInitHelper
utilizza l'esecutore in background corretto per i test. - Correzioni dei problemi di SQLite relativi al trattamento di transazioni di grandi dimensioni su alcuni dispositivi. (b/130182503)
- Le dipendenze di WorkManager ora sono più granulari. (b/133169148).
- Sfrutta una soluzione alternativa per i bug specifici dell'OEM nell'implementazione di
JobScheduler
durante la pianificazione dei job utilizzando WorkManager. - Miglioramenti alla durata dei servizi dello scheduler basato su allarme che in precedenza causavano arresti anomali rari. (b/133313734)
Versione 2.1.0-alpha02
16 maggio 2019
Viene rilasciato WorkManager 2.1.0-alpha02. Questa versione contiene diverse nuove API.
Modifiche all'API
I ritardi iniziali sono ora supportati da
PeriodicWorkRequest
. Puoi utilizzare il metodosetInitialDelay
suPeriodicWorkRequest.Builder
per impostare un ritardo iniziale. b/111404867È stata aggiunta la possibilità di delegare a uno o più
WorkerFactory
registrati utilizzandoDelegatingWorkerFactory
. b/131435993È stata aggiunta la possibilità di personalizzare il valore
Executor
utilizzato da WorkManager per tutti i suoi dati contabili interni tramiteConfiguration.Builder.setTaskExecutor
.Documentazione migliorata su
WorkRequest.keepResultsForAtLeast
(b/130638001), initialization on-demand ePeriodicWorkRequest.Builder
(b/131711394).
Versione 2.1.0-alpha01
24 aprile 2019
È stata rilasciata la versione WorkManager 2.1.0-alpha01. Questa versione contiene diverse nuove API. Tieni presente che, a partire da questa versione, alcune nuove funzionalità non verranno riportate alla release 1.x. Ti consigliamo di passare alla versione 2.x.
Modifiche all'API
- È stata aggiunta l'inizializzazione on demand per WorkManager, che creerà WorkManager solo quando viene fatto riferimento. b/127497100 Per configurare il progetto per l'inizializzazione on demand:
- Disattiva l'inizializzazione automatica.
- Implementa
Configuration.Provider
nel tuo oggettoApplication
personalizzato. - Cambia tutti i riferimenti a
WorkManager.getInstance()
inWorkManager.getInstance(Context)
. Nell'ambito di questa modifica, abbiamo ritiratoWorkManager.getInstance()
. È sempre più sicuro chiamare la nuova sostituzioneWorkManager.getInstance(Context)
, anche se non esegui l'inizializzazione on demand.
- È stata aggiunta la possibilità di creare classi
Worker
eListenableWorker
testabili a livello di unità utilizzandoTestWorkerBuilder
eTestListenableWorkerBuilder
nell'artifactwork-testing
.- Tieni presente che
work-testing
ora importa Kotlin come dipendenza, ma include anche diverse estensioni Kotlin per impostazione predefinita.
- Tieni presente che
- È stato aggiunto il conteggio dei tentativi di esecuzione a
WorkInfo
. b/127290461 - Ora i tipi
Data
possono memorizzare e recuperare byte e array di byte. NON modifica la dimensione massima degli oggettiData
. CoroutineWorker.coroutineContext
obsoleto. Questo campo è stato erroneamente definito comeCoroutineDispatcher
. Non dovresti più averne bisogno perché puoi accedere autonomamente al coroutineContext desiderato nel corpo della funzione di sospensione.RxWorker.createWork()
eRxWorker.getBackgroundScheduler()
ora sono annotati con i tipi di ritorno@NonNull
.
Versione 2.0.1
Versione 2.0.1
9 aprile 2019
È stata rilasciata la versione 2.0.1 di WorkManager. Questa release è identica a 2.0.1-rc01.
Versione 2.0.1-rc01
3 aprile 2019
Viene rilasciato WorkManager 2.0.1-rc01. Questa versione contiene alcune correzioni di bug. Per gli utenti della versione precedente 1.x, alcune di queste modifiche sono riportate anche in 1.0.1-rc01.
Correzioni di bug
- I test Robolectric ora funzionano correttamente con WorkManager. b/122553577
- È stato corretto un arresto anomalo in un caso limite con il monitoraggio dei vincoli che non veniva ripulito nelle API pre-JobScheduler. b/129226383
- È stato risolto un problema di
StackOverflowError
che gestiva lunghe catene di lavoro. b/129091233 - La documentazione relativa ai
PeriodicWorkRequest
è stata aggiornata per indicare che il tempo flessibile non è supportato nell'API 23. - Sono stati corretti alcuni link non funzionanti nella documentazione di Kotlin.
Versione 2.0.0
Versione 2.0.0
20 marzo 2019
Viene rilasciato WorkManager 2.0.0. Questa versione è identica a 2.0.0-rc01 ed è la versione AndroidX di 1.0.0 stabile con le dipendenze AndroidX. Ti consigliamo di scegliere come target questa versione anziché le versioni 1.x precedenti. Tutto lo sviluppo attivo avrà come target le versioni 2.x e 1.x riceverà correzioni di bug critiche solo per un periodo di tempo limitato.
Versione 2.0.0-rc01
7 marzo 2019
È stata rilasciata la versione WorkManager 2.0.0-rc01. Questa versione è identica alla versione stabile 1.0.0, ma ha dipendenze AndroidX. Una volta raggiunta la versione stabile 2.0.0, dovresti includerla e le versioni precedenti 1.x riceveranno solo alcune correzioni di bug critiche. Tutte le attività di sviluppo attive avranno come target la versione 2.x.
Dipendenze precedenti ad AndroidX
Documentazione di riferimento: Java
Groovy
dependencies { def work_version = "1.0.1" // (Java only) implementation "android.arch.work:work-runtime:$work_version" // Kotlin + coroutines implementation "android.arch.work:work-runtime-ktx:$work_version" // optional - RxJava2 support implementation "android.arch.work:work-rxjava2:$work_version" // optional - Test helpers androidTestImplementation "android.arch.work:work-testing:$work_version" }
Kotlin
dependencies { val work_version = "1.0.1" // (Java only) implementation("android.arch.work:work-runtime:$work_version") // Kotlin + coroutines implementation("android.arch.work:work-runtime-ktx:$work_version") // optional - RxJava2 support implementation("android.arch.work:work-rxjava2:$work_version") // optional - Test helpers androidTestImplementation("android.arch.work:work-testing:$work_version") }
Versione 1.0.1
Versione 1.0.1
9 aprile 2019
Viene rilasciata la versione 1.0.1 di WorkManager. Questa release è identica a 1.0.1-rc01.
Tieni presente che consigliamo vivamente gli utenti a eseguire l'aggiornamento a WorkManager 2.x, dato che in futuro il ramo 1.x presenterà pochissimi aggiornamenti. Inoltre, non verranno rilasciate nuove API per la libreria 1.x.
Versione 1.0.1-rc01
2 aprile 2019
È stata rilasciata la versione WorkManager 1.0.1-rc01. Questa versione contiene alcune correzioni di bug.
Correzioni di bug
- I test Robolectric ora funzionano correttamente con WorkManager. b/122553577
- È stato corretto un arresto anomalo in un caso limite con il monitoraggio dei vincoli che non veniva ripulito nelle API pre-JobScheduler. b/129226383
- È stato corretto un problema
StackOverflowError
relativo al trattamento di lunghe catene di lavoro. b/129091233
Versione 1.0.0
Versione 1.0.0
5 marzo 2019
Questa è la release stabile 1.0.0 di WorkManager. Questa versione di WorkManager è identica alla 1.0.0-rc02.
Versione 1.0.0-rc02
21 febbraio 2019
Questa è la seconda release candidate per la release stabile 1.0.0 di WorkManager. Questa release contiene due correzioni di bug.
Correzioni di bug
Ora i
Worker
vengono pianificati correttamente dopo un arresto anomalo dell'applicazione. b/124546316Gli elementi
Worker
che generano unException
deselezionato ora sono contrassegnati correttamente comeFAILED
e non arrestano più il processo dell'app.
Versione 1.0.0-rc01
14 febbraio 2019
Si tratta di un candidato per la release stabile 1.0.0 di WorkManager. Questa release contiene una correzione di bug.
Correzioni di bug
- L'implementazione basata su AlarmManager ora rispetta correttamente le finestre
flex
per PeriodicWorkRequests. b/124274584
Versione 1.0.0-beta05
6 febbraio 2019
Questa release contiene alcune correzioni di bug.
Correzioni di bug
- È stato corretto un caso in cui veniva utilizzato
JobScheduler.getPendingJob(...)
nell'API 23. b/123893059 - È stato corretto un problema
NullPointerException
sui dispositivi con Android 5.1 (livello API 22) o versioni precedenti. b/123835104
Versione 1.0.0-beta04
4 febbraio 2019
Questa release contiene alcune correzioni di bug.
Correzioni di bug
- Programmazione migliorata di PeriodicWork per l'implementazione basata su AlarmManager.
- È stato corretto un caso in cui WorkManager non riusciva a monitorare correttamente le limitazioni quando veniva utilizzata l'implementazione basata su AlarmManager. b/123379508
- È stato corretto un caso in cui WorkManager non riusciva a riprovare a eseguire il lavoro al termine del processo quando si utilizzava l'implementazione basata su AlarmManager. b/123329850
- È stato corretto un caso che causava una perdita di wakelock da parte di WorkManager quando si utilizzava l'implementazione basata su AlarmManager.
Versione 1.0.0-beta03
25 gennaio 2019
Questa release contiene alcune correzioni di bug.
Correzioni di bug
- Abbiamo introdotto una regressione
1.0.0-beta02
che causava l'interruzione dell'esecuzione del lavoro in alcune situazioni. b/123211993 - È stato risolto un caso in cui il lavoro non rispettava correttamente i tempi di backoff. b/122881597
- È stato corretto un
ConcurrentModificationException
sui dispositivi con Android 5.1 (API o versioni precedenti). Questa è la continuazione della correzione in1.0.0-beta02
. b/121345393 - È stato aggiunto
exported=false
per alcuni componenti del manifest in cui mancava questa annotazione. - Sono state incluse informazioni su come WorkManager interagisce con il sistema operativo nella documentazione a livello di pacchetto.
Versione 1.0.0-beta02
15 gennaio 2019
Questa release contiene alcune correzioni di bug.
Correzioni di bug
- È stato corretto un caso limite in cui il lavoro periodico poteva essere eseguito più di una volta per intervallo su dispositivi con Android 6.0 (livello API 23). b/121998363
- È stato corretto un problema
ConcurrentModificationException
sui dispositivi con Android 5.1 (livello API 22) o versioni precedenti. b/121345393 - È stata corretta l'esecuzione errata del lavoro quando i vincoli non sono soddisfatti sui dispositivi con Android 5.1 (livello API 22) o versioni precedenti. b/122578012
- Gestione del completamento del lavoro ottimizzata per essere più veloce in alcuni casi limite. b/122358129
- È stata aggiunta una modifica per risolvere potenziali condizioni di gara tra più istanze di
LiveData
utilizzate da WorkManager. - È stato eseguito il passaggio all'utilizzo della dipendenza
Room
1.1.1
anziché1.1.1-rc01
. Queste versioni sono identiche. b/122578011
Versione 1.0.0-beta01
19 dicembre 2018
Questa release non contiene modifiche all'API. In futuro, WorkManager dovrebbe mantenere l'API stabile fino alla prossima versione, a meno che non ci sia un problema critico. Questa release contiene alcune correzioni di bug.
Correzioni di bug
- Le attività secondarie annullate in precedenza di un lavoro principale completato correttamente non verranno più eseguite. b/120811767
- Classi di logging inizializzate correttamente (mostrate principalmente durante i test).
Versione 1.0.0-alpha13
12 dicembre 2018
Questa release contiene una modifica di lieve entità all'API che sarà utile per alcuni utenti Kotlin.
Modifiche all'API
androidx.work.Result
è stato spostato in una classe interna diListenableWorker
. In questo modo si evitano conflitti di refactoring con la classe di primo livelloResult
di Kotlin. Si tratta di una modifica dell'API che comporta una interruzione del servizio. b/120564418
Modifiche alle API che comportano interruzione del servizio
androidx.work.Result
è stato spostato come classe interna diListenableWorker
.
Versione 1.0.0-alpha12
5 dicembre 2018
Questa release contiene alcune modifiche alle API che comportano un errore; consulta la sezione Modifiche alle API che comportano un errore di seguito. È probabile che questa versione venga rilasciata come prima versione beta. alpha12
contiene anche aggiornamenti dettagliati della documentazione.
Modifiche all'API
- Un nuovo elemento,
work-rxjava2
, introduceRxWorker
. Questo è unListenableWorker
che si aspetta unSingle<Payload>
. - Il supporto di Firebase JobDispatcher è stato rimosso a causa della sua imminente ritiro. Ciò significa che l'elemento
work-firebase
non verrà più aggiornato man mano che si avvia la versione beta. Stiamo valutando la possibilità di aggiungere un'alternativa in futuro. - Combinazione di
Payload
inResult
.Result
ora è una "classe sigillata" con tre implementazioni concrete, che puoi ottenere tramiteResult.success()
(oResult.success(Data)
),Result.failure()
(oResult.failure(Data)
) eResult.retry()
. Ora i tuoiListenableFuture
hanno come risultatoResult
anzichéPayload
.Worker
non hanno metodi getter e setter per l'outputData
. Si tratta di una modifica che provoca un errore. - Sono stati aggiunti
Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit)
eConstraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit)
e le relative varianti per supportare meglio gli URI dei contenuti con attivazione lenta. b/119919774 - Variante
WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration)
aggiunta. Questo metodo richiede l'API 26. - Sono stati aggiunti i metodi di estensione Kotlin
Operation.await()
eListenableFuture.await()
. Operation.getException()
rinominato inOperation.getThrowable()
. Si tratta di una modifica che provoca un errore.- La classe
ContentUriTriggers
e i metodi che fanno riferimento non sono più disponibili per l'utilizzo pubblico. Si tratta di una modifica che provoca un errore. - È stato rimosso il resto dei metodi varargs in
WorkManager
,WorkContinuation
eOneTimeWorkRequest
per semplificare l'API. Per risolvere eventuali problemi di build, puoi aggregare le variabili esistenti conArrays.asList(...)
. Sono comunque incluse le versioni con un solo argomento di ciascun metodo. Si tratta di una modifica che provoca un errore. WorkContinuation.combine(OneTimeWorkRequest, *)
varianti rimosse. L'API era poco chiara; i metodicombine
esistenti sono più comprensibili. Si tratta di una modifica che provoca un errore.
Correzioni di bug
- Le implementazioni precedenti a Marshmallow sono ora più affidabili nel recupero dal decesso del processo di un'attività già in esecuzione.
LiveData
osservato tramiteobserveForever
viene monitorato tramite WorkManager. Si tratta di un backport di una correzione della libreria Room. b/74477406Data.Builder.build()
ora genera un'eccezione se l'oggetto serializzato supera le dimensioni massime consentite. In precedenza, ciò accadeva solo in un thread in background in cui non era possibile gestirlo correttamente.- Distinguere ulteriormente il lavoro interrotto da quello annullato;
getWorkInfoById()
restituirà unWorkInfo
con ilCANCELLED
State
duranteListenableWorker.onStopped()
. - Tratta i
null
Result
come errori inListenableWorker
. B/120362353 - Correzione speculativa per Shield Tablet con l'API 24 che a volte generava un
IllegalArgumentException
. b/119484416
Modifiche alle API che comportano interruzione del servizio
- Il supporto di Firebase JobDispatcher è stato rimosso a causa della sua imminente ritiro. Ciò significa che l'elemento
work-firebase
non verrà più aggiornato quando passeremo alla versione beta. Cercheremo di aggiungere un'alternativa in futuro. - Combinazione di
Payload
inResult
.Result
ora è una "classe sigillata" con tre implementazioni concrete, che puoi ottenere tramiteResult.success()
(oResult.success(Data)
),Result.failure()
(oResult.failure(Data)
) eResult.retry()
. Ora i tuoiListenableFuture
hanno come risultatoResult
anzichéPayload
. Gli elementiWorker
non hanno metodi getter e setter per l'outputData
. - Aggiunti metodi di estensione Kotlin
Operation.await()
eListenableFuture.await()
. Operation.getException()
rinominato inOperation.getThrowable()
.- La classe
ContentUriTriggers
e i metodi che fanno riferimento non sono più disponibili per l'utilizzo pubblico. - È stato rimosso il resto dei metodi varargs in
WorkManager
,WorkContinuation
eOneTimeWorkRequest
per semplificare l'API. Per risolvere eventuali problemi di build, puoi aggregare le variabili esistenti conArrays.asList(...)
. Sono comunque incluse le versioni con un solo argomento di ciascun metodo. WorkContinuation.combine(OneTimeWorkRequest, *)
varianti rimosse. L'API era poco chiara; i metodicombine
esistenti sono più comprensibili.
Versione 1.0.0-alpha11
8 novembre 2018
Questa release contiene molte modifiche che diventeranno API stabili in beta
.
Questa release contiene modifiche alle API che comportano interruzioni; consulta la sezione Modifiche alle API che comportano interruzioni di seguito.
Modifiche alle API
work-runtime-ktx
introduce un nuovoCoroutineWorker
.WorkStatus
è stato rinominato inWorkInfo
. Tutte le varianti del metodogetStatus
corrispondenti sono state rinominate in variantigetWorkInfo
corrispondenti. Si tratta di una modifica che provoca un errore.ListenableWorker.onStopped()
non accetta più un argomento booleano che indica seWorkRequest
è stato annullato.WorkManager
non fa più questa distinzione. Si tratta di una modifica che provoca un errore.- Il pacchetto
androidx.work.test
è stato rinominato in pacchettoandroidx.work.testing
. Si tratta di una modifica che provoca un errore. - I setter su
Constraints
non fanno più parte dell'API pubblica. Si tratta di una modifica che provoca un errore. WorkerParameters.getTriggeredContentUris()
eWorkerParameters.getTriggeredContentAuthorities()
array restituiti in precedenza. Ora questi metodi restituiscono Collections. Si tratta di una modifica che provoca un errore.- Il nuovo nome di
ListenableWorker.onStartWork()
èListenableWorker.startWork()
. Si tratta di una modifica che provoca un errore. - Il costruttore di
WorkStatus
non fa più parte dell'API pubblica. Si tratta di una modifica che provoca un errore. - I nomi di
Configuration.getMaxJobSchedulerID()
eConfiguration.getMinJobSchedulerID()
sono stati rinominati rispettivamente inConfiguration.getMinJobSchedulerId()
eConfiguration.getMaxJobSchedulerId()
. Si tratta di una modifica che provoca un errore. - Sono state aggiunte molte annotazioni
@NonNull
all'API pubblica per migliorarne l'ergonomia. - Aggiungi l'API
WorkManager.enqueueUniqueWork()
per mettere in codaOneTimeWorkRequest
univoci senza dover creare unWorkContinuation
. - Tutte le varianti dei metodi
enqueue
ecancel
suWorkManager
ora restituiscono un nuovo tipo diOperation
. Si tratta di una modifica che provoca un errore. - Tutte le varianti di
enqueue
non accettano più parametri varargs per iWorkRequest
. Si tratta di una modifica che provoca un errore. Utilizza invece le raccolte. Puoi utilizzareArrays.asList()
per modificare il codice esistente. Lo abbiamo fatto per ridurre il numero di metodi e API. - Il tentativo di
initialize
WorkManager
più di una volta per processo ora comporterà unIllegalStateException
. Si tratta di una modifica che provoca un errore.
Correzioni di bug
- I
WorkRequest.Builder
nell'elementowork-runtime-ktx
ora utilizzano iListenableWorker
. Correzioni b/117666259 - Assicurati che la prossima ora di esecuzione di
PeriodicWork
sia nel futuro. Correzioni b/118204399 - Rimuovi il potenziale I/O del disco quando utilizzi WorkManager all'avvio dell'app. Correzioni b/117796731
- Correggi una condizione di gara in
WorkConstraintsTracker
. Correzioni android-workmanager/issues/56
Modifiche che interessano le API
WorkStatus
è stato rinominato inWorkInfo
. Tutte le varianti del metodogetStatus
corrispondenti sono state rinominate nelle variantigetWorkInfo
corrispondenti.ListenableWorker.onStopped()
non accetta più un argomento booleano che indica seWorkRequest
è stato annullato.WorkManager
non fa più questa distinzione.- Il pacchetto
androidx.work.test
è stato rinominato inandroidx.work.testing
. - I setter su
Constraints
non fanno più parte dell'API pubblica. WorkerParameters.getTriggeredContentUris()
eWorkerParameters.getTriggeredContentAuthorities()
array restituiti in precedenza. Ora questi metodi restituiscono le raccolte.- Il nuovo nome di
ListenableWorker.onStartWork()
èListenableWorker.startWork()
. - Il costruttore di
WorkStatus
non fa più parte dell'API pubblica. Configuration.getMaxJobSchedulerID()
eConfiguration.getMinJobSchedulerID()
vengono rinominati rispettivamente inConfiguration.getMinJobSchedulerId()
eConfiguration.getMaxJobSchedulerId()
.- Tutte le varianti dei metodi
enqueue
ecancel
inWorkManager
ora restituiscono un nuovo tipoOperation
. - Tutte le varianti di
enqueue
non accettano più parametri varargs per iWorkRequest
. - Il tentativo di
initialize
WorkManager
più di una volta per processo ora comporterà unIllegalStateException
.
Versione 1.0.0-alpha10
11 ottobre 2018
Questa release supporta il lavoro asincrono controllato dallo sviluppatore. Questa release contiene modifiche alle API che comportano interruzioni; consulta la sezione Modifiche alle API che comportano interruzioni di seguito.
Prevediamo che WorkManager sta entrando nelle fasi finali del suo periodo alpha. Prevediamo che l'API sarà stabile in versione beta, quindi ti invitiamo a inviare il tuo feedback nel nostro tracker dei problemi.
Modifiche alle API
- Sono stati rimossi tutti i metodi e le classi
deprecated
in precedenza, in particolare il costruttoreWorker
predefinito. Si tratta di una modifica API che provoca un errore. - Il nome di
NonBlockingWorker
è stato modificato inListenableWorker
, che ora è un corso pubblico non nascosto e pronto per l'uso.ListenableWorker
fornisce l'accesso a un metodo astratto,ListenableFuture<Payload> onStartWork()
, che viene chiamato nel thread principale. Sta a te avviare ed elaborare il lavoro in modo asincrono. Al termine, devi aggiornareListenableFuture
in modo appropriato. Le implementazioni di riferimento deiListenableFuture
sono fornite nel pacchettoFutures
inalpha02
(vedi sotto la sezioneWorkManager
).Worker
estendeListenableWorker
e funziona ancora come prima, con un metodoResult doWork()
astratto.- Ho rimescolato alcuni metodi e membri da
Worker
aListenableWorker
. - A breve forniremo implementazioni di riferimento per i
ListenableWorker
che utilizzano le coroutine Kotlin (una volta rilasciate le versioni stabili) e RxJava2.
- L'interfaccia
WorkerFactory
e l'implementazione concretaDefaultWorkerFactory
sono state unite in una classe astratta denominataWorkerFactory
. L'implementazione garantisce che il comportamento predefinito basato sulla riflessione venga chiamato come un ultimo sforzo per qualsiasi istanzaWorkerFactory
creata dall'utente. Si tratta di una modifica che provoca un errore. - Sono stati rimossi
WorkManager.synchronous()
eWorkContinuation.synchronous()
e tutti i metodi correlati. È stato aggiuntoListenableFuture<Void>
come tipo di ritorno di molti metodi dell'API. Si tratta di una modifica API che provoca un errore.- Ora puoi ottenere e osservare in modo sincrono utilizzando i
ListenableFuture
. Ad esempio,WorkManager.enqueue()
restituiscevoid
; ora restituisceListenableFuture<Void>
. Puoi chiamareListenableFuture.addListener(Runnable, Executor)
oListenableFuture.get()
per eseguire il codice al termine dell'operazione. - Tieni presente che questi
ListenableFuture
non indicano se l'operazione è riuscita o meno, ma solo che è stata completata. Dovrai comunque concatenare i metodi WorkManager per trovare queste informazioni. - Ignoriamo le chiamate
cancel()
su questi oggetti perché sono confuse e difficili da comprendere (annulli l'operazione o il lavoro risultante?). Questo è previsto dal contratto diFuture
. - Per mantenere la parità con i metodi
getStatus*
sincroni, abbiamo fornito varianti diListenableFuture
e abbiamo rinominato quelle esistenti che restituivanoLiveData
in modo che includessero esplicitamente "LiveData" nel nome (ad esempiogetStatusesByIdLiveData(UUID)
). Si tratta di una modifica dell'API che comporta una interruzione del servizio.
- Ora puoi ottenere e osservare in modo sincrono utilizzando i
Correzioni di bug
- È stato risolto il problema noto della versione alpha09 relativo ai file
androidx-annotations.pro
duplicati. Puoi rimuovere la soluzione alternativa dalle note di rilascio precedenti eliminandoexclude 'META-INF/proguard/androidx-annotations.pro'
dal file gradle. - Sono state aggiunte configurazioni ProGuard per mantenere il nuovo costruttore
Worker
. b/116296569 - Correzione di un potenziale
NullPointerException
in una condizione di gara in cui il lavoro è statoREPLACE
. b/116253486 e b/116677275 WorkContinuation.combine()
ora accetta uno o piùWorkContinuation
anziché due o più. b/117266752
Modifiche che interessano le API
- Sono stati rimossi tutti i metodi e le classi
deprecated
precedenti, in particolare il costruttoreWorker
predefinito. - L'interfaccia
WorkerFactory
e l'implementazione concretaDefaultWorkerFactory
sono state unite in una classe astratta denominataWorkerFactory
. WorkManager.synchronous()
eWorkContinuation.synchronous()
sono stati rimossi.- I metodi
WorkManager.getStatus*()
ora restituisconoListenableFuture
.WorkManager.getStatus*LiveData()
restituisceLiveData
sec.
Versione 1.0.0-alpha09
19 settembre 2018
Problema noto
Se riscontri il seguente problema: "È stato trovato più di un file con il percorso indipendente dal sistema operativo "META-INF/proguard/androidx-annotations.pro"", inserisci quanto segue nel file gradle come soluzione temporanea mentre risolviamo il problema in alpha10:
Groovy
android { packagingOptions { exclude 'META-INF/proguard/androidx-annotations.pro' } }
Kotlin
android { packagingOptions { exclude("META-INF/proguard/androidx-annotations.pro") } }
Correzioni di bug
- È stata aggiunta un'altra correzione necessaria per l'errore "100 job". b/115560696
- Sono state aggiunte alcune correzioni per gli errori di vincolo delle chiavi esterne dovuti a condizioni di gara. b/114705286
ConstraintTrackingWorker.onStopped(boolean)
delegato chiamaWorker
sottostante. b/114125093- Applica il ritardo minimo di backoff corretto per Firebase JobDispatcher. b/113304626
- Il miglioramento dei thread garantisce l'interno della libreria.
- Correggere un potenziale problema con l'eliminazione delle duplicazioni di
LiveData
internamente.
Modifiche all'API
- Ora puoi creare le tue istanze
Worker
in fase di esecuzione specificando unWorkerFactory
all'interno delWorkManager.Configuration
. Il valore di fabbrica di riserva èDefaultWorkerFactory
, che corrisponde al comportamento delle versioni precedenti di WorkManager.- I costruttori predefiniti per
Worker
eNonBlockingWorker
sono ora contrassegnati come deprecati. Utilizza il nuovo costruttore (Worker(Context, WorkerParameters)
) e chiamasuper(Context, WorkerParameters)
; le versioni future di WorkManager rimuoveranno il costruttore predefinito.
- I costruttori predefiniti per
- Abbiamo iniziato a utilizzare internamente il nuovo artefatto
ListenableFuture
(senza dipendenze da Guava). Nelle release future introdurremo ListenableFutures nell'API. Questa modifica supporterà l'eventuale annullamento dell'oscuramento diNonBlockingWorker
. - Aggiungi la possibilità di attivare il lavoro a tempo in
TestDriver
tramiteTestDriver.setInitialDelayMet(UUID)
eTestDriver.setPeriodDelayMet(UUID)
. B/113360060
Modifiche che provocano un errore
- I costruttori predefiniti
Worker
eNonBlockingWorker
sono stati ritirati. Esegui la migrazione al nuovo costruttore il prima possibile. Nelle versioni future il costruttore predefinito verrà rimosso.
Versione 1.0.0-alpha08
27 agosto 2018
Correzioni di bug
- Componenti WorkManager etichettati esplicitamente come non a conoscenza del boot diretto in modo che non vengano avviati durante il boot diretto. In futuro, forniremo una versione di WorkManager sensibile all'avvio diretto. B/112665532
- È stato risolto un problema per cui il lavoro di ripetizione non veniva eseguito. b/112604021
- È stato corretto il problema relativo all'esecuzione ripetuta del lavoro periodico (correlato al problema precedente). b/112859683
- I criteri di backoff vengono rispettati quando il processo dell'app è già in esecuzione.
- Messaggi di eccezione corretti in
Data
per indicare che il limite è 10 KB. - Il valore massimo di
Configuration.setMaxSchedulerLimit(int)
è stato ridotto a 50 per tenere conto di una certa latenza nel completamento dell'elaborazione diJobScheduler
. b/112817355
Versione 1.0.0-alpha07
16 agosto 2018
Correzioni di bug
- È stata corretta una potenziale query SQL con limiti negativi che poteva restituire un numero illimitato di risultati.
- Il lavoro di cui è stata completata l'esecuzione ora annulla correttamente tutte le copie in attesa in altri pianificatori. Ciò ha comportato il superamento del limite di
JobScheduler
job. b/111569265 - È stato corretto un
ConcurrentModificationException
inConstraintTracker
. b/112272753 - Le annotazioni del tipo di ritorno di
Data.getBooleanArray(String)
eData.getIntArray(String)
sono state modificate in@Nullable
anziché in@NonNull
. b/112275229
Modifiche all'API
Worker
ora estende un nuovo corso,NonBlockingWorker
. Ciò non influisce sull'utilizzo corrente. In futuro,NonBlockingWorker
diventerà un'entità completamente supportata per le soluzioni di threading personalizzate.- Annotazioni del tipo restituito di
Data.getBooleanArray(String)
eData.getIntArray(String)
modificate in@Nullable
anziché@NonNull
. b/112275229 - Estensioni Kotlin: sono deprecate
Map.toWorkData()
e sono state aggiunte unaworkDataOf(vararg Pair<String, Any?>)
di primo livello per garantire una maggiore coerenza con le API esistenti.
Versione 1.0.0-alpha06
1 agosto 2018
Correzioni di bug
- Evitare il blocco del database durante la pianificazione del lavoro. b/111801342
- È stato corretto un bug che causava l'interruzione dell'esecuzione di
PeriodicWork
in base alla pianificazione in modalità Sospensione. b/111469837 - Correzione di una condizione di gara durante il monitoraggio delle limitazioni che causa l'arresto anomalo di
WorkManager
. googlecodelabs/android-workmanager/issues/56 - Crea
WorkRequest
univoci quando utilizziWorkRequest.Builder#build()
. b/111408337 - Attiva l'uso di
RescheduleReceiver
solo quando sono presentiWorkRequest
che ne hanno bisogno. b/111765853
Versione 1.0.0-alpha05
24 luglio 2018
Modifiche all'API
WorkManager.getInstance()
ora è annotato con@NonNull
anziché@Nullable
. Se invece il singleton non viene inizializzato correttamente nei casi di inizializzazione manuale, il metodo lancerà unIllegalStateException
. Si tratta di una modifica dell'API che comporta una interruzione del servizio.- È stata aggiunta una nuova API,
Configuration.Builder.setMinimumLoggingLevel(int)
, che può controllare la verbosità di WorkManager. Per impostazione predefinita, WorkManager registraLog.INFO
e versioni successive. - È stata modificata la firma di
Data.getString()
in modo che non accetti più un valore predefinito (è implicitamentenull
). Si tratta di una modifica dell'API che comporta una rottura. - Alcuni metodi sono stati contrassegnati come necessari solo per uso interno come
@hide
. Sono inclusi il costruttoreConstraints
,Data.toByteArray()
eData.fromByteArray(byte[])
. Si tratta di una modifica dell'API che comporta un errore.
Correzioni di bug
- WorkManager non esegue più il lavoro durante i casi noti di backup automatico. Ciò potrebbe aver causato un arresto anomalo. b/110564377
- È stato corretto il problema di doppia pianificazione dei
PeriodicWorkRequest
quando si utilizzaJobScheduler
. b/110798652 - È stato risolto un problema relativo all'esecuzione non corretta dei comandi
PeriodicWorkRequest
dopo la sospensione del dispositivo. b/111469837 - Risolto un problema di ritardi iniziali durante l'utilizzo di Firebase JobDispatcher. b/111141023
- Sono stati corretti alcuni potenziali problemi di concorrenza e di tempistica.
- Sono stati liberati correttamente i
BroadcastReceiver
che non erano più necessari. - È stata ottimizzata la ripianificazione delle prestazioni quando le app si riavviano dopo essere state chiuse forzatamente.
- È consentito chiamare
TestScheduler.setAllConstraintsMet(UUID)
prima o dopo aver accodato ilWorkRequest
specificato. B/111238024
Modifiche che provocano un errore
WorkManager.getInstance()
ora è annotato con@NonNull
anziché@Nullable
.- È stata modificata la firma di
Data.getString()
in modo che non assuma più un valore predefinito (è implicitamentenull
). - Alcuni metodi necessari solo per l'utilizzo interno sono contrassegnati come
@hide
. Sono inclusi il costruttoreConstraints
,Data.toByteArray()
eData.fromByteArray(byte[])
.
Versione 1.0.0-alpha04
26 giugno 2018
Correzioni di bug
- Ora le
PeriodicWorkRequest
vengono riprogrammate correttamente quando si utilizza l'implementazione basata suAlarmManager
. - È stato corretto un potenziale ANR durante la riprogrammazione di tutti i worker dopo un arresto forzato o un riavvio. b/110507716
- Sono state aggiunte annotazioni di nullità a varie API WorkManager. b/110344065
- Registra le eccezioni non rilevate che si verificano durante l'esecuzione del worker. b/109900862
- Sono state consentite migrazioni distruttive del database nel caso in cui tu decida di eseguire il rollback a una versione precedente di WorkManager. b/74633270
- È stato corretto un arresto anomalo della migrazione se vengono creati tag impliciti duplicati. Si tratta di un problema molto raro che si è verificato solo se hai utilizzato personalmente lo stesso formato di tag implicito.
Versione 1.0.0-alpha03
19 giugno 2018
Correzioni di bug
È stata corretta una condizione di gara nell'implementazione basata su
AlarmManager
. b/80346526.Sono stati corretti i job duplicati quando si utilizzava
JobScheduler
dopo il riavvio di un dispositivo.I job con trigger URI dei contenuti ora vengono mantenuti tra i riavvii. b/80234744
Aggiornamenti della documentazione. b/109827628, b/109758949, b/80230748
È stato risolto un problema di arresto anomalo durante la riinserimento in coda di
WorkRequest
. b/109572353.Sono stati corretti gli avvisi del compilatore Kotlin durante l'utilizzo della dipendenza
work-runtime-ktx
.WorkManager ora utilizza la versione
1.1.1-rc1
diRoom
.
Modifiche alle API
- È stata aggiunta
getStatusesSync()
, la versione sincrona diWorkContinuation.getStatuses()
. Worker
è in grado di distinguere l'annullamento avviato dall'utente dall'interruzione temporanea richiesta dal sistema operativo.Worker.isStopped()
restituiscetrue
se è stato richiesto un arresto di qualsiasi tipo.Worker.isCancelled()
restituiscetrue
quando il lavoro è stato annullato esplicitamente. b/79632247- È stato aggiunto il supporto per JobParameters#getNetwork() nell'API 28. Questo viene visualizzato tramite
Worker.getNetwork()
. - È stato aggiunto
Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit)
per consentirti di impostare il numero di job che possono essere inviati aJobScheduler
oAlarmManager
. In questo modo,WorkManager
non occuperà tutti gli slotJobScheduler
disponibili. - È stato aggiunto
Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId)
, che consente di definire un intervallo di ID jobJobScheduler
sicuri per l'utilizzo diWorkManager
. b/79996760 Worker.getRunAttemptCount()
restituisce il conteggio corrente delle esecuzioni per un determinatoWorker
. b/79716516WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork)
ti consente di mettere in codaPeriodicWorkRequest
univoci. b/79600647WorkManager.cancelAllWork()
annulla tutti iWorker
. Le librerie che dipendono daWorkManager
possono eseguire query quando questo metodo è stato chiamato per ultimo utilizzandoWorkManager.getLastCancelAllTimeMillis()
per un'ulteriore pulizia dello stato interno.- È stato aggiunto
WorkManager.pruneWork()
per rimuovere i job completati dal database interno. b/79950952, b/109710758
Modifiche al comportamento
- È stato aggiunto un tag implicito per tutti i valori
WorkRequest
, ovvero il nome completo della classe perWorker
. In questo modo, è possibile rimuovere iWorkRequest
senzatag
o quando ilid
non è disponibile. b/109572351
Modifiche che provocano un errore
Worker.WorkerResult
rinominato inWorker.Result
.Worker.onStopped
ora ha un parametroisCancelled
aggiuntivo impostato sutrue
quandoWorker
è stato annullato esplicitamente.
Versione 1.0.0-alpha02
24 maggio 2018
Correzioni di bug
- È stato corretto un problema relativo a
NullPointerException
il giornoState.isFinished()
. B/79550068 - È stato risolto un problema che causava la riprogrammazione di
Worker
il giornoApplication.onCreate()
. b/79660657 - È stato risolto un problema per cui potevi pianificare più lavoro di quanto consentito dal sistema operativo. b/79497378
- È stata spostata nel thread in background la pulizia dei wakelock associati ai
Worker
. - L'implementazione di
AlarmManager
ora esegue correttamente la pulizia al termine di tutti i lavori in attesa. - Sono state corrette le query SQL di pulizia che interessavano le lingue diverse dall'inglese. b/80065360
- Aggiunto il supporto per
float
inData
. b/79443878 Data.Builder.putAll()
ora restituisce un'istanza diBuilder
. b/79699162- Altre javadoc e correzioni nella documentazione. b/79691663
Modifiche all'API
Worker
può reagire all'interruzione.Worker.isStopped()
può essere utilizzato per verificare se unWorker
è stato interrotto.Worker.onStopped()
può essere utilizzato per eseguire operazioni di pulizia leggere.- L'API
Worker.getTags()
restituisce unSet
di tag associati alWorker
. - Sono stati aggiunti sovraccarichi di
javax.time.Duration
per le API che accettano una combinazione di durata eTimeUnit
. È sorvegliato da@RequiresApi(26)
. - Le estensioni
WorkManager
sono state spostate dal pacchettoandroidx.work.ktx
al pacchettoandroidx.work
. Le vecchie estensioni sono ritirate e verranno rimosse in una versione futura. Configuration.withExecutor()
è deprecato. Usa invece il criterioConfiguration.setExecutor()
.
Versione 1.0.0-alpha01
8 maggio 2018
WorkManager semplifica la pianificazione e l'esecuzione di operazioni in background garantite e consapevoli dei vincoli. Questa release iniziale è 1.0.0-alpha01
.