Responsabile del lavoro
Aggiornamento più recente | Release stabile | Candidato per l'uscita | Versione beta | Release alpha |
---|---|---|---|---|
4 settembre 2024 | 2.9.1 | - | - | 2.10.0-alpha03 |
Dichiarazione delle dipendenze
Per aggiungere una dipendenza su WorkManager, devi aggiungere il Repository Maven di Google al tuo progetto:
Aggiungi le dipendenze per gli artefatti necessari nel file build.gradle
per
l'app o il 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 ktx.
Per saperne di più sulle dipendenze, consulta Aggiungere dipendenze nella build.
Feedback
Il tuo feedback ci aiuta a migliorare Jetpack. Non esitare a contattarci in caso di nuovi problemi o idee per migliorare questa raccolta. Dai un'occhiata alle problemi esistenti in questa raccolta, prima di crearne uno nuovo. Puoi aggiungere il tuo voto a un problema esistente tramite facendo clic sul pulsante a forma di stella.
Consulta la documentazione di Issue Tracker per ulteriori informazioni.
Versione 2.10
Versione 2.10.0-alpha03
4 settembre 2024
Viene rilasciato androidx.work:work-*:2.10.0-alpha03
. La versione 2.10.0-alpha03 contiene questi commit.
Nuove funzionalità
- Sono stati aggiunti tag di traccia ai job da
WorkManager
, che rendono molto più semplice la comprensione di "adb shell dumpsys jobscheduler", poiché conterrà il nome del worker in esecuzione. Vengono aggiunte anche sezioni di tracce intorno alle aree chiave diWorkManager
.
Modifiche alle API
- WorkManager 2.10.0 è ora compilato con SDK 35.
- Correggi i worker in primo piano di tipo "servizio breve" e "sincronizzazione dei dati" che causano un errore ANR quando
WorkManager
non chiamavastopSelf()
. 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) - È stata rimossa la definizione manuale dell’accesso alle nuove API della piattaforma poiché ciò avviene automaticamente tramite la modellazione 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
Viene rilasciato androidx.work:work-*:2.10.0-alpha02
. La versione 2.10.0-alpha02 contiene questi commit.
Modifiche alle API
- È stata aggiunta la possibilità di emettere intervalli di traccia tramite un
Tracer
@RestrictTo
configurabile inWorkManager
. (I17d7f, b/260214125) Configuration.workerCoroutineContext
è stato aggiunto per il controllo del supervisore in cui viene eseguitoCoroutineWorker
. Contribuisce a evitare del tutto l'utilizzo diDispatchers.Default
inWorkManager
. (Icd1b7)- Aggiunta di gestori di 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 sui valori null. Potrebbe richiedere modifiche alle impostazioni nel codice sorgente, se i presupposti relativi ai valori null nel codice sorgente non erano corretti. (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
- Aggiunta di una capacità per specificare
NetworkRequest
come vincolo. (Id98a1, b/280634452)
Versione 2.9
Versione 2.9.1
7 agosto 2024
Viene rilasciato androidx.work:work-*:2.9.1
. La versione 2.9.1 contiene questi commit.
Correzioni di bug
- È stato risolto un arresto anomalo causato dal tentativo da parte di
WorkManager
di riavviare un worker a lunga esecuzione (ovvero un worker in primo piano) quando il tipo di lavoro in primo piano aveva autorizzazioni per i prerequisiti di Android 14 revocate. (b/333957914)
Versione 2.9.0
29 novembre 2023
Viene rilasciato androidx.work:work-*:2.9.0
. La versione 2.9.0 contiene questi commit.
Modifiche importanti dalla versione 2.8.0
- Osservabilità tramite
Flow
s. Invece diLiveData
, ora i progressi del worker possono essere osservati tramite Flow tramiteWorkManager.getWorkInfosFlow
e metodi simili. - 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()
. - Pianificazione precisa dei worker periodici tramite
setNextScheduleTimeOverride
. Ciò consente il calcolo dinamico della successiva pianificazione di lavoro periodica, che può essere utilizzata per implementare funzionalità avanzate come i tempi di aggiornamento adattivi, il comportamento personalizzato dei nuovi tentativi o l'esecuzione di un worker feed di notizie prima che l'utente si svegli ogni mattina senza deviazioni.ExistingPeriodicWorkPolicy.UPDATE
deve essere utilizzato con queste tecniche per evitare di annullare un worker attualmente in esecuzione durante la pianificazione di quello successivo. - 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 utilizzare il thread principale reale. - Le API Coroutines come
CoroutineWorker
sono state spostate da work-runtime-ktx dell'artefatto aggiuntivo al runtime principale dell'artefatto. Il campo work-runtime-ktx è ora vuoto.
Modifiche alle API
stopReason
è stato aggiunto aWorkInfo
. Rende disponibilestopReason
dopo l'esecuzione del worker. Potrebbe essere utile nella segnalazione distopReason
in modo utilizzabile, perché una volta interrotto un worker, un'app stessa potrebbe essere terminata molto rapidamente. (I21386)- Consenti l'impostazione di
Clock
tramite configurazione e l'utilizzo per promuovere la sequenza di esecuzione dei test dei worker. (Ic586e) - Il metodo
getStopReason()
è stato aggiunto aListenableWorker
che fornisce un suggerimento sul motivo per cui il worker è stato interrotto. (I07060) - È stato aggiunto
WorkManagerTestInitHelper#closeWorkDatabase()
per evitare l'avviso di Closeguard sulla perdita di risorse. (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 di Kotlin sono ora disponibili nell'artefatto principale del runtime di lavoro. (I71a9a)- Aggiunto il metodo
setNextScheduleTimeOverride
, che consente di impostare in modo accurato i programmi di lavoro periodici (I3b4da) - L'elemento
getNextScheduleTimeMillis
per ottenere le informazioni sull'esecuzione programmata è stato aggiunto aWorkInfo
. (I797e4) - Le informazioni su ritardo iniziale e periodicità vengono aggiunte a
WorkInfo
. (I52f2f). - Metodo aggiunto osserva i worker tramite Flussi sui metodi
getWorkInfosByTagFlow
,getWorkInfoByIdFlow
,getWorkInfosForUniqueWorkFlow
,getWorkInfosFlow
(If122a) - Aggiunta di
@RequiresApi(...)
annotazioni mancanti alla sezioneConstraints
i costruttori e le proprietà. 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 dell'URI dei contenuti in modo da fornire loro slot garantiti inJobScheduler
per evitare aggiornamenti dei contenuti mancanti sotto il 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
Viene rilasciato androidx.work:work-*:2.9.0-rc01
. La versione 2.9.0-rc01 contiene questi commit.
- Nessuna modifica dall'ultima release beta
Versione 2.9.0-beta01
6 settembre 2023
Viene rilasciato androidx.work:work-*:2.9.0-beta01
. La versione 2.9.0-beta01 contiene questi commit.
Modifiche alle API
- Costanti aggiunte per motivi di interruzione restituiti da
WorkInfo.stopReason
eListenableWorker.stopReason
(I0cc00)
Versione 2.9.0-alpha02
26 luglio 2023
Viene rilasciato androidx.work:work-*:2.9.0-alpha02
. 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 nella segnalazione distopReason
perché una volta interrotto un worker, un'app stessa potrebbe essere terminata molto rapidamente. (I21386)- Consenti l'impostazione dell'orologio tramite configurazione e l'uso per guidare la sequenza di esecuzione dei test dei worker. (Ic586e)
- Il metodo
getStopReason()
è stato aggiunto aListenableWorker
che fornisce un suggerimento sul motivo per cui il worker è stato interrotto. (I07060) - È stato aggiunto
WorkManagerTestInitHelper#closeWorkDatabase()
per evitare l'avviso di Closeguard sulla perdita di risorse. (Ia8d49)
Correzioni di bug
- Aggiunta la possibilità di bypassare
overrideNextScheduleTime
utilizzandoTestDriver
e risolti i problemi di testabilità. (Ic2905)
Versione 2.9.0-alpha01
7 giugno 2023
Viene rilasciato androidx.work:work-*:2.9.0-alpha01
. La versione 2.9.0-alpha01 contiene questi commit.
Nuove funzionalità
- Osservabilità tramite
Flow
s. Invece diLiveData
, ora i progressi del worker possono essere osservati tramite Flow tramiteWorkManager.getWorkInfosFlow
e metodi simili. - Pianificazione precisa dei worker periodici tramite
setNextScheduleTimeOverride
. Ciò consente il calcolo dinamico della successiva pianificazione di lavoro periodica, che può essere utilizzata per implementare funzionalità avanzate come i tempi di aggiornamento adattivi, il comportamento personalizzato dei nuovi tentativi o l'esecuzione di un worker feed di notizie prima che l'utente si svegli ogni mattina senza deviazioni.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 corrispondenza della produzione in thread. Puoi utilizzareExecutorsMode.PRESERVE_EXECUTORS
per mantenere 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
. Il campowork-runtime-ktx
è ora vuoto.
Modifiche alle API
- Il costruttore di
WorkInfo
è ora pubblico e 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)- 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 esecuzione pianificata vengono aggiunte a
WorkInfo
. (I797e4) - Le informazioni su ritardo iniziale e periodicità vengono aggiunte a
WorkInfo
. (I52f2f). - Metodo aggiunto osserva i worker tramite Flussi sui metodi
getWorkInfosByTagFlow
,getWorkInfoByIdFlow
,getWorkInfosForUniqueWorkFlow
,getWorkInfosFlow
(If122a) - Sono state aggiunte
@RequiresApi(...)
annotazioni mancanti alla sezione Vincoli i costruttori e le proprietà. 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 dell'URI dei contenuti in modo da fornire loro slot garantiti inJobScheduler
per evitare aggiornamenti dei contenuti mancanti sotto il carico elevato. Il limite può essere configurato tramiteConfiguration.Builder.setContentUriTriggerWorkersLimit
. (Ic128f)- I vincoli sono stati aggiunti a
WorkInfo
. (I162c0)
Versione 2.8
Versione 2.8.1
22 marzo 2023
Viene rilasciato androidx.work:work-*:2.8.1
. La versione 2.8.1 contiene questi commit.
Correzioni di bug
- È stato corretto l'errore 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 il tempo di accodamento originale, il concatenamento e così via. Per ulteriori dettagli, vedi il post del blog dettagliato su questa funzionalità e i documenti Java perWorkManager.updateWork
eExistingPeriodicWorkPolicy.UPDATE
.
Modifiche alle API
WorkManager.updateWork
è stato aggiunto per aggiornare il lavoro preservando il tempo di accodamento e il concatenamento originali.(I9a248, b/219446409)- Membri aggiunti:
ExistingPeriodicWorkPolicy.UPDATE
Questa norma consente di aggiornare un'opera periodica intitolata. È 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 deprecato per evitare confusione traREPLACE
eUPDATE
con nomi molto simili. Se vuoi mantenere la semantica precedente diREPLACE
, puoi utilizzare ilCANCEL_AND_REENQUEUE
appena aggiunto, che è identico aREPLACE
. (I985ed, b/219446409) - È stata aggiunta la possibilità di intercettare le eccezioni di pianificazione fornite da
Consumer<Throwable>
tramite setSchedulingExceptionGestori - È stata aggiunta la possibilità di fornire
Consumer<Throwable>
tramite setInitializationExceptionGestori per determinare se si sono verificati problemi durante il tentativo di inizializzare WorkManager. - Assistente in linea per
OneTimeWorkRequest
ePeriodicWorkRequest
sono stati spostati daandroidx.work:work-runtime-ktx
aandroidx.work:work-runtime
(I0010f, b/209145335) - I metodi helper
WorkQuery.fromIds
,WorkQuery.fromStates
,WorkQuery.fromUniqueWorkNames
eWorkQuery.fromTags
sono stati aggiunti per creare direttamenteWorkQuery
. (b/199919736) (If48f2, b/199919736) - Elemento
getForegroundInfo
aggiunto alla raccoltaWorker
. (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 creati direttamente anziché utilizzare
Constraints.Builder
, il che è una soluzione pratica per gli utenti di Kotlin. (Idc390, b/137568653) - Aggiunta la possibilità di verificare se
WorkManager
è stato inizializzato. Inoltre, è stata aggiunta una nuova APIgetConfiguration()
per gli sviluppatori di librerie al fine di ottenere 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 la concessione dell'autorizzazionePOST_NOTIFICATIONS
su SDK 33 e versioni successive. (Ie542e, b/238790278) - Propaga gli annullamenti in
CoroutineScope
aListenableFuture
quando utilizzisuspendCancellableCoroutine
.
Versione 2.8.0-rc01
7 dicembre 2022
Viene rilasciato androidx.work:work-*:2.8.0-rc01
. 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
Viene rilasciato androidx.work:work-*:2.8.0-beta02
. La versione 2.8.0-beta02 contiene questi commit.
Correzioni di bug
- È stato corretto il metodo
equals
inWorkInfo
, che in precedenza non prendeva in considerazione le informazioni di nuova generazione. (4977cc)
Versione 2.8.0-beta01
5 ottobre 2022
Viene rilasciato androidx.work:work-*:2.8.0-beta01
. 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
Viene rilasciato androidx.work:work-*:2.8.0-alpha04
. La versione 2.8.0-alpha04 contiene questi commit.
Modifiche alle 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 per questo metodo restituire una nuova generazione da quella del worker attualmente in esecuzione, se si è verificato 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
Viene rilasciato androidx.work:work-*:2.8.0-alpha03
. La versione 2.8.0-alpha03 contiene questi commit.
Nuove funzionalità
- È stata aggiunta la possibilità di aggiornare
WorkRequests
in modo non invasivo, preservando il tempo di accodamento originale, i concatenamenti e così via. ConsultaWorkManager.updateWork
eExistingPeriodicWorkPolicy.UPDATE
per ulteriori dettagli.
Modifiche alle 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
Questa norma consente di aggiornare un'opera 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 deprecato per evitare confusione traREPLACE
eUPDATE
con 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) - Assistente 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 la concessione dell'autorizzazione POST_NOTIFICATIONS su 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 creati direttamente anziché utilizzare Builder, una soluzione pratica 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 ottenere la configurazione con cui è stato inizializzatoWorkManager
. (I6eff3, b/212300336)
Versione 2.8.0-alpha01
12 gennaio 2022
Viene rilasciato androidx.work:work-*:2.8.0-alpha01
. La versione 2.8.0-alpha01 contiene questi commit.
Modifiche alle API
- Metodi di supporto
WorkQuery.fromStates
,WorkQuery.fromUniqueWorkNames
,WorkQuery.fromTags
sono stati aggiunti per creare direttamente WorkQuery. (If48f2, b/199919736) - Aggiunge metodi BuildCompat sperimentali per gli SDK futuri (Iafd82, b/207528937)
- Aggiungi
getForegroundInfo
aWorker
. (Ic1ead) - Metodi di supporto
WorkQuery.fromIds
per creare una WorkQuery direttamente dagli ID sono stati aggiunti. (Ie5bdf, b/199919736) - RxWorker ora ha
setForeground
che restituisceCompletable
che può essere utilizzato al posto disetForegroundInfoAsync
che restituisceListenableFuture
. (I85156) - Ora RxWorker per RxJava 2 ha
getForegroundInfo
che restituisceSingle
che può essere utilizzato al posto digetForegroundInfoAsync
che restituisceListenableFuture
. (I21c91, b/203851459) - Ora RxWorker per RxJava 3 ha
getForegroundInfo
che restituisceSingle
che può essere utilizzato al posto digetForegroundInfoAsync
che restituisceListenableFuture
. (I1ca8a) - RxWorker ora ha
setForeground
che restituisceCompletable
che può essere utilizzato al posto disetForegroundInfoAsync
che restituisceListenableFuture
. (I992a3, b/203851459)
Correzioni di bug
- Propaga gli annullamenti in
CoroutineScope
aListenableFuture
quando utilizzisuspendCancellableCoroutine
. (I77e63)
Versione 2.7
Versione 2.7.1
17 novembre 2021
Viene rilasciato androidx.work:work-*:2.7.1
. La versione 2.7.1 contiene questi commit.
Correzioni di bug
- Gli annullamenti in
CoroutineScope
vengono propagati inListenableFuture
quando si utilizzasuspendCancellableCoroutine
. (I77e63) - Quando le richieste di lavoro in ritardo vengono contrassegnate come rapide, viene generata immediatamente un'eccezione. bef1762
Versione 2.7.0
13 ottobre 2021
Viene rilasciato androidx.work:work-*:2.7.0
. 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 del servizio in primo piano in Android 12.Quando utilizzi
setExpedited(...)
, WorkManager delega i job rapidi in JobScheduler a partire da Android 12, fornendo al contempo la compatibilità con le versioni precedenti di Android delegando a un servizio in primo piano.
Versione 2.7.0-rc01
29 settembre 2021
Viene rilasciato androidx.work:work-*:2.7.0-rc01
. 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 il conflitto SQLite multi-processo durante l'inizializzazione di WorkManager.
Modifiche alle API
- Rimuovi le API
@ExperimentalExpeditedWork
poiché le API della piattaforma di base per Android 12 (S) sono stabili. (aosp/1792806)
Correzioni di bug
- Fornisci un messaggio di errore migliore per i lavoratori rapidi che non implementano
getForegroundInfoAsync()
. (aosp/1809376)
Versione 2.7.0-alpha05
21 luglio 2021
Viene rilasciato androidx.work:work-*:2.7.0-alpha05
. La versione 2.7.0-alpha05 contiene questi commit.
Questa release contiene anche correzioni di bug dalla release WorkManager 2.6.0-beta02
.
Versione 2.7.0-alpha04
2 giugno 2021
Viene rilasciato androidx.work:work-*:2.7.0-alpha04
.
Questa release contiene anche le modifiche della versione 2.6.0-beta01.
Modifiche alle API
ListenableWorker.setForegroundAsync()
non è più deprecato.- Ti consigliamo di utilizzare l'API
WorkRequest.Builder.setExpedited(...)
quando possibile. Per supportare meglio le situazioni in cui l'app non è soggetta a limitazioni del servizio in primo piano, gli sviluppatori possono utilizzare l'APIListenableWorker.setForegroundAsync()
. - Se viene chiamata
ListenableWorker.setForegroundAsync()
e l'app è soggetta a limitazioni del servizio in primo piano, viene generata l'eccezione ForegroundServiceStartNotAllowedException.
Correzioni di bug
- Quando i lavori accelerati vengono riprogrammati, non vengono più velocizzati. Diventano lavori normali.
Versione 2.7.0-alpha03
21 aprile 2021
Viene rilasciato androidx.work:work-*:2.7.0-alpha03
. 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 aggiuntoRemoteCoroutineWorker
, ovvero un'implementazione diRemoteListenableWorker
in grado di associarsi a un processo remoto. (I30578)
Modifiche alle 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 worker multi-processo 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
Viene rilasciato androidx.work:work-*:2.7.0-alpha02
. 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
Viene rilasciato androidx.work:work-*:2.7.0-alpha01
. La versione 2.7.0-alpha01 contiene questi commit.
Nuove funzionalità
WorkManager introduce una nuova API
WorkRequest.Builder.setExpedited(...)
per tenere conto delle limitazioni relative al servizio in primo piano in Android 12.Le applicazioni non possono più avviare un servizio in primo piano quando sono in background. Di conseguenza, per supportare meglio il lavoro a lunga esecuzione, precedentemente associato al ciclo di vita di un servizio in primo piano, le applicazioni possono contrassegnare i
WorkRequest
come veloci.Questa API sostituisce le API
setForegroundAsync(...)
/setForeground(...)
, che ora sono ritirate.Quando usi
setExpedited(...)
, WorkManager delega i job rapidi inJobScheduler
a partire da Android 12, fornendo al contempo la compatibilità con le versioni precedenti di Android, delegando ai servizi in primo piano.
Modifiche alle API
- Aggiungi il supporto per
WorkRequest
accelerati.
Versione 2.6.0
Versione 2.6.0
1° settembre 2021
Viene rilasciato androidx.work:work-*:2.6.0
. La versione 2.6.0 contiene questi commit.
Modifiche importanti dalla versione 2.5.0
WorkManager ora utilizza
androidx.startup
per inizializzare WorkManager. Se in passato hai utilizzatotools:node="remove"
, l'elementoContentProvider
utilizzato per inizializzare WorkManager in passato, devi eseguire le operazioni indicate 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" />
Aggiunto il supporto per i worker che possono essere eseguiti in qualsiasi processo. (Iaf200)
È stata aggiunta un'istruzione
RemoteCoroutineWorker
che è un'implementazione di RemoteAscoltaableWorker 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 slega correttamente daRemoteWorkManagerService
, il che consente aRemoteWorkManagerService
di eseguire correttamente la pulizia. aosp/1730694 - Ora
RemoteListenableWorker
si slega correttamente daRemoteWorkerService
, il che consente aRemoteWorkerService
di eseguire correttamente la pulizia. aosp/1743817 - Ora
ForceStopRunnable
viene eseguito solo nel processo dell'app principale. Questa è un'ottimizzazione ed evita la contesa delle risorse per le app che utilizzano più processi. aosp/1749180, aosp/1761729
Versione 2.6.0-beta01
2 giugno 2021
Viene rilasciato androidx.work:work-*:2.6.0-beta01
. La versione 2.6.0-beta01 contiene questi commit.
Questa release contiene alcuni piccoli miglioramenti alla documentazione. La release è in gran parte identica alla 2.6.0-alpha02.
Versione 2.6.0-alpha02
21 aprile 2021
Viene rilasciato androidx.work:work-*:2.6.0-alpha02
. 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 alle API
- Aggiunto il supporto per il vincolo di rete
TEMPORARILY_UNMETERED
. (I08d5e) - Supporto worker multiprocesso per
setProgressAsync()
. (Ib6d08) - Rendi
WorkManagerInitializer
pubblici in modo che altriandroidx.startup.Initializer
possano utilizzarli come dipendenze. (I5ab11).
Versione 2.6.0-alpha01
24 marzo 2021
Viene rilasciato androidx.work:work-*:2.6.0-alpha01
. La versione 2.6.0-alpha01 contiene questi commit.
Nuove funzionalità
WorkManager
ora utilizzaandroidx.startup
per inizializzare WorkManager. In precedenza, questa operazione era eseguita daandroidx.work.impl.WorkManagerInitializer
. (aosp/1608813)Se hai utilizzato
tools:node="remove"
, il valoreContentProvider
è utilizzato per l'inizializzazione ciclo di vita di un processo nel passato, devi procedere nel seguente modo.<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 restituisceoutputData
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
Viene rilasciato androidx.work:work-*:2.5.0
. 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:implementation "androidx.work:work-multiprocess:2.5.0"
- Specifica un processo principale utilizzando Configuration.Builder.setDefaultProcessName(String).
- Quando usi
work-multiprocess
, vuoi usare anche RemoteWorkManager per gestire i tuoiWorkRequest
. RemoteWorkManager si rivolge sempre al 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. Questo fa sì che il job sottostante venga interrotto automaticamente a causa di un bug della piattaforma.WorkManager
ora garantisce la presenza di job di supporto per ogni singoloWorkRequest
quandoApplication
viene inizializzato tramite la riconciliazione dei job. Ciò migliora notevolmente l'affidabilità dell'esecuzione del job. (b/172475041, aosp/1489577) WorkManager
limita la crescita del database riducendo la durata del buffer durante il quale vengono tracciati iWorkRequest
dopo il completamento di unWorkRequest
. La durata era di7
giorni prima. È stato ridotto a1
giorno + la durata di keepResultsForAtLeast. (aosp/1419708)TestListenableWorkerBuilder
ora supporta la classe modificata che estendeListenableWorker
per semplificare i test. (aosp/1443299, b/169787349)- WorkManager inspector è ora disponibile quando si utilizza Android Studio Arctic Fox.
Versione 2.5.0-rc01
13 gennaio 2021
Viene rilasciato androidx.work:work-*:2.5.0-rc01
. 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. Questo causa problemi su alcuni dispositivi Motorola. (aosp/1535368, b/175944460)
- È stato corretto un bug che ignorava
NoSuchElementException
durante il tentativo di slegamento da un processo non attivo. (aosp/1530589) - Migliora
ConstraintTrackingWorker
per interrompere unListenableWorker
solo se non è già stato interrotto. (aosp/1496844, b/172946965) - Aggiorna le librerie androidx.work per scegliere come target Java 8 (Ibd2f2)
Versione 2.5.0-beta02
2 dicembre 2020
Viene rilasciato androidx.work:work-*:2.5.0-beta02
. La versione 2.5.0-beta02 contiene questi commit.
Correzioni di bug
- È stato corretto un bug in
androidx.work:work-multiprocess
per cui WorkManager bloccava inavvertitamente il thread di chiamata durante il tentativo di associazione al processo designato. (aosp/1475538) - È stato corretto un bug per cui la riconciliazione di
PeriodicWorkRequest
non veniva eseguita correttamente. (b/172475041, aosp/1489577) - È stata aggiunta una soluzione alternativa per un bug della piattaforma durante l'interruzione del servizio in primo piano durante l'utilizzo delle 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
limita automaticamente il numero diWorkRequest
che possono essere rilevati dallo scheduler in fase di elaborazione. 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
ListenableWorker
vengono interrotti, contrassegnali comeENQUEUED
immediatamente in modo che possano essere riprogrammati in un secondo momento. (aosp/1455618, b/170273988)
Versione 2.5.0-alpha03
14 ottobre 2020
Viene rilasciato androidx.work:work-*:2.5.0-alpha03
. La versione 2.5.0-alpha03 contiene questi commit.
Modifiche alle API
TestListenableWorkerBuilder
eTestWorkerBuilder
non utilizzano tipi non elaborati. (I883ad, b/169787349)
Correzioni di bug
- Usa
ApplicationInfo
per determinare il nome del processo dell'app predefinita. (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 il lavoro a lunga esecuzione associato a un servizio in primo piano. (b/168502234, aosp/1431331)
Versione 2.5.0-alpha02
16 settembre 2020
Viene rilasciato androidx.work:work-*:2.5.0-alpha02
. La versione 2.5.0-alpha02 contiene questi commit.
Nuove funzionalità
- Aggiungi un'API a WorkQuery per poter usare
id
per eseguire query suWorkInfo
. (aosp/1412372, b/157335295) - WorkManager supporta meglio le app che utilizzano più processi con un nuovo artefatto (
androidx.work:work-multiprocess:*
). Questo nuovo elemento aiuta a risolvere alcuni problemi riscontrati da app di grandi dimensioni, tra cui:- WorkManager deve in genere essere inizializzato in ogni processo dell'app. Questo non è ottimo perché c'è una maggiore contesa SQLite che a sua volta causa altri problemi. WorkManager dispone ora di nuove API che possono essere utilizzate per designare un processo dell'app principale utilizzando
Configuration#setDefaultProcessName(processName)
.processName
è un nome di processo completo simile apackageName:processName
(ad es.com.example:remote
). - Un insieme di nuove API:
RemoteWorkManager
eRemoteWorkContinuation
alle richieste di lavoroenqueue
,cancel
equery
. Queste API non includonoLiveData
varianti per evitare la contesa SQLite in più processi. Tutte le chiamate aenqueue
,cancel
equery
vengono inoltrate a un processo dell'appprimary
utilizzando AIDL e restituiscono unListenableFuture
fluente. (aosp/1392657, aosp/1411210, aosp/1412215, aosp/1417713)
- WorkManager deve in genere essere inizializzato in ogni processo dell'app. Questo non è ottimo perché c'è una maggiore contesa SQLite che a sua volta causa altri problemi. WorkManager dispone ora di nuove API che possono essere utilizzate per designare un processo dell'app principale utilizzando
Modifiche alle API
- WorkManager ora elimina in modo più aggressivo i
WorkRequest
completati che non hanno dipendenze incomplete. La durata del buffer è cambiata da7
giorni a1
giorno. (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
Viene rilasciato androidx.work:work-*:2.5.0-alpha01
. 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
- Gestisci i
SecurityException
durante il monitoraggio dello stato della rete su alcuni dispositivi. (aosp/1396969)
Contributo esterno
- Correggi la documentazione per
ArrayCreatingInputMerger
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, l'elementoScheduler
in corso valutava di eseguire solo il lavoro non ritardato e i cui vincoli erano stati rispettati. Ora lo scheduler in-process tiene traccia deiWorkRequest
che potrebbero essere eseguiti in futuro, incluse le PeriodicWorkRequests. Inoltre, l'elementoScheduler
in elaborazione non rispetta i limiti di pianificazione (ma è comunque limitato alle dimensioni dell'elementoExecutor
utilizzato da WorkManager). Ciò significa che ora l'applicazione può eseguire molte più WorkRequests 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 per
WorkInfo
utilizzando unWorkQuery
. Questo è utile quando gli sviluppatori vogliono eseguire query suiWorkInfo
utilizzando una combinazione di più attributi. Per ulteriori informazioni, visita le pagineWorkQuery.Builder.fromStates(...)
,WorkQuery.Builder. fromTags(...)
oWorkQuery.Builder.fromUniqueWorkNames(...)
. (aosp/1253230, b/143847546) Aggiungi la possibilità di richiedere informazioni diagnostiche a
WorkManager
utilizzando:adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
Ciò fornisce molte informazioni utili, tra cui:
- Richieste di lavoro completate nelle ultime 24 ore.
- Richieste di lavoro 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 superati. (b/134613984, aosp/1199640)Consenti di aggiungere un
RunnableScheduler
personalizzato per monitorare le WorkRequest che devono essere eseguite in futuro. Viene utilizzato dallo scheduler in-process. (aosp/1203944)Aggiungi il supporto per l'aggiunta dinamica delle fabbriche a cui delegare le fabbriche quando utilizzi un
DelegatingWorkerFactory
. (b/156289105, aosp/1309745)Allinea il monitoraggio dei vincoli
BATTERY_NOT_LOW
in modo più fedele alla piattaforma. (aosp/1312583)Lo scheduler in-process utilizza ora API migliori per determinare il nome del processo. Ciò è utile per un supporto migliore delle 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 si usano direttamente le API JobService. aosp/1223567
- È stata aggiunta una nuova regola lint che garantisce che le
ListenableWorker
implementazioni siano orapublic
quando viene utilizzata l'impostazione predefinitaWorkerFactory
. (aosp/1291262)
- Utilizzo del
Le chiamate a
setForegroundAsync()
che non vengono completate prima del completamento di unListenableWorker
ora verranno segnalate tramite unIllegalStateException
sulListenableFuture
restituito. (aosp/1262743)Correggere un bug per cui
ForegroundService
non viene interrotto dopo l'interruzione diWorker
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)
Versione 2.4.0-rc01
24 giugno 2020
Viene rilasciato androidx.work:work-*:2.4.0-rc01
. La versione 2.4.0-rc01 contiene questi commit.
Correzioni di bug
- Lo scheduler in-process utilizza ora 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
Vengono rilasciati i seguenti elementi: 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
. La versione 2.4.0-beta01 contiene questi commit.
Correzioni di bug
- Correggere un bug per cui
ForegroundService
non viene interrotto dopo l'interruzione diWorker
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) - Aggiungi il supporto per l'aggiunta dinamica delle fabbriche a cui delegare le fabbriche quando utilizzi un
DelegatingWorkerFactory
. (b/156289105, aosp/1309745) - Allinea il monitoraggio dei vincoli
BATTERY_NOT_LOW
in modo più fedele alla piattaforma. (aosp/1312583)
Versione 2.4.0-alpha03
29 aprile 2020
Viene rilasciato androidx.work:work-*:2.4.0-alpha03
. 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
ListenableWorker
implementazioni siano orapublic
quando viene utilizzata l'impostazione predefinitaWorkerFactory
. (aosp/1291262)
Modifiche alle API
- La chiamata di
setProgressAsync()
al termine dell'esecuzione diListenableWorker
segnalerà ora unException
tramiteListenableFuture
. (aosp/1285494) WorkQuery.Builder
ora è contrassegnato comefinal
. (aosp/1275037)- I
WorkQuery.Builder
metodi di fabbricawithStates
,withTags
ewithUniqueWorkNames
sono stati rinominati rispettivamente infromStates
,fromTags
efromUniqueWorkNames
. (aosp/1280287)
Correzioni di bug
- Ignora i valori
SecurityException
durante il monitoraggio dello stato di rete di un dispositivo. (b/153246136, aosp/1280813)
Versione 2.4.0-alpha02
1° aprile 2020
Viene rilasciato androidx.work:work-*:2.4.0-alpha02
. La versione 2.4.0-alpha02 contiene questi commit.
Nuove funzionalità
- È stata aggiunta una nuova regola Lint che avvisa quando
WorkRequest
richiede siaConstraints.setRequiresCharging(...)
siaConstraints.setRequiresDeviceIdle(...)
. Alcuni dispositivi non vengono 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 per
WorkInfo
utilizzando unWorkQuery
. Questo è utile quando gli sviluppatori vogliono eseguire query suiWorkInfo
utilizzando una combinazione di più attributi. Per ulteriori informazioni, visita le pagineWorkQuery.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
ora verranno segnalate tramite unIllegalStateException
sulListenableFuture
restituito. (aosp/1262743)
Correzioni di bug
- È stata corretta la regola lint che controlla la durata degli intervalli non valida 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à
Ora lo scheduler in-process di
WorkManager
è più potente. In precedenza, lo scheduler in fase di elaborazione considerava solo l'esecuzione di lavori che non venivano ritardati e i cui vincoli erano stati rispettati. Ora lo scheduler in-process tiene traccia dei valoriWorkRequest
che potrebbero essere eseguiti in futuro, inclusi iPeriodicWorkRequest
. Inoltre, lo scheduler in elaborazione non osserva i limiti di pianificazione (ma è comunque limitato alle dimensioni diExecutor
utilizzate 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 diagnostiche a WorkManager utilizzando
adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
. Ciò fornisce molte informazioni utili, tra cui:- Richieste di lavoro completate nelle ultime 24 ore.
- Richieste di lavoro attualmente in esecuzione.
- richieste di lavoro 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 si utilizzano direttamente le APIJobService
. (aosp/1223567)
- Utilizzo del
Modifiche alle API
Aggiungi
ExistingWorkPolicy.APPEND_OR_REPLACE
che è simile aAPPEND
, ma sostituisce una catena che ha prerequisiti annullati o non sono stati soddisfatti. (b/134613984, aosp/1199640)Consenti di aggiungere
RunnableScheduler
personalizzati per monitorareWorkRequest
che devono essere eseguiti 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 invece unCompletable
. e abbiamo aggiunto 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
Viene rilasciato androidx.work:work-*:2.3.4
. La versione 2.3.4 contiene questi commit.
Correzioni di bug
- È stato corretto un bug che causava l'esecuzione di più istanze di
Worker
a lunga esecuzione dopo il superamento della finestra di esecuzione di 10 minuti. (aosp/1247484, b/150553353) - Correzione per il lint di WorkManager
IssueRegistry
. 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 una
Worker
veniva interrotta, non veniva riprogrammata correttamente. (b/150325687, aosp/1246571)
Versione 2.3.2
Versione 2.3.2
19 febbraio 2020
Vengono rilasciate le androidx.work:work-*:2.3.2
. 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 di gestione per i worker a lunga esecuzione. (aosp/1226295)
- È stata migliorata la gestione dell'annullamento delle notifiche per i worker a lunga esecuzione in seguito all'annullamento del worker. (aosp/1228346)
Versione 2.3.1
Versione 2.3.1
5 febbraio 2020
Viene rilasciato androidx.work:work-*:2.3.1
. La versione 2.3.1 contiene questi commit.
Correzioni di bug
- Gestisci meglio il ciclo di vita dei
Notification
per iWorker
a lunga esecuzione eseguiti quando unService
in primo piano è attivo. (aosp/1218539, b/147249312) WorkManager
ora dipende dalla versione stabile diandroidx.sqlite:sqlite-framework:2.1.0
. (aosp/1217729)- Sono state aggiunte regole lint per garantire che venga specificato un
foregroundServiceType
inAndroidManifest.xml
quando utilizziforegroundServiceType
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 lavori di lunga durata o importanti tramite
ListenableWorker#setForegroundAsync()
. - Supporto per i progressi dei worker tramite
ListenableWorker#setProgressAsync()
. - WorkManager ora include nella libreria ulteriori regole lint aggiuntive che aiutano a individuare 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'artefatto
work-testing
ora definisce una dipendenzaapi
suwork-runtime-ktx
. (aosp/1194410)
Versione 2.3.0-beta02
18 dicembre 2019
Viene rilasciato androidx.work:work-*:2.3.0-beta02
. 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 lint che garantisce che il fornitore di contenuti
androidx.work.impl.WorkManagerInitializer
venga rimosso daAndroidManifest.xml
quando viene utilizzata l'inizializzazione on demand. (aosp/1167007) - È stato aggiunto un avviso lint quando viene usato
enqueue()
perPeriodicWorkRequest
anziché perenqueueUniquePeriodicWork()
. (aosp/1166032)
Modifiche alle 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 lunga esecuzione in parallelo. Inoltre,WorkManager
gestisce 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
Viene rilasciato androidx.work:work-*:2.3.0-beta01
. La versione 2.3.0-beta01 contiene questi commit.
Nuove funzionalità
- È stata aggiunta una nuova regola lint che impedisce errori dello sviluppatore dovuti a un'implementazione errata di
androidx.work.Configuration.Provider
durante l'uso dell'inizializzazione on demand. aosp/1164559
Versione 2.3.0-alpha03
23 ottobre 2019
Viene rilasciato androidx.work:work-*:2.3.0-alpha03
. La versione 2.3.0-alpha03 contiene questi commit.
Nuove funzionalità
- È stata aggiunta l'API
WorkManager.createCancelPendingIntent()
che semplifica l'annullamento diWorkRequest
senza dover registrare un altro componente inAndroidManifest.xml
. Questa API semplifica l'annullamento diWorkRequest
daNotification
. Prevediamo che questo sia abbinato alle nuove API in primo piano nella versione 2.3.0. - WorkManager ora dipende dalla versione stabile di
androidx.room:*:2.2.0
.
Modifiche alle API
- Il nome
ForegroundInfo.getNotificationType()
è stato rinominato inForegroundInfo.getForegroundServiceType()
per una maggiore coerenza con le API della 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 per 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 operazioni lunghe o importanti che devono essere mantenute attive dal sistema operativo. Per ulteriori informazioni, visita il sito
ListenableWorker#setForegroundAsync()
(oCoroutineWorker#setForeground()
per Kotlin). (aosp/1133636)
Modifiche alle API
- L'API
containsKey
inData
è stata rinominata inhasKeyWithValueOfType
. Anche il metodo di estensione corrispondente nella libreriaktx
è stato rinominato. (b/141916545)
Correzioni di bug
- Le pianificazioni di WorkManager funzionano in modo giusto 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).
- Ora
Data
ha unatoString()
rappresentazione molto più utile. (b/140945323) Data
ora ha un metodoequals()
migliore. Supporta anchedeepEquals
per i tipiArray
. (b/140922528)- WorkManager ora archivia il proprio database interno e i file delle preferenze in una directory senza backup. (b/114808216)
Versione 2.3.0-alpha01
22 agosto 2019
Viene rilasciato androidx.work:work-*:2.3.September 5, 20190-alpha01
. I commit inclusi in questa versione sono disponibili qui.
Nuove funzionalità
- Ora i
ListenableWorker
possono impostare l'avanzamento tramite l'APIsetProgressAsync()
. Inoltre, è stata aggiunta un'APIsetProgress
suspend
-ing corrispondente inCoroutineWorker
e unsetProgress
inRxWorker
che restituisce unSingle<Void>
. Con queste nuove API i worker possono trasmettere informazioni sull'avanzamento tramiteWorkInfo
, che ha un'APIgetProgress
corrispondente. (b/79481554) Data
ha un'APIcontainsKey()
che può essere utilizzata per convalidare i dati di input neiWorker
che hanno chiavi del tipo previsto. (b/117136838)- Ora è possibile serializzare
Data
utilizzandoData.toByteArray()
eData.fromByteArray()
. Tieni presente che non esistono garanzie di controllo delle versioni conData
, quindi non mantenerlo o utilizzarlo per IPC tra le applicazioni. Possono essere utilizzate in sicurezza solo tra più processi della stessa applicazione. - Aggiunta la possibilità di specificare un
InputMergerFactory
tramiteConfiguration.setInputMergerFactory
. (b/133273159)
Modifiche alle API
- WorkManager genera un'istanza di
IllegalStateException
seWorkerFactory
restituisce un'istanza diListenableWorker
che è stata richiamata in precedenza. (b/139554406) - Aggiornamenti della documentazione relativi all'annullamento di
ListenableFuture
e al callbackonStopped()
inListenableWorker
. (b/138413671)
Correzioni di bug
- Lo scheduler in corso ora ignora gli elementi
WorkRequest
con il vincoloidle
. Ora queste richieste vengono raccolte daJobScheduler
solo quando il dispositivo è effettivamenteidle
. (aosp/1089779) - Ora
TestScheduler
utilizza correttamente il valoreExecutor
specificato per il proprio esecutore di attività interno nei test. (aosp/1090749)
Versione 2.2.0
Versione 2.2.0
15 agosto 2019
Viene rilasciato androidx.work:work-*:2.2.0
. 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 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 ed efficiente sulle versioni precedenti dell'API. Se la tua app utilizza Google Play Services, aggiungi questa dipendenza al file Gradle per ricevere automaticamente il supporto di GCMNetworkManager. Se Play Services non è disponibile, WorkManager continuerà a utilizzare Avvisi sul gestore sui dispositivi meno recenti.
Versione 2.2.0-rc01
30 luglio 2019
Viene rilasciato androidx.work:work-*:2.2.0-rc01
. 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, genera un
RejectedExecutionException
. (aosp/1092374) (b/138238197). - È stata aggiunta una soluzione alternativa per
NullPointerException
quando si utilizzano le APIJobScheduler
su alcuni dispositivi. (aosp/1091020) (b/138364061), (b/138441699)
Versione 2.2.0-beta02
19 luglio 2019
Viene rilasciato androidx.work:work-*:2.2.0-beta02
. 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
Viene rilasciato androidx.work:work-*:2.2.0-beta01
. 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. Questa è una dipendenza facoltativa che consente un'elaborazione in background più affidabile ed efficiente sulle versioni precedenti dell'API. Se la tua app utilizza Google Play Services, aggiungi questa dipendenza al file Gradle per ricevere automaticamente il supporto di GCMNetworkManager. Se Play Services non è disponibile, WorkManager continuerà a utilizzare Avvisi sul gestore 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
Viene rilasciato androidx.work:work-*:2.1.0
. 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" }
- Aggiunta l'inizializzazione on demand per WorkManager, che creerà WorkManager
solo quando vi 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. - Modifica tutti i riferimenti di
WorkManager.getInstance()
inWorkManager.getInstance(Context)
. Nell'ambito di questo cambiamento, abbiamo deprecatoWorkManager.getInstance()
. È sempre più sicuro chiamare il nuovo Sostituzione diWorkManager.getInstance(Context)
, anche se non stai effettuando l'operazione l'inizializzazione on demand.
- I ritardi iniziali sono ora supportati da
PeriodicWorkRequest
. Puoi utilizzare losetInitialDelay
metodo suPeriodicWorkRequest.Builder
per impostare un'iniziale in ritardo. B/111404867 - È stata aggiunta la possibilità di delegare a uno o più
WorkerFactory
registrati utilizzandoDelegatingWorkerFactory
. B/131435993 - Aggiunta la possibilità di personalizzare il valore
Executor
utilizzato da WorkManager per tutta la sua tenuta contabile interna tramiteConfiguration.Builder.setTaskExecutor
. - Aggiunta la possibilità di creare unità testabili
Worker
eListenableWorker
utilizzandoTestWorkerBuilder
eTestListenableWorkerBuilder
nelwork-testing
artefatto.- Tieni presente che
work-testing
ora estrae Kotlin come dipendenza e include diverse estensioni Kotlin per impostazione predefinita.
- Tieni presente che
- Conteggio tentativi di esecuzione aggiunto a
WorkInfo
. B/127290461 - Ora i tipi
Data
possono archiviare e recuperare byte e array di byte. Ciò NON modifica la dimensione massima diData
oggetti. - WorkManager ora dipende da
Room 2.1.0
, che dovrebbe risolvere alcuni problemi relativi al database.
Versione 2.1.0-rc01
27 giugno 2019
Viene rilasciato androidx.work:work-*:2.1.0-rc01
. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
- È stato corretto 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
Viene rilasciato androidx.work:work-*:2.1.0-beta02
. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
TestListenableWorkerBuilder
ora utilizza ilWorkerFactory
corretto durante la creazione delle istanze diListenableWorker
. B/135275844- È stato corretto un bug che causava variazioni nelle finestre di esecuzione per
WorkRequest
secondi a causa della morte 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
- WorkManager ora dipende da
Room 2.1.0
, che dovrebbe risolvere alcuni problemi relativi al database. - Sono stati rimossi alcuni I/O del disco di avvio sul thread principale.
- È stato corretto un potenziale deadlock nel monitoraggio dei vincoli. B/134361006
- Lavori non validi annullati preventivamente e 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
Viene rilasciato androidx.work:*:2.1.0-alpha03
.
Correzioni di bug
- Documentazione migliorata per i
PeriodicWorkRequest
. - Ora
WorkManagerTestInitHelper
utilizza l'esecutore in background corretto per i test. - Correzioni dei problemi SQLite nella gestione di transazioni di grandi dimensioni su alcuni dispositivi. (b/130182503)
- Le dipendenze di WorkManager sono ora più granulari. (b/133169148).
- Risolvi i bug specifici dell'OEM nell'implementazione di
JobScheduler
durante la pianificazione dei processi tramite 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 alle API
I ritardi iniziali sono ora supportati da
PeriodicWorkRequest
. Puoi utilizzare losetInitialDelay
metodo suPeriodicWorkRequest.Builder
per impostare un'iniziale in ritardo. B/111404867È stata aggiunta la possibilità di delegare a uno o più
WorkerFactory
registrati utilizzandoDelegatingWorkerFactory
. B/131435993Aggiunta la possibilità di personalizzare il valore
Executor
utilizzato da WorkManager per tutta la sua tenuta contabile interna tramiteConfiguration.Builder.setTaskExecutor
.È stata migliorata la documentazione relativa a
WorkRequest.keepResultsForAtLeast
(b/130638001), inizializzazione on demand ePeriodicWorkRequest.Builder
(b/131711394).
Versione 2.1.0-alpha01
24 aprile 2019
Viene rilasciato WorkManager 2.1.0-alpha01. Questa versione contiene diverse nuove API. Tieni presente che a partire da questa versione, ci saranno nuove funzionalità che non verrà riportato nella release 1.x. Ti consigliamo di passare alla versione 2.x.
Modifiche alle API
- Aggiunta l'inizializzazione on demand per WorkManager, che creerà WorkManager
solo quando vi 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. - Modifica tutti i riferimenti di
WorkManager.getInstance()
inWorkManager.getInstance(Context)
. Nell'ambito di questo cambiamento, abbiamo deprecatoWorkManager.getInstance()
. È sempre più sicuro chiamare il nuovo Sostituzione diWorkManager.getInstance(Context)
, anche se non stai effettuando l'operazione l'inizializzazione on demand.
- Aggiunta la possibilità di creare unità testabili
Worker
eListenableWorker
utilizzandoTestWorkerBuilder
eTestListenableWorkerBuilder
nelwork-testing
artefatto.- Tieni presente che
work-testing
ora estrae Kotlin come dipendenza, ma anche include diverse estensioni Kotlin per impostazione predefinita.
- Tieni presente che
- Conteggio tentativi di esecuzione aggiunto a
WorkInfo
. B/127290461 - Ora i tipi
Data
possono archiviare e recuperare byte e array di byte. Ciò NON modifica la dimensione massima diData
oggetti. CoroutineWorker.coroutineContext
deprecato. Questo campo non era corretto digitato comeCoroutineDispatcher
; non dovresti più averne bisogno perché puoi andare il valore desiderato di coroutineContext nel corpo della funzione di sospensione.RxWorker.createWork()
eRxWorker.getBackgroundScheduler()
sono ora annotato con@NonNull
tipi restituiti.
Versione 2.0.1
Versione 2.0.1
9 aprile 2019
Viene rilasciato WorkManager 2.0.1. 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 utenti della versione precedente 1.x, alcune di queste modifiche sono visibili anche 1.0.1-rc01.
Correzioni di bug
- Ora i test robotici funzionano correttamente con WorkManager. B/122553577
- È stato risolto un arresto anomalo di un caso limite con il monitoraggio dei vincoli che non viene ripulito le API pre-JobScheduler. B/129226383
- È stato risolto un problema di tipo
StackOverflowError
che gestiva lunghe catene di lavoro. b/129091233 - Documentazione aggiornata per
PeriodicWorkRequest
per indicare che il tempo flessibile è non supportato sull'API 23. - Sono stati corretti alcuni link inaccessibili nella documentazione di Kotlin.
Versione 2.0.0
Versione 2.0.0
20 marzo 2019
Viene rilasciato WorkManager 2.0.0. Questa versione è identica alla 2.0.0-rc01 ed è la versione AndroidX 1.0.0 stabile con dipendenze AndroidX. I nostri suggerimenti che hanno come target questa versione anziché le versioni 1.x precedenti. Tutti attivi per gli sviluppatori target 2.x e 1.x riceverà solo correzioni di bug critici per un per un periodo di tempo limitato.
Versione 2.0.0-rc01
7 marzo 2019
Viene rilasciato WorkManager 2.0.0-rc01. Questa versione è identica alla versione stabile 1.0.0 ma che ha dipendenze AndroidX. Quando il punteggio raggiunge la versione stabile 2.0.0, questa versione e le versioni precedenti 1.x riceveranno solo alcuni correzioni di bug. Tutto lo sviluppo attivo avrà come target 2.x.
Dipendenze precedenti ad AndroidX
Documenti di riferimento: Java
Alla moda
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 rilasciato WorkManager 1.0.1. Questa release è identica a 1.0.1-rc01.
Tieni presente che consigliamo vivamente gli utenti a eseguire l'aggiornamento a WorkManager 2.x, poiché ci saranno pochissimi aggiornamenti al ramo 1.x in futuro. Le nuove API né essere rilasciato per la libreria 1.x.
Versione 1.0.1-rc01
2 aprile 2019
Viene rilasciato WorkManager 1.0.1-rc01. Questa versione contiene alcune correzioni di bug.
Correzioni di bug
- Ora i test robotici funzionano correttamente con WorkManager. B/122553577
- È stato risolto un arresto anomalo di un caso limite con il monitoraggio dei vincoli che non viene ripulito le API pre-JobScheduler. B/129226383
- È stato risolto un problema di tipo
StackOverflowError
che gestiva 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 è identico a 1.0.0-rc02.
Versione 1.0.0-rc02
21 febbraio 2019
Questa è la seconda release candidata per la release stabile 1.0.0 di WorkManager. Questa release contiene due correzioni di bug.
Correzioni di bug
Ora gli elementi
Worker
vengono pianificati correttamente dopo un arresto anomalo dell'applicazione. b/124546316Gli elementi
Worker
che generano unException
deselezionato ora sono contrassegnati correttamente comeFAILED
e il processo dell'app non verrà più arrestato in modo anomalo.
Versione 1.0.0-rc01
14 febbraio 2019
Questa è una release candidata per la release stabile 1.0.0 di WorkManager. Questa release contiene una correzione di bug.
Correzioni di bug
- L'implementazione basata su Avvisi ora rispetta correttamente
flex
finestre per PeriodicWorkRequests. b/124274584
Versione 1.0.0-beta05
6 febbraio 2019
Questa release contiene alcune correzioni di bug.
Correzioni di bug
- Risolto il problema di utilizzo di
JobScheduler.getPendingJob(...)
nell'API 23. b/123893059 - Risolto il problema di
NullPointerException
sui dispositivi con Android 5.1 (livello API 22) o inferiore. b/123835104
Versione 1.0.0-beta04
4 febbraio 2019
Questa release contiene alcune correzioni di bug.
Correzioni di bug
- Pianificazione di PeriodicWork migliorata per l'implementazione basata su SpeakManager.
- Risolto il problema per cui WorkManager non riusciva a tenere traccia dei vincoli in modo corretto quando utilizzando l'implementazione basata su allarme. B/123379508
- Risolto il caso in cui WorkManager non riusciva a ritentare il lavoro alla fine del processo quando utilizzando l'implementazione basata su allarme. B/123329850
- È stato risolto un problema che causava la perdita di wakelock di WorkManager durante l'utilizzo del Implementazione basata su Sistema di allarme.
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 la mancata esecuzione del lavoro correttamente in alcune situazioni. b/123211993 - È stato risolto un caso in cui il lavoro non rispettava correttamente i tempi di backoff. B/122881597
- Risolto il problema di
ConcurrentModificationException
sui dispositivi con Android 5.1 (API) o) o inferiore. Questa è una continuazione della correzione in1.0.0-beta02
. B/121345393 - È stato aggiunto
exported=false
per alcuni componenti mancanti nel file manifest questa annotazione. - Sono incluse informazioni su come WorkManager interagisce con il sistema operativo nella a livello di pacchetto.
Versione 1.0.0-beta02
15 gennaio 2019
Questa release contiene alcune correzioni di bug.
Correzioni di bug
- Corretto un caso limite per cui il lavoro periodico poteva essere eseguito più di una volta per intervallo sui dispositivi con Android 6.0 (livello API 23). B/121998363
- Risolto il problema di
ConcurrentModificationException
sui dispositivi con Android 5.1 (API) livello 22) o inferiore. b/121345393 - È stata corretta l'esecuzione errata del lavoro quando non vengono soddisfatti vincoli 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 gestire le potenziali condizioni di gara tra più istanze
di
LiveData
utilizzati da WorkManager. - Spostata per utilizzare la dipendenza
Room
1.1.1
anziché1.1.1-rc01
. questi elementi sono identiche. b/122578011
Versione 1.0.0-beta01
19 dicembre 2018
Questa release non contiene modifiche all'API; in futuro, si prevede che WorkManager manterrà la stabilità dell'API fino alla prossima versione, a meno che non ci sia un problema critico. Questa release contiene alcune correzioni di bug.
Correzioni di bug
- Gli elementi secondari che sono stati annullati in precedenza e che sono stati completati con il lavoro del genitore non verranno più eseguiti. B/120811767
- Classi di logging correttamente inizializzate (visualizzate principalmente durante i test).
Versione 1.0.0-alpha13
12 dicembre 2018
Questa release contiene una modifica di piccola entità all'API che sarà utile per alcuni utenti Kotlin.
Modifiche alle API
androidx.work.Result
è stato spostato in una classe interna diListenableWorker
. In questo modo si evitano conflitti di refactoring con la classeResult
di primo livello di Kotlin. Si tratta di una modifica API che provoca un errore. b/120564418
Modifiche che interessano le API
androidx.work.Result
è stato spostato in una classe interna diListenableWorker
.
Versione 1.0.0-alpha12
5 dicembre 2018
Questa release contiene alcune modifiche che provocano errori nell'API; consulta la sezione Violazioni delle modifiche all'API di seguito. È probabile che questa versione venga rilasciata come prima beta. alpha12
contiene anche ampi aggiornamenti della documentazione.
Modifiche alle API
- Un nuovo artefatto,
work-rxjava2
, introduceRxWorker
. Questo è unListenableWorker
che prevede unSingle<Payload>
. - Il supporto per Firebase JobDispatcher è stato rimosso a causa del suo imminente ritiro. Ciò significa che l'elemento
work-firebase
non verrà più aggiornato man mano che si avvia la versione beta. Cercheremo di aggiungere un'alternativa in futuro. - Combinazione di
Payload
inResult
.Result
è ora una "classe protetta" con tre implementazioni concrete, ottenibili tramiteResult.success()
(oResult.success(Data)
),Result.failure()
(oResult.failure(Data)
) eResult.retry()
. I tuoiListenableFuture
ora generanoResult
anzichéPayload
. Gli elementiWorker
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 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. - Aggiunti metodi di estensione Kotlin
Operation.await()
eListenableFuture.await()
. Operation.getException()
rinominato inOperation.getThrowable()
. Si tratta di una modifica che provoca un errore.- La classe e i metodi
ContentUriTriggers
che fanno riferimento non sono più disponibili per il pubblico. Si tratta di una modifica che provoca un errore. - Sono stati rimossi gli altri metodi varargs in
WorkManager
,WorkContinuation
eOneTimeWorkRequest
per semplificare l'API. Per risolvere eventuali problemi di build, puoi aggregare le variabili esistenti conArrays.asList(...)
. Includiamo comunque versioni a singolo argomento di ciascun metodo. Si tratta di una modifica che provoca un errore. - Sono state rimosse
WorkContinuation.combine(OneTimeWorkRequest, *)
varianti. L'API era confusa; 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 ripristino dall'interruzione del processo di un'attività già in esecuzione.
LiveData
osservato tramiteobserveForever
viene monitorato tramite WorkManager. Questo è un backport di una correzione relativa alla libreria delle stanze. B/74477406Data.Builder.build()
ora genera un'eccezione se l'oggetto serializzato supera le dimensioni massime consentite. In precedenza, questo si verificava solo su un thread in background per il quale non potevi gestirlo correttamente.- Ulteriore distinzione tra il lavoro interrotto e quello annullato;
getWorkInfoById()
restituirà unWorkInfo
con iCANCELLED
diState
nei giorniListenableWorker.onStopped()
. - Considera
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 che interessano le API
- Il supporto per Firebase JobDispatcher è stato rimosso a causa del suo imminente ritiro. Ciò significa che l'elemento
work-firebase
non verrà più aggiornato man mano che si avvia la versione beta. Cercheremo di aggiungere un'alternativa in futuro. - Combinazione di
Payload
inResult
.Result
è ora una "classe protetta" con tre implementazioni concrete, ottenibili tramiteResult.success()
(oResult.success(Data)
),Result.failure()
(oResult.failure(Data)
) eResult.retry()
. I tuoiListenableFuture
ora generanoResult
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 e i metodi
ContentUriTriggers
che fanno riferimento non sono più disponibili per il pubblico. - Sono stati rimossi gli altri metodi varargs in
WorkManager
,WorkContinuation
eOneTimeWorkRequest
per semplificare l'API. Per risolvere eventuali problemi di build, puoi aggregare le variabili esistenti conArrays.asList(...)
. Includiamo comunque versioni a singolo argomento di ciascun metodo. - Sono state rimosse
WorkContinuation.combine(OneTimeWorkRequest, *)
varianti. L'API era confusa; i metodicombine
esistenti sono più comprensibili.
Versione 1.0.0-alpha11
8 novembre 2018
Questa release contiene molte modifiche che diventeranno stabili nell'API il giorno beta
.
In questa release sono presenti modifiche all'API che provocano errori; consulta la sezione Violazioni delle modifiche all'API di seguito.
Modifiche alle API
work-runtime-ktx
introduce un nuovoCoroutineWorker
.WorkStatus
è stato rinominato inWorkInfo
. Tutte le varianti del metodogetStatus
corrispondenti sono state rinominate ingetWorkInfo
varianti corrispondenti. Si tratta di una modifica che provoca un errore.ListenableWorker.onStopped()
non accetta più un argomento booleano che rappresenta 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()
hanno restituito array in precedenza. Ora questi metodi restituiscono le raccolte. Si tratta di una modifica che provoca un errore.ListenableWorker.onStartWork()
è stato rinominato inListenableWorker.startWork()
. Si tratta di una modifica che provoca un errore.- Il costruttore per
WorkStatus
non fa più parte dell'API pubblica. Si tratta di una modifica che provoca un errore. Configuration.getMaxJobSchedulerID()
eConfiguration.getMinJobSchedulerID()
sono stati rinominatiConfiguration.getMinJobSchedulerId()
eConfiguration.getMaxJobSchedulerId()
rispettivamente. 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 accodareOneTimeWorkRequest
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ù vararg perWorkRequest
. Si tratta di una modifica che provoca un errore. Utilizza le raccolte. Puoi utilizzareArrays.asList()
per modificare il codice esistente. Lo abbiamo fatto per ridurre la superficie dell'API e il conteggio dei metodi. - Se provi a
initialize
WorkManager
più di una volta per processo, ora verrà restituito unIllegalStateException
. Si tratta di una modifica che provoca un errore.
Correzioni di bug
- Gli elementi
WorkRequest.Builder
nell'elementowork-runtime-ktx
ora utilizzanoListenableWorker
. Correzioni b/117666259 - Assicurati che la prossima 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 di android-workmanager/issues/56
Modifiche che interessano le API
WorkStatus
è stato rinominato inWorkInfo
. Tutte le varianti del metodogetStatus
corrispondenti sono state rinominate ingetWorkInfo
varianti corrispondenti.ListenableWorker.onStopped()
non accetta più un argomento booleano che rappresenta seWorkRequest
è stato annullato.WorkManager
non fa più questa distinzione.- Il pacchetto
androidx.work.test
è stato rinominato in pacchettoandroidx.work.testing
. - I setter su
Constraints
non fanno più parte dell'API pubblica. WorkerParameters.getTriggeredContentUris()
eWorkerParameters.getTriggeredContentAuthorities()
hanno restituito array in precedenza. Ora questi metodi restituiscono le raccolte.ListenableWorker.onStartWork()
è stato rinominato inListenableWorker.startWork()
.- Il costruttore per
WorkStatus
non fa più parte dell'API pubblica. Configuration.getMaxJobSchedulerID()
eConfiguration.getMinJobSchedulerID()
sono stati rinominatiConfiguration.getMinJobSchedulerId()
eConfiguration.getMaxJobSchedulerId()
rispettivamente.- Tutte le varianti dei metodi
enqueue
ecancel
suWorkManager
ora restituiscono un nuovo tipo diOperation
. - Tutte le varianti di
enqueue
non accettano più vararg perWorkRequest
. - Se provi a
initialize
WorkManager
più volte per processo, ora verrà restituito unIllegalStateException
.
Versione 1.0.0-alpha10
11 ottobre 2018
Questa release supporta il lavoro asincrono controllato dagli sviluppatori. In questa release sono presenti modifiche all'API che provocano errori; consulta la sezione Ultime modifiche dell'API di seguito.
Prevediamo che WorkManager sta entrando nelle fasi finali del suo periodo alpha. Prevediamo che l'API sia stabile in versione beta, quindi dedica un po' di tempo all'invio del tuo feedback sul nostro strumento di segnalazione 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. NonBlockingWorker
è stato rinominato inListenableWorker
, che ora è un corso pubblico non nascosto e pronto all'uso.ListenableWorker
fornisce l'accesso a un metodo astratto,ListenableFuture<Payload> onStartWork()
, che viene chiamato sul thread principale. Spetta a te iniziare ed elaborare il lavoro in modo asincrono. Al termine, devi aggiornareListenableFuture
in modo appropriato. Le implementazioni di riferimento degli elementiListenableFuture
sono fornite nel pacchettoFutures
inalpha02
(vedi sotto la sezioneWorkManager
).Worker
estendeListenableWorker
e funziona ancora come prima, con un metodoResult doWork()
astratto.- Riproduzione casuale di alcuni metodi e membri da
Worker
aListenableWorker
. - A breve forniremo implementazioni di riferimento per i
ListenableWorker
che utilizzano coroutine Kotlin (una volta rilasciate le versioni stabili) e RxJava2.
- L'interfaccia
WorkerFactory
e l'implementazione concretaDefaultWorkerFactory
sono state unite in una classe astratta chiamataWorkerFactory
. 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. WorkManager.synchronous()
eWorkContinuation.synchronous()
e tutti i metodi correlati rimossi.ListenableFuture<Void>
aggiunto come tipo restituito di molti metodi nell'API. Si tratta di una modifica API che provoca un errore.- Ora puoi visualizzare e osservare in modo sincrono utilizzando le
ListenableFuture
. Ad esempio,WorkManager.enqueue()
utilizzato per restituirevoid
; ora restituisce unListenableFuture<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 hanno finito. Dovrai comunque concatenare i metodi WorkManager per trovare queste informazioni. - Ignoriamo le chiamate
cancel()
su questi oggetti perché generano confusione e difficili da spiegare (stai annullando l'operazione o il lavoro risultante?) Ciò rientra nel contratto diFuture
. - Per mantenere la parità con i metodi
getStatus*
sincroni, abbiamo fornitoListenableFuture
varianti e abbiamo rinominato quelli esistenti che hanno restituitoLiveData
in modo che abbiano esplicitamente "LiveData" all'interno del nome (ad esempiogetStatusesByIdLiveData(UUID)
). Si tratta di una modifica API che provoca un errore.
- Ora puoi visualizzare e osservare in modo sincrono utilizzando le
Correzioni di bug
- È stato risolto il problema noto di 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 di Gradle. - Sono state aggiunte configurazioni di ProGuard per mantenere il nuovo costruttore
Worker
. b/116296569 - Correggi
NullPointerException
potenziale in una gara in cui il lavoro è statoREPLACE
d. b/116253486 e b/116677275 WorkContinuation.combine()
ora accetta uno o piùWorkContinuation
invece di due o più. B/117266752
Modifiche che interessano le API
- Sono stati rimossi tutti i metodi e le classi
deprecated
in precedenza, in particolare il costruttoreWorker
predefinito. - L'interfaccia
WorkerFactory
e l'implementazione concretaDefaultWorkerFactory
sono state unite in una classe astratta chiamataWorkerFactory
. WorkManager.synchronous()
eWorkContinuation.synchronous()
rimossi.- I metodi
WorkManager.getStatus*()
ora restituisconoListenableFuture
s.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 alternativa temporanea mentre risolviamo il problema in alpha10:
Alla moda
android { packagingOptions { exclude 'META-INF/proguard/androidx-annotations.pro' } }
Kotlin
android { packagingOptions { exclude("META-INF/proguard/androidx-annotations.pro") } }
Correzioni di bug
- Aggiunta di un'altra correzione necessaria per "100 job" . B/115560696
- Sono state aggiunte alcune correzioni per gli errori dei vincoli di chiave esterna dovuti a condizioni di gara. B/114705286
- Chiamate
ConstraintTrackingWorker.onStopped(boolean)
delegate all'entitàWorker
sottostante. B/114125093 - Applica il ritardo minimo di backoff corretto per Firebase JobDispatcher. B/113304626
- Il miglioramento dei thread garantisce l'interno della libreria.
- Correggi il potenziale problema relativo alla deduplicazione interna di
LiveData
.
Modifiche alle API
- Ora puoi creare le tue istanze
Worker
in fase di runtime specificando unWorkerFactory
come parte diWorkManager.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. Usa il nuovo costruttore (Worker(Context, WorkerParameters)
) e chiamasuper(Context, WorkerParameters)
. le versioni future di WorkManager rimuoverà il costruttore predefinito.
- I costruttori predefiniti per
- Abbiamo iniziato a utilizzare internamente il nuovo artefatto
ListenableFuture
(privo di dipendenze di Guava). Introdurremo ListenableFutures nell'API nelle prossime versioni. Questa modifica supporterà la visualizzazione finale diNonBlockingWorker
. - Aggiungi la possibilità di attivare il lavoro a tempo in
TestDriver
tramiteTestDriver.setInitialDelayMet(UUID)
eTestDriver.setPeriodDelayMet(UUID)
. B/113360060
Modifiche che provocano l'interruzione
- I costruttori
Worker
eNonBlockingWorker
predefiniti sono deprecati. Esegui la migrazione al nuovo costruttore appena possibile. Le versioni future rimuoveranno il costruttore predefinito.
Versione 1.0.0-alpha08
27 agosto 2018
Correzioni di bug
- I componenti WorkManager sono esplicitamente etichettati come inconsapevoli ad avvio diretto, in modo che non vengano attivati durante l'avvio diretto. In futuro, forniremo una versione di WorkManager sensibile all'avvio diretto. B/112665532
- È stato risolto un problema per cui il nuovo tentativo non era in esecuzione. B/112604021
- È stato corretto il problema di esecuzione periodica del lavoro non ripetuto (relativo al problema di cui sopra). 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 è di 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 terminato l'esecuzione ora annulla correttamente tutte le copie in sospeso di quel lavoro in altri scheduler. Ciò ha portato al superamento del limite di
JobScheduler
job. b/111569265 - È stato corretto un
ConcurrentModificationException
inConstraintTracker
. B/112272753 - Annotazioni del tipo restituito di
Data.getBooleanArray(String)
eData.getIntArray(String)
modificate in@Nullable
anziché@NonNull
. B/112275229
Modifiche alle API
Worker
ora estende un nuovo corso,NonBlockingWorker
. Questa operazione non influisce sull'utilizzo attuale. In futuro,NonBlockingWorker
diventerà un'entità completamente supportata per le soluzioni di thread 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
- Impedisci il blocco del database durante la pianificazione del lavoro. B/111801342
- Correggere un bug che causava la mancata esecuzione di
PeriodicWork
in base alla programmazione in modalità Sospensione. b/111469837 - Correggi una condizione di gara durante il monitoraggio dei vincoli che causano l'arresto anomalo di
WorkManager
. googlecodelabs/android-workmanager/issues/56 - Crea
WorkRequest
univoci quando utilizziWorkRequest.Builder#build()
. B/111408337 - Attiva l'utilizzo di
RescheduleReceiver
solo quando sono presentiWorkRequest
che lo richiedono. B/111765853
Versione 1.0.0-alpha05
24 luglio 2018
Modifiche alle API
WorkManager.getInstance()
è ora annotato con@NonNull
anziché@Nullable
. Se invece il singleton non viene inizializzato correttamente in caso di inizializzazione manuale, il metodo genera unIllegalStateException
. Si tratta di un che provoca un errore di modifica dell'API.- È stata aggiunta una nuova API,
Configuration.Builder.setMinimumLoggingLevel(int)
, che può controllare il livello di dettaglio di WorkManager. Per impostazione predefinita, WorkManager registraLog.INFO
e versioni successive. - È stata modificata la firma di
Data.getString()
in modo che non utilizzi più un valore predefinito (è implicitamentenull
). Si tratta di una modifica API che provoca un errore. - 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 API che provoca un errore.
Correzioni di bug
- WorkManager non esegue più il lavoro durante i casi noti di backup automatico. Questo potrebbe aver causato un arresto anomalo. B/110564377
- È stata corretta la doppia pianificazione di
PeriodicWorkRequest
s quando si utilizzavaJobScheduler
. B/110798652 - È stato risolto un problema relativo alla mancata esecuzione di
PeriodicWorkRequest
dopo la sospensione del dispositivo. b/111469837 - È stato risolto un problema relativo ai ritardi iniziali durante l'utilizzo di Firebase JobDispatcher. B/111141023
- Sono stati risolti alcuni potenziali problemi di cronometraggio e condizioni di gara.
- Hai liberato correttamente
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 l'interruzione
WorkManager.getInstance()
è ora annotato con@NonNull
anziché@Nullable
.- È stata modificata la firma di
Data.getString()
in modo che non utilizzi più un valore predefinito (è implicitamentenull
). - Alcuni metodi sono stati contrassegnati come necessari solo per uso interno 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 errore ANR durante la ripianificazione di tutti i worker dopo un arresto forzato o un riavvio. B/110507716
- Sono state aggiunte annotazioni con valore nullo a varie API WorkManager. B/110344065
- Registra le eccezioni non rilevate che si verificano durante l'esecuzione del worker. B/109900862
- Migrazioni distruttive dei database consentite nel caso in cui tu decida di eseguire il rollback a una versione precedente di WorkManager. B/74633270
- È stato risolto un arresto anomalo della migrazione in caso di creazione di 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 alla 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
Room
versione1.1.1-rc1
.
Modifiche alle API
- È stata aggiunta
getStatusesSync()
, la versione sincrona diWorkContinuation.getStatuses()
. Worker
ha la possibilità di distinguere tra l'annullamento avviato dall'utente e l'interruzione temporanea richiesta dal sistema operativo.Worker.isStopped()
restituiscetrue
se è stato richiesto un qualsiasi tipo di fermata.Worker.isCancelled()
restituiscetrue
quando l'opera è stata esplicitamente annullata. B/79632247- Aggiungi il supporto per JobParameters#getNetwork() sull'API 28. Questo evento è esposto tramite
Worker.getNetwork()
. - È stato aggiunto
Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit)
in modo da poter applicare forzatamente il numero di job che è possibile inviare aJobScheduler
oAlarmManager
. In questo modo,WorkManager
non potrà utilizzare tutti gli slot disponibili perJobScheduler
. - È stato aggiunto l'elemento
Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId)
, che aiuta a definire un intervallo diJobScheduler
ID job sicuro per l'utilizzo da parte diWorkManager
. b/79996760 Worker.getRunAttemptCount()
restituisce il conteggio delle esecuzioni attuali per un determinatoWorker
. B/79716516WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork)
ti consente di accodarePeriodicWorkRequest
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
Cambiamenti del comportamento
- È stato aggiunto un tag implicito per tutti i valori
WorkRequest
, ovvero il nome completo della classe perWorker
. Consente di rimuovereWorkRequest
senzatag
o quandoid
non è disponibile. b/109572351
Modifiche che provocano l'interruzione
Worker.WorkerResult
rinominato inWorker.Result
.Worker.onStopped
ora include un parametroisCancelled
aggiuntivo, che è impostato sutrue
quandoWorker
è stato esplicitamente annullato.
Versione 1.0.0-alpha02
24 maggio 2018
Correzioni di bug
- È stato corretto un
NullPointerException
suState.isFinished()
. B/79550068 - È stato risolto un problema che causava la riprogrammazione di
Worker
il giornoApplication.onCreate()
. B/79660657 - Risolto un problema per cui potevi pianificare più lavoro di quanto consentito dal sistema operativo. B/79497378
- La pulizia dei wakelock associati a
Worker
è stata spostata nel thread in background. - Ora l'implementazione di
AlarmManager
esegue correttamente la pulizia una volta completati tutti i lavori in sospeso. - Sono state corrette le query SQL di pulizia che hanno interessato 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- Altri javadoc e correzioni nella documentazione. B/79691663
Modifiche alle API
Worker
può reagire all'interruzione. È possibile utilizzareWorker.isStopped()
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 aWorker
. - Sono stati aggiunti
javax.time.Duration
overload per le API che richiedono una combinazione di durata eTimeUnit
. Questa attività è protetta da@RequiresApi(26)
. WorkManager
estensioni sono state spostate dal pacchettoandroidx.work.ktx
al pacchettoandroidx.work
. Le estensioni precedenti sono deprecate e verranno rimosse in una versione futura.- L'API
Configuration.withExecutor()
è deprecata. Usa invece il criterioConfiguration.setExecutor()
.
Versione 1.0.0-alpha01
8 maggio 2018
WorkManager semplifica la pianificazione e l'esecuzione di
il lavoro in background garantito e che tenga conto dei vincoli. Questa release iniziale è 1.0.0-alpha01
.