Responsabile lavoro
Aggiornamento più recente | Release stabile | Candidato per la release | Versione beta | Release alpha |
---|---|---|---|---|
17 aprile 2024 | 2.9.0 | - | - | 2.10.0-alpha02 |
Dichiarazione delle dipendenze
Per aggiungere una dipendenza a 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:
Trendy
dependencies { def work_version = "2.9.0" // (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.0" // (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 ulteriori informazioni sulle dipendenze, consulta Aggiungere dipendenze build.
Feedback
Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se rilevi nuovi problemi o hai idee per migliorare la libreria. Dai un'occhiata ai problemi esistenti in questa libreria prima di crearne una nuova. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.
Per ulteriori informazioni, consulta la documentazione di Issue Tracker.
Versione 2.10
Versione 2.10.0-alpha02
17 aprile 2024
androidx.work:work-*:2.10.0-alpha02
viene rilasciato. La versione 2.10.0-alpha02 contiene questi commit.
Modifiche alle API
- È stata aggiunta la possibilità di emettere intervalli di traccia tramite un elemento
Tracer
configurabile di@RestrictTo
inWorkManager
. (I17d7f, b/260214125). Configuration.workerCoroutineContext
è stato aggiunto a per il controllo del supervisore in cui viene eseguitoCoroutineWorker
. Contribuisce a evitare completamente l'utilizzo diDispatchers.Default
inWorkManager
. (Icd1b7)- Aggiungi gestori delle eccezioni personalizzati per i worker (Ib1b74, b/261190695)
- Ora è possibile creare
OneTimeWorkRequest.Builder
ePeriodicWorkRequest.Builder
conKClass
anziché conClass
:val request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build()
(Ib55f6) - È stata eseguita la migrazione di
WorkManager
corso a Kotlin. Now i metodi che restituisconoLiveData
,ListenableFuture
oFlow
forniscono informazioni corrette sul campo nulla. Potrebbe richiedere modifiche al codice sorgente dei client, nel caso in cui le ipotesi sul valore nulla nel codice non fossero corrette. (If6757)
Versione 2.10.0-alpha01
24 gennaio 2024
androidx.work:work-*:2.10.0-alpha01
viene rilasciato. 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 della possibilità di specificare
NetworkRequest
come vincolo. (Id98a1, b/280634452)
Versione 2.9
Versione 2.9.0
29 novembre 2023
androidx.work:work-*:2.9.0
viene rilasciato. La versione 2.9.0 contiene questi commit.
Modifiche importanti dalla versione 2.8.0
- Osservabilità tramite
Flow
s. Al posto diLiveData
, i progressi del worker ora possono essere osservati tramite Flow tramiteWorkManager.getWorkInfosFlow
e metodi simili. - Ora
WorkManager
fornisce un suggerimento sul motivo per cui un worker è stato precedentemente arrestato. Può essere interrogata da un worker tramite il metodogetStopReason()
o daWorkInfo
tramitegetStopReason()
. - Pianificazione precisa dei worker periodici tramite
setNextScheduleTimeOverride
. Ciò consente il calcolo dinamico del successivo piano di lavoro periodico, che può essere utilizzato per implementare funzionalità avanzate come tempi di aggiornamento adattivi, comportamento personalizzato per i nuovi tentativi o possibilità di eseguire un worker del feed di notizie prima che l'utente si svegli ogni mattina senza cambiamenti. È consigliabile utilizzareExistingPeriodicWorkPolicy.UPDATE
con queste tecniche per evitare di annullare un worker attualmente in esecuzione durante la pianificazione di quello successivo. - Test di WorkManager con i thread corrispondenti alla produzione.
ExecutorsMode.PRESERVE_EXECUTORS
può essere utilizzato ininitializeTestWorkManager
per preservare gli esecutori impostati inConfiguration
e utilizzare il thread principale reale. - Le API di Coroutines come
CoroutineWorker
sono state spostate dall'artefatto aggiuntivo work-runtime-ktx all'esecuzione dell'artefatto principale. Il valore di work-runtime-ktx è ora vuoto.
Modifiche alle API
stopReason
è stato aggiunto aWorkInfo
. RendestopReason
disponibile dopo l'esecuzione del worker. Potrebbe essere utile per generare reportstopReason
in modo fruibile, perché una volta che un lavoratore si arresta, un'app stessa potrebbe cadere molto rapidamente. (I21386)- Consenti l'impostazione di
Clock
tramite configurazione e l'utilizzo della sequenza di esecuzione dei test dei worker. (Ic586e) - Il metodo
getStopReason()
è stato aggiunto aListenableWorker
per fornire un suggerimento sul motivo per cui il worker è stato arrestato. (I07060) - È stato aggiunto
WorkManagerTestInitHelper#closeWorkDatabase()
per evitare l'avviso di Closeguard sulla perdita di risorse. (Ia8d49). - Al momento il costruttore di
WorkInfo
è pubblico, il che può essere utile per i test. (Ia00b6, b/209145335). - Ora
work-runtime-ktx
è vuoto,CoroutineWorker
e altre utilità specifiche di Kotlin sono ora disponibili nell'artefatto principale di runtime. (I71a9a) - Aggiunto il metodo
setNextScheduleTimeOverride
, che consente di impostare in modo accurato gli orari di lavoro periodici (I3b4da) - È stato aggiunto
getNextScheduleTimeMillis
per ottenere le informazioni sulla durata pianificata dell'aggiunta aWorkInfo
. (I797e4). - Le informazioni su ritardo iniziale e periodicità vengono aggiunte a
WorkInfo
. (I52f2f) - Metodo aggiunto per osservare i worker tramite Flows tramite i metodi
getWorkInfosByTagFlow
,getWorkInfoByIdFlow
,getWorkInfosForUniqueWorkFlow
,getWorkInfosFlow
(If122a) - Sono state aggiunte le annotazioni
@RequiresApi(...)
mancanti ai costruttori e alle proprietà diConstraints
. Ora sono allineati con le annotazioni corrispondenti sui setter inConstraints.Builder
esistenti nelle prime versioni diWorkManager
. (I6d7d2). WorkManager
ora ha un limite separato per i worker dell'URI di contenuti per concedere loro slot garantiti inJobScheduler
al fine di evitare aggiornamenti dei contenuti mancanti quando il carico è elevato. Il limite può essere configurato tramiteConfiguration.Builder.setContentUriTriggerWorkersLimit
. (Ic128f)- I vincoli vengono aggiunti a
WorkInfo
. (I162c0).
Versione 2.9.0-rc01
18 ottobre 2023
androidx.work:work-*:2.9.0-rc01
viene rilasciato. La versione 2.9.0-rc01 contiene questi commit.
- Nessuna modifica dall'ultima release beta
Versione 2.9.0-beta01
6 settembre 2023
androidx.work:work-*:2.9.0-beta01
viene rilasciato. La versione 2.9.0-beta01 contiene questi commit.
Modifiche alle API
- Costanti aggiunte per motivi di interruzione restituiti da
WorkInfo.stopReason
eListenableWorker.stopReason
(I0cc00)
Versione 2.9.0-alpha02
26 luglio 2023
androidx.work:work-*:2.9.0-alpha02
viene rilasciato. La versione 2.9.0-alpha02 contiene questi commit.
Nuove funzionalità
- Ora
WorkManager
fornisce un suggerimento sul motivo per cui un worker è stato precedentemente arrestato. Può essere interrogata da un worker tramite il metodogetStopReason()
o daWorkInfo
tramitegetStopReason()
.
Modifiche alle API
stopReason
è stato aggiunto aWorkInfo
. Rende disponibilestopReason
dopo l'esecuzione del worker. Potrebbe essere utile per generare reportstopReason
in modo fruibile, perché una volta arrestato un worker, un'app stessa potrebbe cessare molto rapidamente. (I21386)- Consenti l'impostazione dell'orologio tramite configurazione e l'utilizzo della sequenza di esecuzione dei test dei worker. (Ic586e)
- Il metodo
getStopReason()
è stato aggiunto aListenableWorker
per fornire un suggerimento sul motivo per cui il worker è stato arrestato. (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 risolto i problemi relativi alla testbilità. (Ic2905)
Versione 2.9.0-alpha01
7 giugno 2023
androidx.work:work-*:2.9.0-alpha01
viene rilasciato. La versione 2.9.0-alpha01 contiene questi commit.
Nuove funzionalità
- Osservabilità tramite
Flow
s. Al posto diLiveData
, i progressi del worker ora possono essere osservati tramite Flow tramiteWorkManager.getWorkInfosFlow
e metodi simili. - Pianificazione precisa dei worker periodici tramite
setNextScheduleTimeOverride
. Ciò consente il calcolo dinamico del successivo piano di lavoro periodico, che può essere utilizzato per implementare funzionalità avanzate come tempi di aggiornamento adattivi, comportamento personalizzato per i nuovi tentativi o possibilità di eseguire un worker del feed di notizie prima che l'utente si svegli ogni mattina senza cambiamenti. È consigliabile utilizzareExistingPeriodicWorkPolicy.UPDATE
con queste tecniche per evitare di annullare un worker attualmente in esecuzione durante la pianificazione di quello successivo. - Test di
WorkManager
con thread corrispondenti alla produzione.ExecutorsMode.PRESERVE_EXECUTORS
può essere utilizzato per preservare gli esecutori impostati inConfiguration
e utilizzare il thread principale reale. - Le API delle coroutine come
CoroutineWorker
sono state spostate dall'artefatto aggiuntivowork-runtime-ktx
all'artefatto principalework-runtime
. Ora il campowork-runtime-ktx
è vuoto.
Modifiche alle API
- Il costruttore di
WorkInfo
ora è pubblico. Questo 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'artefattowork-runtime
principale. (I71a9a).- Aggiunto il metodo
setNextScheduleTimeOverride
, che consente di impostare in modo accurato gli orari di lavoro periodici (I3b4da) - Rinominato
getEarliestRunTimeMillis
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 per osservare i worker tramite Flows tramite i metodi
getWorkInfosByTagFlow
,getWorkInfoByIdFlow
,getWorkInfosForUniqueWorkFlow
,getWorkInfosFlow
(If122a) - Sono state aggiunte le annotazioni
@RequiresApi(...)
mancanti ai costruttori e alle proprietà di Vincoli. Ora sono allineati con le annotazioni corrispondenti sui setter inConstraints.Builder
esistenti nelle prime versioni diWorkManager
. (I6d7d2). WorkManager
ora ha un limite separato per i worker dell'URI di contenuti per concedere loro slot garantiti inJobScheduler
al fine di evitare aggiornamenti dei contenuti mancanti quando il carico è elevato. Il limite può essere configurato tramiteConfiguration.Builder.setContentUriTriggerWorkersLimit
. (Ic128f)- I vincoli vengono aggiunti a
WorkInfo
. (I162c0).
Versione 2.8
Versione 2.8.1
22 marzo 2023
androidx.work:work-*:2.8.1
viene rilasciato. La versione 2.8.1 contiene questi commit.
Correzioni di bug
- È stato corretto l'errore ANR in
RescheduleReceiver
, che in precedenza non gestiva correttamente due trasmissioni simultanee. (b/236906724)
Versione 2.8.0
8 febbraio 2023
androidx.work:work-*:2.8.0
viene rilasciato. 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 originale di coda, concatenamento e così via. Consulta il post del blog dettagliato su questa funzionalità e i documenti Java perWorkManager.updateWork
eExistingPeriodicWorkPolicy.UPDATE
per ulteriori dettagli.
Modifiche alle API
WorkManager.updateWork
è stato aggiunto per aggiornare il lavoro mantenendo il tempo di coda e il concatenamento originali.(I9a248, b/219446409)- Membri aggiunti:
ExistingPeriodicWorkPolicy.UPDATE
Queste norme consentono di aggiornare un lavoro periodico in base al nome. È simile alREPLACE
esistente, ma è meno invadente: non annulla un worker se è attualmente in esecuzione e conserva il tempo di coda: il ritardo iniziale e il periodo vengono calcolati in base al tempo di coda originale e non all'ora di aggiornamento. L'APIREPLACE
è stata ritirata per ridurre la confusione traREPLACE
eUPDATE
, con nomi molto simili. Se vuoi ancora mantenere la semantica precedente diREPLACE
, puoi utilizzare il nuovoCANCEL_AND_REENQUEUE
, che è identico aREPLACE
. (I985ed, b/219446409) - È stata aggiunta la possibilità di intercettare le eccezioni di pianificazione che forniscono
Consumer<Throwable>
tramite setSchedulingExceptionHandler) - È stata aggiunta la possibilità di fornire
Consumer<Throwable>
tramite setInitializationExceptionHandler per determinare se si sono verificati problemi durante il tentativo di inizializzare WorkManager. - Gli helper in linea per
OneTimeWorkRequest
ePeriodicWorkRequest
sono stati spostati daandroidx.work:work-runtime-ktx
aandroidx.work:work-runtime
(I0010f, b/209145335) - Sono stati aggiunti i metodi helper
WorkQuery.fromIds
,WorkQuery.fromStates
,WorkQuery.fromUniqueWorkNames
eWorkQuery.fromTags
per creare direttamenteWorkQuery
. (b/199919736) (If48f2, b/199919736) - Elemento
getForegroundInfo
aggiunto alla raccoltaWorker
. (Ic1ead) RxWorker
ora per RxJava 2 e RxJava 3 ha restituitosetForeground
il valoreCompletable
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 comoda per gli utenti di Kotlin. (Idc390, b/137568653) - È stata aggiunta la possibilità di controllare se
WorkManager
è stato inizializzato. È stata inoltre aggiunta una nuova APIgetConfiguration()
per consentire agli sviluppatori delle librerie di recuperare la configurazione con cui è stato inizializzatoWorkManager
. (I6eff3, b/212300336).
Correzioni di bug
- Risolto il problema dello scheduler greedy che impediva l'esecuzione immediata dei worker se sotto carico. (I9686b, b/248111307)
- È stato aggiunto l'elemento
@RequiresPermission
alle API che richiedono la concessione dell'autorizzazionePOST_NOTIFICATIONS
su SDK 33 e versioni successive. (Ie542e, b/238790278). - Propaga gli annullamenti nel
CoroutineScope
inListenableFuture
quando utilizzisuspendCancellableCoroutine
.
Versione 2.8.0-rc01
7 dicembre 2022
androidx.work:work-*:2.8.0-rc01
viene rilasciato. La versione 2.8.0-rc01 contiene questi commit.
Nuove funzionalità
- Nessuna nuova funzionalità in questa release. Si tratta principalmente di un picco di versione
Versione 2.8.0-beta02
9 novembre 2022
androidx.work:work-*:2.8.0-beta02
viene rilasciato. La versione 2.8.0-beta02 contiene questi commit.
Correzioni di bug
- Risolto il metodo
equals
inWorkInfo
, che in precedenza non prendeva in considerazione le informazioni della nuova generazione. (4977cc)
Versione 2.8.0-beta01
5 ottobre 2022
androidx.work:work-*:2.8.0-beta01
viene rilasciato. La versione 2.8.0-beta01 contiene questi commit.
Correzioni di bug
- Risolto il problema dello scheduler greedy che impediva l'esecuzione immediata dei worker se sotto carico. (I9686b, b/248111307)
Versione 2.8.0-alpha04
7 settembre 2022
androidx.work:work-*:2.8.0-alpha04
viene rilasciato. La versione 2.8.0-alpha04 contiene questi commit.
Modifiche 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
. Nota che se il worker è attualmente in esecuzione, con questo metodo è possibile restituire una generazione più recente 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 inizializzazione diWorkManager
. (I061de)
Versione 2.8.0-alpha03
10 agosto 2022
androidx.work:work-*:2.8.0-alpha03
viene rilasciato. La versione 2.8.0-alpha03 contiene questi commit.
Nuove funzionalità
- È stata aggiunta la possibilità di aggiornare
WorkRequests
in modo non invasivo, preservando il tempo di coda originale, concatenamento e così via. ConsultaWorkManager.updateWork
eExistingPeriodicWorkPolicy.UPDATE
per maggiori dettagli.
Modifiche alle API
WorkManager.updateWork
è stato aggiunto per aggiornare il lavoro mantenendo il tempo di coda e il concatenamento originali.(I9a248, b/219446409)- Membri aggiunti:
ExistingPeriodicWorkPolicy.UPDATE
Questa norma consente di aggiornare un lavoro periodico in base al nome. È simile alREPLACE
esistente, ma è meno invadente: non annulla un worker se è attualmente in esecuzione e conserva il tempo di coda: il ritardo iniziale e il periodo vengono calcolati in base al tempo di coda originale e non all'ora di aggiornamento. L'istruzioneREPLACE
è stata ritirata per ridurre la confusione tra nomi molto similiREPLACE
eUPDATE
. Se vuoi ancora mantenere la semantica precedente diREPLACE
, puoi utilizzare il nuovoCANCEL_AND_REENQUEUE
, che è identico aREPLACE
. (I985ed, b/219446409) - Aggiungi la possibilità di intercettare le eccezioni di pianificazione definendo un
SchedulingExceptionHandler
. (I033eb) - Gli helper 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
androidx.work:work-*:2.8.0-alpha02
viene rilasciato. La versione 2.8.0-alpha02 contiene questi commit.
Modifiche alle API
- Ora i vincoli possono essere creati direttamente anziché utilizzare Builder, che è una soluzione comoda per gli utenti di Kotlin. (Idc390, b/137568653)
- È stata aggiunta la possibilità di controllare se
WorkManager
è stato inizializzato. È stata inoltre aggiunta una nuova APIgetConfiguration()
per consentire agli sviluppatori delle librerie di recuperare la configurazione con cui è stato inizializzatoWorkManager
. (I6eff3, b/212300336).
Versione 2.8.0-alpha01
12 gennaio 2022
androidx.work:work-*:2.8.0-alpha01
viene rilasciato. La versione 2.8.0-alpha01 contiene questi commit.
Modifiche alle API
- Sono stati aggiunti i metodi helper
WorkQuery.fromStates
,WorkQuery.fromUniqueWorkNames
,WorkQuery.fromTags
per creare direttamente WorkQuery. (If48f2, b/199919736). - Aggiunge metodi sperimentali BuildCompat per SDK futuri (Iafd82, b/207528937)
- Aggiungi
getForegroundInfo
aWorker
. (Ic1ead) - Sono stati aggiunti i metodi helper
WorkQuery.fromIds
per creare WorkQuery direttamente dagli ID. (Ie5bdf, b/199919736). - Ora RxWorker 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). - Ora RxWorker ha
setForeground
che restituisceCompletable
, che può essere utilizzato al posto disetForegroundInfoAsync
che restituisceListenableFuture
. (I992a3, b/203851459)
Correzioni di bug
- Propaga gli annullamenti nel
CoroutineScope
inListenableFuture
quando utilizzisuspendCancellableCoroutine
. (I77e63).
Versione 2.7
Versione 2.7.1
17 novembre 2021
androidx.work:work-*:2.7.1
viene rilasciato. La versione 2.7.1 contiene questi commit.
Correzioni di bug
- Gli annullamenti in
CoroutineScope
vengono propagati alleListenableFuture
quando si utilizzasuspendCancellableCoroutine
. (I77e63). - Viene generata un'eccezione immediatamente quando le richieste di lavoro in ritardo vengono contrassegnate come accelerate. bef1762
Versione 2.7.0
13 ottobre 2021
androidx.work:work-*:2.7.0
viene rilasciato. La versione 2.7.0 contiene questi commit.
Modifiche importanti dalla versione 2.6.0
WorkManager introduce una nuova API
WorkRequest.Builder.setExpedited(...)
per facilitare le limitazioni dei servizi in primo piano in Android 12.Quando utilizzi
setExpedited(...)
, WorkManager delega i job accelerati in JobScheduler a partire da Android 12, garantendo al contempo la compatibilità con le versioni precedenti nelle versioni precedenti di Android delega a un servizio in primo piano.
Versione 2.7.0-rc01
29 settembre 2021
androidx.work:work-*:2.7.0-rc01
viene rilasciato. La versione 2.7.0-rc01 contiene questi commit.
Questa versione è identica a androidx.work:work-*:2.7.0-beta01
.
Versione 2.7.0-beta01
1° settembre 2021
androidx.work:work-*:2.7.0-beta01
viene rilasciato. La versione 2.7.0-beta01 contiene questi commit.
Nuove funzionalità
- Riduci la contesa SQLite multi-processo durante l'inizializzazione di WorkManager.
Modifiche alle API
- Rimuovi le API di
@ExperimentalExpeditedWork
poiché le API della piattaforma sottostante per Android 12 (S) sono stabili. (aosp/1792806)
Correzioni di bug
- Fornisci un messaggio di errore migliore per i worker accelerati che non implementano
getForegroundInfoAsync()
. (aosp/1809376)
Versione 2.7.0-alpha05
21 luglio 2021
androidx.work:work-*:2.7.0-alpha05
viene rilasciato. La versione 2.7.0-alpha05 contiene questi commit.
Questa release contiene anche correzioni di bug della release WorkManager 2.6.0-beta02
.
Versione 2.7.0-alpha04
2 giugno 2021
androidx.work:work-*:2.7.0-alpha04
viene rilasciato.
Questa release contiene anche le modifiche della 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 dei servizi in primo piano, gli sviluppatori possono utilizzare l'APIListenableWorker.setForegroundAsync()
. - Se viene chiamato
ListenableWorker.setForegroundAsync()
, quando l'app è soggetta a limitazioni dei servizi in primo piano, viene generata l'eccezione ForegroundServiceStartNotAllowedException.
Correzioni di bug
- Quando i lavori rapidi vengono ripianificati, non vengono più accelerati. Diventano un lavoro normale.
Versione 2.7.0-alpha03
21 aprile 2021
androidx.work:work-*:2.7.0-alpha03
viene rilasciato. La versione 2.7.0-alpha03 contiene questi commit.
Nuove funzionalità
Da WorkManager
2.6.0-alpha02
: aggiunge il supporto per i worker che possono essere eseguiti in qualsiasi processo. (Iaf200)Da WorkManager
2.6.0-alpha02
: è stato aggiunto unRemoteCoroutineWorker
, che è un'implementazione diRemoteListenableWorker
che può essere associata 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 dei lavoratori multiprocesso persetProgressAsync()
. (Ib6d08). - Da WorkManager
2.6.0-alpha02
:rendi pubblicoWorkManagerInitializer
in modo che altriandroidx.startup.Initializer
possano utilizzarli come dipendenze. (I5ab11).
Versione 2.7.0-alpha02
10 marzo 2021
androidx.work:work-*:2.7.0-alpha02
viene rilasciato. La versione 2.7.0-alpha02 contiene questi commit.
Correzioni di bug
- Rendi esplicita la mutabilità di
PendingIntent
per correggere un arresto anomalo quando scegli come target Android 12. (b/180884673)
Versione 2.7.0-alpha01
18 febbraio 2021
androidx.work:work-*:2.7.0-alpha01
viene rilasciato. La versione 2.7.0-alpha01 contiene questi commit.
Nuove funzionalità
WorkManager introduce una nuova API
WorkRequest.Builder.setExpedited(...)
per tenere conto delle limitazioni dei servizi in primo piano in Android 12.Le applicazioni non possono più avviare un servizio in primo piano quando sono in background. 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 accelerati.Questa API sostituisce le API
setForegroundAsync(...)
/setForeground(...)
, che ora sono ritirate.Quando utilizzi
setExpedited(...)
, WorkManager delega i job accelerati inJobScheduler
a partire da Android 12, garantendo al contempo la compatibilità con le versioni precedenti di Android delega 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
androidx.work:work-*:2.6.0
viene rilasciato. 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"
ContentProvider
per inizializzare WorkManager, devi effettuare le seguenti operazioni:<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)
È stato aggiunto un
RemoteCoroutineWorker
, che è un'implementazione di RemoteListenableWorker che può essere associata a un processo remoto. (I30578)
Versione 2.6.0-rc01
4 agosto 2021
androidx.work:work-*:2.6.0-rc01
viene rilasciato. 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
androidx.work:work-*:2.6.0-beta02
viene rilasciato. La versione 2.6.0-beta02 contiene questi commit.
Correzioni di bug
- Ora
RemoteWorkManager
si svincola correttamente daRemoteWorkManagerService
, in modo cheRemoteWorkManagerService
possa eseguire correttamente la pulizia. aosp/1730694 RemoteListenableWorker
ora svincola 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 i conflitti di risorse per le app che utilizzano più processi. aosp/1749180, aosp/1761729
Versione 2.6.0-beta01
2 giugno 2021
androidx.work:work-*:2.6.0-beta01
viene rilasciato. La versione 2.6.0-beta01 contiene questi commit.
Questa release contiene alcuni miglioramenti minori alla documentazione. La release è sostanzialmente identica alla versione 2.6.0-alpha02.
Versione 2.6.0-alpha02
21 aprile 2021
androidx.work:work-*:2.6.0-alpha02
viene rilasciato. La versione 2.6.0-alpha02 contiene questi commit.
Nuove funzionalità
Aggiunge il supporto per i worker che possono essere eseguiti in qualsiasi processo. (Iaf200)
È stato aggiunto un
RemoteCoroutineWorker
, che è un'implementazione diRemoteListenableWorker
che può essere associata a un processo remoto. (I30578)
Modifiche alle API
- Aggiunto il supporto per il vincolo di rete
TEMPORARILY_UNMETERED
. (I08d5e). - Supporto dei worker multiprocesso per
setProgressAsync()
. (Ib6d08). - Rendi
WorkManagerInitializer
pubblico in modo che altriandroidx.startup.Initializer
possano usarle come dipendenze. (I5ab11).
Versione 2.6.0-alpha01
24 marzo 2021
androidx.work:work-*:2.6.0-alpha01
viene rilasciato. La versione 2.6.0-alpha01 contiene questi commit.
Nuove funzionalità
WorkManager
ora utilizzaandroidx.startup
per inizializzare WorkManager. In precedenza, questa operazione veniva eseguita daandroidx.work.impl.WorkManagerInitializer
. (aosp/1608813)Se in passato hai utilizzato
tools:node="remove"
ContentProvider
per inizializzare il ciclo di vita del processo, devi effettuare le seguenti operazioni:<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 restituisca il codiceoutputData
di AscoltaableWorker. (Ie51e3).
Correzioni di bug
- Aggiungi una soluzione alternativa per un bug OEM che causa la generazione di un
SecurityException
quando si utilizzano le APIAlarmManager
. (aosp/1587518)
Versione 2.5.0
Versione 2.5.0
27 gennaio 2021
androidx.work:work-*:2.5.0
viene rilasciato. La versione 2.5.0 contiene questi commit.
Importanti modifiche dalla versione 2.4.0
- Un nuovo artefatto
:work:work-multiprocess
per le app che utilizzano più processi. Questo introduce miglioramenti delle prestazioni unificando la pianificazione delle richieste di lavoro a un singolo processo.- Per utilizzare
work-multiprocess
, definisci una dipendenza su:implementation "androidx.work:work-multiprocess:2.5.0"
- Specifica un processo principale utilizzando Configuration.Builder.setDefaultProcessName(String).
- Quando utilizzi
work-multiprocess
, vuoi utilizzare anche RemoteWorkManager per gestire i tuoiWorkRequest
. RemoteWorkManager contatta sempre il processo designato. Lo scheduler in-processo viene eseguito anche 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 automaticamente eliminato a causa di un bug della piattaforma.WorkManager
ora assicura che siano presenti job di supporto per ogniWorkRequest
quandoApplication
viene inizializzato dalla 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 iWorkRequest
vengono monitorati dopo il completamento di unWorkRequest
. La durata era di7
giorni prima. È stato ridotto a1
giorno + durata di keepResultsForAtLeast. (aosp/1419708)TestListenableWorkerBuilder
ora supporta la classe riificata che estendeListenableWorker
per semplificare i test. (aosp/1443299, b/169787349)- La funzionalità di ispezione WorkManager è ora disponibile quando si utilizza Android Studio Arctic Fox.
Versione 2.5.0-rc01
13 gennaio 2021
androidx.work:work-*:2.5.0-rc01
viene rilasciato. La versione 2.5.0-rc01 contiene questi commit.
Correzioni di bug
- Risolto 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) - Risolto 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 consentiva di ignorare
NoSuchElementException
durante il tentativo di svincolo da un processo non più associato. (aosp/1530589) - Migliora
ConstraintTrackingWorker
per interrompere unaListenableWorker
solo se non è già stata arrestata. (aosp/1496844, b/172946965) - Aggiorna le librerie androidx.work per avere come target Java 8 (Ibd2f2)
Versione 2.5.0-beta02
2 dicembre 2020
androidx.work:work-*:2.5.0-beta02
viene rilasciato. La versione 2.5.0-beta02 contiene questi commit.
Correzioni di bug
- È stato corretto un bug in
androidx.work:work-multiprocess
per cui WorkManager bloccava inavvertitamente il thread di chiamata durante il tentativo di associazione al processo designato. (aosp/1475538) - Risolto il bug per cui i
PeriodicWorkRequest
non venivano riconciliati correttamente. (b/172475041, aosp/1489577) - È stata aggiunta una soluzione alternativa per un bug della piattaforma durante l'interruzione del servizio in primo piano quando si utilizzano le API
setForeground*
. (b/170924044, aosp/1489901)
Versione 2.5.0-beta01
28 ottobre 2020
androidx.work:work-*:2.5.0-beta01
viene rilasciato. La versione 2.5.0-beta01 contiene questi commit.
Nuove funzionalità
WorkManager
limita automaticamente il numero diWorkRequest
che possono essere recuperati dallo scheduler in-process. Le richieste vengono ancora eseguite in 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 immediatamente comeENQUEUED
per poterli riprogrammare in un secondo momento. (aosp/1455618, b/170273988)
Versione 2.5.0-alpha03
14 ottobre 2020
androidx.work:work-*:2.5.0-alpha03
viene rilasciato. La versione 2.5.0-alpha03 contiene questi commit.
Modifiche 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 lavori a lunga esecuzione associati a un servizio in primo piano. (b/168502234, aosp/1431331)
Versione 2.5.0-alpha02
16 settembre 2020
androidx.work:work-*:2.5.0-alpha02
viene rilasciato. La versione 2.5.0-alpha02 contiene questi commit.
Nuove funzionalità
- Aggiungi un'API a WorkQuery per poter usare i
id
per eseguire query suiWorkInfo
. (aosp/1412372, b/157335295) - WorkManager supporta meglio le app che utilizzano più processi con un nuovo elemento (
androidx.work:work-multiprocess:*
). Questo nuovo elemento aiuta a risolvere alcuni problemi riscontrati dalle app di grandi dimensioni, tra cui:- In genere, WorkManager deve essere inizializzato in ogni processo dell'app. Questo non è un vantaggio, perché c'è un aumento della contesa SQLite che a sua volta causa altri problemi. WorkManager ora dispone di nuove API che possono essere utilizzate per designare un processo dell'app principale utilizzando
Configuration#setDefaultProcessName(processName)
.processName
è un nome di processo completo che ha il seguente aspetto:packageName:processName
(ad es.com.example:remote
). - Un insieme di nuove API:
RemoteWorkManager
eRemoteWorkContinuation
perenqueue
,cancel
equery
richieste di lavoro. Queste API non includonoLiveData
varianti per evitare contese SQLite su più processi. Tutte le chiamate aenqueue
,cancel
equery
vengono inoltrate al processo dell'appprimary
tramite AIDL e permettono di recuperare linguaListenableFuture
fluente. (aosp/1392657, aosp/1411210, aosp/1412215, aosp/1417713)
- In genere, WorkManager deve essere inizializzato in ogni processo dell'app. Questo non è un vantaggio, perché c'è un aumento della contesa SQLite che a sua volta causa altri problemi. WorkManager ora dispone di nuove API che possono essere utilizzate per designare un processo dell'app principale utilizzando
Modifiche alle API
- Ora WorkManager elimina i
WorkRequest
completati che non hanno dipendenze incomplete in modo più aggressivo. La durata del buffer è cambiata da7
giorni a1
giorno. (aosp/1419708)
Correzioni di bug
- WorkManager ora riconcilia i lavori in modo proattivo in modo che i job
WorkRequest
eJobScheduler
siano sincronizzati quando viene inizializzatoWorkManager
. (aosp/1412794, b/166292069)
Versione 2.5.0-alpha01
19 agosto 2020
androidx.work:work-*:2.5.0-alpha01
viene rilasciato. La versione 2.5.0-alpha01 contiene questi commit.
Nuove funzionalità
- Modifiche alle API interne che ci consentiranno di fornire strumenti migliori con
WorkManager
in futuro. Continua a seguirci per altri aggiornamenti.
Correzioni di bug
- Gestisci i
SecurityException
durante il monitoraggio dello stato della rete su alcuni dispositivi. (aosp/1396969)
Contributi esterni
- Correggi la documentazione per
ArrayCreatingInputMerger
di Zac Sweers (github/43).
Versione 2.4.0
Versione 2.4.0
22 luglio 2020
androidx.work:work-*:2.4.0
viene rilasciato. La versione 2.4.0 contiene questi commit.
Importanti modifiche dalla versione 2.3.0
- Lo scheduler in-process di
WorkManager
s ora è più efficace. In precedenza, l'oggettoScheduler
in-processo considerava solo l'esecuzione di lavori che non sono stati ritardati e i cui vincoli erano soddisfatti. Ora lo scheduler in-processo monitora iWorkRequest
che potrebbero essere eseguiti in futuro, incluse le richieste PeriodicWorkRequest. Inoltre, l'elementoScheduler
in elaborazione non rispetta i limiti di pianificazione (ma è comunque limitato alle dimensioni dell'elementoExecutor
utilizzato da WorkManager). Ciò significa che l'applicazione ora può eseguire molte più richieste di lavoro quando è in primo piano. Per gestire l'esecuzione delle operazioni ritardate in primo piano,WorkManager
introduce anche un nuovo elementoRunnableScheduler
configurabile. (aosp/1185778) - WorkManager ora supporta RxJava 3. Per utilizzare RxJava 3, devi includere la dipendenza seguente:
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 suWorkInfo
in base a una combinazione di più attributi. Per ulteriori informazioni, vediWorkQuery.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>"
Questo 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)Puoi aggiungere un elemento
RunnableScheduler
personalizzato per monitorare le richieste di lavoro da eseguire in futuro. Viene utilizzato dallo scheduler in-process. (aosp/1203944).Aggiungi il supporto per l'aggiunta dinamica di fabbriche a cui delegare, quando utilizzi un
DelegatingWorkerFactory
. (b/156289105, aosp/1309745)Allinea il monitoraggio dei vincoli
BATTERY_NOT_LOW
in modo più preciso alla piattaforma. (aosp/1312583)Lo scheduler in-process ora utilizza API migliori per determinare il nome del processo. Questa funzionalità è utile per supportare meglio le app che utilizzano processi multipli. (aosp/1324732)
Nuove regole lint che applicano:
- Uso del
foregroundServiceType
corretto quando si utilizzano le APIsetForegroundAsync()
. (b/147873061, aosp/1215915) - Specificare gli ID JobScheduler che WorkManager deve utilizzare quando si utilizzano direttamente le API JobService. aosp/1223567
- È stata aggiunta una nuova regola lint che garantisce che le
ListenableWorker
implementazioni siano orapublic
quando si utilizza il valore predefinitoWorkerFactory
. (aosp/1291262)
- Uso del
Le chiamate al numero
setForegroundAsync()
che non vengono completate prima del completamento di unaListenableWorker
verranno ora segnalate tramiteIllegalStateException
sulListenableFuture
restituito. (aosp/1262743)Correggi un bug per cui
ForegroundService
non viene interrotto dopo l'interruzione di unWorker
in primo piano. (b/155579898, aosp/1302153)Correggi un bug per cui
WorkManager
tenta di eseguire più istanze di unWorker
associato a un servizio in primo piano (b/156310133, aosp/1309853)
Versione 2.4.0-rc01
24 giugno 2020
androidx.work:work-*:2.4.0-rc01
viene rilasciato. La versione 2.4.0-rc01 contiene questi commit.
Correzioni di bug
- Lo scheduler in-process ora utilizza API migliori per determinare il nome del processo. Questa funzionalità è utile per supportare meglio le app che utilizzano processi multipli. (aosp/1324732)
Versione 2.4.0-beta01
20 maggio 2020
Vengono rilasciate le versioni 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
- Correggi un bug per cui
ForegroundService
non viene interrotto dopo l'interruzione di unWorker
in primo piano. (b/155579898, aosp/1302153) - Correggi un bug per cui
WorkManager
tenta di eseguire più istanze di unWorker
associato a un servizio in primo piano (b/156310133, aosp/1309853) - Aggiungi il supporto per l'aggiunta dinamica di fabbriche a cui delegare, quando utilizzi un
DelegatingWorkerFactory
. (b/156289105, aosp/1309745) - Allinea il monitoraggio dei vincoli
BATTERY_NOT_LOW
in modo più preciso alla piattaforma. (aosp/1312583)
Versione 2.4.0-alpha03
29 aprile 2020
androidx.work:work-*:2.4.0-alpha03
viene rilasciato. La versione 2.4.0-alpha03 contiene questi commit.
Nuove funzionalità
- WorkManager ora supporta RxJava 3. Per utilizzare RxJava 3, devi includere la dipendenza seguente:
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 si utilizza il valore predefinitoWorkerFactory
. (aosp/1291262)
Modifiche alle API
- Se chiami
setProgressAsync()
al termine dell'esecuzione di unListenableWorker
, ora verrà segnalato unException
tramiteListenableFuture
. (aosp/1285494) WorkQuery.Builder
ora è contrassegnato comefinal
. (aosp/1275037)- I metodi di fabbrica di
WorkQuery.Builder
withStates
,withTags
ewithUniqueWorkNames
sono stati rinominati rispettivamentefromStates
,fromTags
efromUniqueWorkNames
. (aosp/1280287)
Correzioni di bug
- Ignora
SecurityException
durante il monitoraggio dello stato della rete di un dispositivo. (b/153246136, aosp/1280813)
Versione 2.4.0-alpha02
1° aprile 2020
androidx.work:work-*:2.4.0-alpha02
viene rilasciato. La versione 2.4.0-alpha02 contiene questi commit.
Nuove funzionalità
- È stata aggiunta una nuova regola lint che avvisa quando
WorkRequest
richiede siaConstraints.setRequiresCharging(...)
siaConstraints.setRequiresDeviceIdle(...)
. Alcuni dispositivi non si ricaricano mai e sono inattivi contemporaneamente. Di conseguenza, queste richieste vengono eseguite con minore frequenza 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 suWorkInfo
in base a una combinazione di più attributi. Per ulteriori informazioni, vediWorkQuery.Builder withStates(...)
,WorkQuery.Builder withTags(...)
oWorkQuery.Builder withUniqueWorkNames(...)
. (aosp/1253230, b/143847546)Le chiamate al numero
setForegroundAsync()
che non vengono completate prima del completamento di unaListenableWorker
verranno ora segnalate tramiteIllegalStateException
sulListenableFuture
restituito. (aosp/1262743)
Correzioni di bug
- È stata corretta la regola lint che verifica la presenza di durate dell'intervallo non valide per
PeriodicWorkRequest
s. (aosp/1254846, b/152606442)
Versione 2.4.0-alpha01
4 marzo 2020
androidx.work:work-*:2.4.0-alpha01
viene rilasciato. La versione 2.4.0-alpha01 contiene questi commit.
Nuove funzionalità
Lo scheduler in-process di
WorkManager
s ora è più efficace. In precedenza, lo scheduler in-process considerava solo l'esecuzione di lavori non ritardati e i cui vincoli erano soddisfatti. Ora, lo scheduler in-processo monitora iWorkRequest
che potrebbero essere eseguiti in futuro, inclusi iPeriodicWorkRequest
. Inoltre, lo scheduler in-process non rispetta i limiti di pianificazione (ma è comunque limitato alle dimensioni dell'elementoExecutor
utilizzato da WorkManager). Ciò significa che l'applicazione ora può eseguire molti piùWorkRequest
quando è in primo piano. (aosp/1185778)È stata aggiunta la possibilità di richiedere informazioni diagnostiche da WorkManager utilizzando
adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
. Questo 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:
- Uso 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).
- Uso del
Modifiche alle API
Aggiungi
ExistingWorkPolicy.APPEND_OR_REPLACE
, che è simile aAPPEND
, ma sostituisce una catena che ha prerequisiti annullati o non superati. (b/134613984, aosp/1199640)Puoi aggiungere un
RunnableScheduler
personalizzato per monitorare leWorkRequest
da eseguire in futuro. Viene utilizzato dallo scheduler in-process. (aosp/1203944).
Correzioni di bug
- Deprecato
setProgress()
inRxWorker
perché in precedenza ha restituito un tipoSingle<Void>
, che non è possibile. È stata aggiunta una nuova APIsetCompletableProgress()
che restituisce inveceCompletable
e sono state aggiunte nuove regole Lint che consentono di eseguire la migrazione alle nuove API. (b/150080946, aosp/1242665)
Versione 2.3.4
Versione 2.3.4
18 marzo 2020
androidx.work:work-*:2.3.4
viene rilasciato. La versione 2.3.4 contiene questi commit.
Correzioni di bug
- Risolto 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 del lint
IssueRegistry
di WorkManager. Grazie a @ZacSweers di Slack per il contributo. (aosp/1217923)
Versione 2.3.3
Versione 2.3.3
4 marzo 2020
androidx.work:work-*:2.3.3
viene rilasciato. La versione 2.3.3 contiene questi commit.
Correzioni di bug
- Risolto il bug per cui, se un evento
Worker
veniva interrotto, non veniva riprogrammato correttamente. (b/150325687, aosp/1246571)
Versione 2.3.2
Versione 2.3.2
19 febbraio 2020
androidx.work:work-*:2.3.2
vengono rilasciati. La versione 2.3.2 contiene questi commit.
Correzioni di bug
- Risolvi 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).
- Miglioramento del ciclo di vita del servizio in primo piano per la gestione per i worker a lunga esecuzione. (aosp/1226295)
- È stata migliorata la gestione della cancellazione delle notifiche per i worker a lunga esecuzione al momento dell'annullamento. (aosp/1228346).
Versione 2.3.1
Versione 2.3.1
5 febbraio 2020
androidx.work:work-*:2.3.1
viene rilasciato. La versione 2.3.1 contiene questi commit.
Correzioni di bug
- Gestisci meglio il ciclo di vita dei
Notification
per leWorker
a lunga esecuzione che vengono eseguite quando è attivo unService
in primo piano. (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 un
foregroundServiceType
sia specificato inAndroidManifest.xml
quando si utilizzano iforegroundServiceType
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 a lunga esecuzione o importanti tramite
ListenableWorker#setForegroundAsync()
. - Supporto dell'avanzamento dei worker tramite
ListenableWorker#setProgressAsync()
. - WorkManager ora include ulteriori regole di lint all'interno della libreria, consentendo di rilevare tempestivamente i bug.
Versione 2.3.0-rc01
8 gennaio 2020
androidx.work:work-*:2.3.0-rc01
viene rilasciato. 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
androidx.work:work-*:2.3.0-beta02
viene rilasciato. La versione 2.3.0-beta02 contiene questi commit.
Nuove funzionalità
- È stato aggiunto un messaggio di errore migliore per le eccezioni SQLite non recuperabili. (aosp/1185777)
- È stata aggiunta una regola lint che garantisce che il fornitore di contenuti
androidx.work.impl.WorkManagerInitializer
venga rimosso daAndroidManifest.xml
quando si utilizza l'inizializzazione on demand. (aosp/1167007) - È stato aggiunto un avviso lint quando
enqueue()
viene utilizzato perPeriodicWorkRequest
anzichéenqueueUniquePeriodicWork()
. (aosp/1166032).
Modifiche alle API
ForegroundInfo
ora richiede di specificare ilnotificationId
da utilizzare quando si usaListenableWorker.setForegroundAsync()
. Si tratta di una modifica che provoca un errore. Ciò ti consente di eseguire piùWorker
a lunga esecuzione in parallelo.WorkManager
gestisce anche meglio la durata deiNotification
forniti. (b/145473554, aosp/1181208, asop/1181216, asop/1183577)
Correzioni di bug
- Risolto un bug nell'implementazione di AlarmManager che causava la mancata pulizia degli allarmi. (aosp/1156444)
- Risolto un bug per cui un elenco vuoto di
WorkRequest
causava la creazione di una catenaWorkContinuation
errata. (b/142835274, aosp/1157051)
Modifiche delle dipendenze
- WorkManager ora utilizza la stanza 2.2.2.
Versione 2.3.0-beta01
20 novembre 2019
androidx.work:work-*:2.3.0-beta01
viene rilasciato. La versione 2.3.0-beta01 contiene questi commit.
Nuove funzionalità
- È stata aggiunta una nuova regola lint che impedisce gli errori degli sviluppatori dovuti a un'implementazione errata di
androidx.work.Configuration.Provider
quando viene utilizzata l'inizializzazione on demand. aosp/1164559
Versione 2.3.0-alpha03
23 ottobre 2019
androidx.work:work-*:2.3.0-alpha03
viene rilasciato. La versione 2.3.0-alpha03 contiene questi commit.
Nuove funzionalità
- È stata aggiunta l'API
WorkManager.createCancelPendingIntent()
che semplifica l'annullamento diWorkRequest
senza dover registrare un altro componente inAndroidManifest.xml
. Questa API semplifica l'annullamento diWorkRequest
daNotification
. Ci aspettiamo che venga 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
ForegroundInfo.getNotificationType()
è stato rinominato inForegroundInfo.getForegroundServiceType()
per garantire una maggiore coerenza con le API della piattaforma sottostanti. (b/142729893, aosp/1143316)
Correzioni di bug
- Risolto 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
androidx.work:work-*:2.3.0-alpha02
viene rilasciato. La versione 2.3.0-alpha02 contiene questi commit.
Nuove funzionalità
- WorkManager ora supporta l'esecuzione di operazioni a lunga esecuzione o operazioni 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 corretto quando il numero di limiti di pianificazione di
WorkRequest
approcci è in coda. (aosp/1105766). - WorkManager chiama
ListenableWorker#onStopped()
solo se il lavoro non è già stato completato. (b/140055777) - Ora WorkManager rimuove le informazioni sull'avanzamento quando un worker viene interrotto o raggiunge lo stato di terminale. (aosp/1114572)
Data
ora ha una rappresentazionetoString()
molto più utile. (b/140945323)Data
ora ha un metodoequals()
migliore. Supporta anchedeepEquals
per i tipi diArray
. (b/140922528)- WorkManager ora archivia il suo database interno e i file delle preferenze in una directory senza backup. (b/114808216)
Versione 2.3.0-alpha01
22 agosto 2019
androidx.work:work-*:2.3.September 5, 20190-alpha01
viene rilasciato. I commit inclusi in questa versione sono disponibili qui.
Nuove funzionalità
- Gli
ListenableWorker
possono ora impostare l'avanzamento tramite l'APIsetProgressAsync()
. Sono state aggiunte anche un'APIsuspend
-ingsetProgress
corrispondente inCoroutineWorker
e un'APIsetProgress
inRxWorker
che restituisceSingle<Void>
. Con queste nuove API, i worker possono comunicare informazioni sull'avanzamento tramiteWorkInfo
, che ha un'APIgetProgress
corrispondente. (b/79481554) Data
ha un'APIcontainsKey()
che può essere usata per convalidare che i dati di input inWorker
contengano chiavi con il 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 devi mantenerlo o utilizzarlo per IPC tra applicazioni. Possono essere utilizzati solo tra più processi della stessa applicazione. - È stata aggiunta la possibilità di specificare un
InputMergerFactory
tramiteConfiguration.setInputMergerFactory
. (b/133273159)
Modifiche alle API
- WorkManager genererà un'istanza di
IllegalStateException
se unWorkerFactory
restituisce un'istanza diListenableWorker
che è stata richiamata in precedenza. (b/139554406) - La documentazione viene aggiornata sull'annullamento di
ListenableFuture
e sul callbackonStopped()
inListenableWorker
. (b/138413671)
Correzioni di bug
- Lo scheduler in-process ora ignora i
WorkRequest
con il vincoloidle
. Queste richieste vengono ora prese in considerazione daJobScheduler
solo quando il dispositivo è effettivamenteidle
. (aosp/1089779) TestScheduler
ora utilizza correttamente il valoreExecutor
specificato per l'esecutore delle attività interno nei test. (aosp/1090749)
Versione 2.2.0
Versione 2.2.0
15 agosto 2019
androidx.work:work-*:2.2.0
viene rilasciato. I commit inclusi in questa versione sono disponibili qui.
Questa release è identica a androidx.work:work-*:2.2.0-rc01
.
Modifiche importanti dalla versione 2.2.0 alla versione 2.1.0
androidx.work:work-gcm:2.2.0
è un nuovo elemento Maven che supporta l'utilizzo di GCMNetworkManager come scheduler quando Google Play Services è disponibile per livelli API <= 22. Si tratta di una dipendenza facoltativa che consente un'elaborazione in background più affidabile ed efficiente nelle 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 usare AlarmManager sui dispositivi meno recenti.
Versione 2.2.0-rc01
30 luglio 2019
androidx.work:work-*:2.2.0-rc01
viene rilasciato. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
- Risolto un bug nell'implementazione di AlarmManager che causava l'arresto prematura del servizio e, in rari casi, causava un
RejectedExecutionException
. (aosp/1092374) (b/138238197). - È stata aggiunta una soluzione alternativa per un
NullPointerException
quando si utilizzano le APIJobScheduler
su alcuni dispositivi. (aosp/1091020) (b/138364061), (b/138441699)
Versione 2.2.0-beta02
19 luglio 2019
androidx.work:work-*:2.2.0-beta02
viene rilasciato. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
- È stata rimossa la dipendenza Jacoco involontaria introdotta in
2.2.0-beta01
.
Versione 2.2.0-beta01
17 luglio 2019
androidx.work:work-*:2.2.0-beta01
viene rilasciato. I commit inclusi in questa versione sono disponibili qui.
Nuove funzionalità
androidx.work:work-gcm:2.2.0-beta01
è un nuovo elemento Maven che supporta l'utilizzo di GCMNetworkManager come scheduler quando Google Play Services è disponibile per livelli API <= 22. Si tratta di una dipendenza facoltativa che consente un'elaborazione in background più affidabile ed efficiente nelle 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 usare AlarmManager sui dispositivi meno recenti.
Correzioni di bug
- Correzione del problema
IllegalArgumentException
durante il monitoraggio dello stato della rete sui tablet Nvidia Shield K1. (aosp/1010188).
Versione 2.1.0
Versione 2.1.0
11 luglio 2019
androidx.work:work-*:2.1.0
viene rilasciato. Questa release è identica a androidx.work:work-*:2.1.0-rc01
.
Modifiche importanti dalla versione 2.0.1
work-runtime-ktx
ora richiede Java 8. Se riscontri problemi, puoi aggiungere quanto segue abuild.gradle
:kotlinOptions { jvmTarget = "1.8" }
- Aggiunta l'inizializzazione on demand per WorkManager, che creerà WorkManager
solo se vi viene fatto riferimento. b/127497100 Per configurare il progetto per l'inizializzazione on demand:
- Disattiva l'inizializzazione automatica.
- Implementa
Configuration.Provider
sull'oggettoApplication
personalizzato. - Modifica tutti i riferimenti di
WorkManager.getInstance()
inWorkManager.getInstance(Context)
. Nell'ambito di questa modifica, abbiamo ritiratoWorkManager.getInstance()
. È sempre più sicuro chiamare la nuova sostituzione diWorkManager.getInstance(Context)
, anche se non esegui l'inizializzazione on demand.
- Gli
PeriodicWorkRequest
ora supportano i ritardi iniziali. Puoi utilizzare il metodosetInitialDelay
suPeriodicWorkRequest.Builder
per impostare un ritardo iniziale. b/111404867 - È stata aggiunta la possibilità di delegare uno o più
WorkerFactory
registrati utilizzandoDelegatingWorkerFactory
. B/131435993 - È stata aggiunta la possibilità di personalizzare l'oggetto
Executor
utilizzato da WorkManager per tutti i documenti contabili interni tramiteConfiguration.Builder.setTaskExecutor
. - È stata aggiunta la possibilità di creare classi
Worker
eListenableWorker
testabili delle unità utilizzandoTestWorkerBuilder
eTestListenableWorkerBuilder
nell'elementowork-testing
.- Tieni presente che
work-testing
ora recupera Kotlin come dipendenza e include diverse estensioni Kotlin per impostazione predefinita.
- Tieni presente che
- Conteggio dei tentativi di esecuzione aggiunto a
WorkInfo
. B/127290461 - I tipi
Data
ora possono archiviare e recuperare array di byte e byte. Questa operazione NON modifica la dimensione massima degli oggettiData
. - WorkManager ora dipende da
Room 2.1.0
, che dovrebbe risolvere alcuni problemi relativi al database.
Versione 2.1.0-rc01
27 giugno 2019
androidx.work:work-*:2.1.0-rc01
viene rilasciato. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
- Risolto un bug che causava l'arresto anomalo di un'applicazione durante l'esecuzione di job con
JobScheduler
mentre era in corso un backup b/135858602.
Versione 2.1.0-beta02
20 giugno 2019
androidx.work:work-*:2.1.0-beta02
viene rilasciato. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
TestListenableWorkerBuilder
ora utilizza il valoreWorkerFactory
corretto durante la creazione delle istanze diListenableWorker
. B/135275844- Risolto un bug che causava deviazioni nelle finestre di esecuzione per
WorkRequest
a causa della morte del processo. b/135272196
Versione 2.1.0-beta01
13 giugno 2019
androidx.work:work-*:2.1.0-beta01
viene rilasciato. 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 nel thread principale.
- Risolto un potenziale deadlock nel monitoraggio dei vincoli. b/134361006
- Sono stati annullati preventivamente i job non validi attribuiti a WorkManager. b/134058261
- Sono state aggiunte alcune chiamate difensive alle API JobScheduler per il comportamento anomalo dei dispositivi.
Versione 2.1.0-alpha03
5 giugno 2019
androidx.work:*:2.1.0-alpha03
viene rilasciato.
Correzioni di bug
- Documentazione migliorata per
PeriodicWorkRequest
. WorkManagerTestInitHelper
ora utilizza l'esecutore in background corretto per i test.- Correzioni dei problemi di SQLite nella gestione di transazioni di grandi dimensioni su alcuni dispositivi. (b/130182503)
- Le dipendenze di WorkManager sono ora più granulari. (b/133169148).
- Soluzione alternativa ai bug specifici dell'OEM nell'implementazione di
JobScheduler
durante la pianificazione dei job con WorkManager. - Miglioramenti dello scheduler basato su AlarmManager relativi alle durate dei servizi che in precedenza hanno causato arresti anomali rari. (b/133313734)
Versione 2.1.0-alpha02
16 maggio 2019
Rilascio WorkManager 2.1.0-alpha02. Questa versione contiene diverse nuove API.
Modifiche alle API
Gli
PeriodicWorkRequest
ora supportano i ritardi iniziali. Puoi utilizzare il metodosetInitialDelay
suPeriodicWorkRequest.Builder
per impostare un ritardo iniziale. b/111404867È stata aggiunta la possibilità di delegare uno o più
WorkerFactory
registrati utilizzandoDelegatingWorkerFactory
. B/131435993È stata aggiunta la possibilità di personalizzare l'oggetto
Executor
utilizzato da WorkManager per tutti i documenti contabili interni tramiteConfiguration.Builder.setTaskExecutor
.Documentazione migliorata su
WorkRequest.keepResultsForAtLeast
(b/130638001), inizializzazione on demand ePeriodicWorkRequest.Builder
(b/131711394).
Versione 2.1.0-alpha01
24 aprile 2019
Rilascio WorkManager 2.1.0-alpha01. Questa versione contiene diverse nuove API. Tieni presente che, a partire da questa versione, non verrà eseguito il backporting di nuove funzionalità nella release 1.x. Ti consigliamo di passare al formato 2.x.
Modifiche alle API
- Aggiunta l'inizializzazione on demand per WorkManager, che creerà WorkManager
solo se vi viene fatto riferimento. b/127497100 Per configurare il progetto per l'inizializzazione on demand:
- Disattiva l'inizializzazione automatica.
- Implementa
Configuration.Provider
sull'oggettoApplication
personalizzato. - Modifica tutti i riferimenti di
WorkManager.getInstance()
inWorkManager.getInstance(Context)
. Nell'ambito di questa modifica, abbiamo ritiratoWorkManager.getInstance()
. È sempre più sicuro chiamare la nuova sostituzione diWorkManager.getInstance(Context)
, anche se non esegui l'inizializzazione on demand.
- È stata aggiunta la possibilità di creare classi
Worker
eListenableWorker
testabili delle unità utilizzandoTestWorkerBuilder
eTestListenableWorkerBuilder
nell'elementowork-testing
.- Tieni presente che
work-testing
ora recupera Kotlin come dipendenza, ma include anche diverse estensioni Kotlin per impostazione predefinita.
- Tieni presente che
- Conteggio dei tentativi di esecuzione aggiunto a
WorkInfo
. B/127290461 - I tipi
Data
ora possono archiviare e recuperare array di byte e byte. Questa operazione NON modifica la dimensione massima degli oggettiData
. - Deprecato
CoroutineWorker.coroutineContext
. Questo campo è stato digitato erroneamente comeCoroutineDispatcher
; non ti serve più perché puoi accedere direttamente al coroutineContext desiderato nel corpo della funzione di sospensione. RxWorker.createWork()
eRxWorker.getBackgroundScheduler()
sono ora annotati con i tipi restituiti@NonNull
.
Versione 2.0.1
Versione 2.0.1
9 aprile 2019
WorkManager 2.0.1 è rilasciato. Questa release è identica a 2.0.1-rc01.
Versione 2.0.1-rc01
3 aprile 2019
Rilascio WorkManager 2.0.1-rc01. Questa versione contiene alcune correzioni di bug. Per gli utenti della versione legacy 1.x, alcune di queste modifiche vengono visualizzate anche in 1.0.1-rc01.
Correzioni di bug
- I test Robolectric ora funzionano correttamente con WorkManager. b/122553577
- Risolto il problema di arresto anomalo di un caso perimetrale con il monitoraggio dei vincoli che non viene pulito nelle API pre-JobScheduler. b/129226383
- È stato corretto un
StackOverflowError
che riguardava lunghe catene di lavoro. b/129091233 - È stata aggiornata la documentazione per i
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
WorkManager 2.0.0 viene rilasciato. Questa versione è identica alla versione 2.0.0-rc01 ed è la versione AndroidX 1.0.0 stabile con le dipendenze AndroidX. Consigliamo di scegliere come target questa versione anziché le versioni precedenti 1.x. Tutti gli sviluppatori attivi avranno come target le versioni 2.x e 1.x, riceveranno correzioni di bug critiche solo 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 ha dipendenze AndroidX. Quando raggiunge la versione stabile 2.0.0, devi includere questa versione e le versioni 1.x legacy riceveranno solo alcune correzioni di bug critiche. Tutto lo sviluppo attivo avrà come target 2.x.
Dipendenze pre-AndroidX
Documentazione di riferimento: Java
trendy
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
WorkManager 1.0.1 viene rilasciato. Questa release è identica a 1.0.1-rc01.
Tieni presente che consigliamo vivamente agli utenti di eseguire l'aggiornamento a WorkManager 2.x, poiché in futuro verranno apportati pochissimi aggiornamenti al ramo 1.x. Inoltre, non saranno rilasciate nuove API 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
- I test Robolectric ora funzionano correttamente con WorkManager. b/122553577
- Risolto il problema di arresto anomalo di un caso perimetrale con il monitoraggio dei vincoli che non viene pulito nelle API pre-JobScheduler. b/129226383
- È stato corretto un
StackOverflowError
che riguardava lunghe catene di lavoro. b/129091233
Versione 1.0.0
Versione 1.0.0
5 marzo 2019
Questa è la release stabile 1.0.0 di WorkManager. Questa versione di WorkManager è identica alla versione 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
sono pianificati correttamente dopo un arresto anomalo dell'applicazione. b/124546316Gli elementi
Worker
che generano unaException
deselezionata sono ora contrassegnati correttamente comeFAILED
e non hanno più l'arresto anomalo del processo dell'app.
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 AlarmManager ora rispetta correttamente le finestre
flex
per PeriodicWorkRequests. b/124274584
Versione 1.0.0-beta05
6 febbraio 2019
Questa release contiene alcune correzioni di bug.
Correzioni di bug
- Risolto il caso in cui
JobScheduler.getPendingJob(...)
veniva utilizzato nell'API 23. b/123893059 - Risolto il
NullPointerException
sui dispositivi con Android 5.1 (livello API 22) o precedente. b/123835104
Versione 1.0.0-beta04
4 febbraio 2019
Questa release contiene alcune correzioni di bug.
Correzioni di bug
- Migliore pianificazione di PeriodicWork per l'implementazione basata su AlarmManager.
- Risolto il caso in cui WorkManager non riusciva a monitorare correttamente i vincoli quando si utilizzava l'implementazione basata su AlarmManager. b/123379508
- Risolto il caso in cui WorkManager non riusciva a riprovare in caso di decesso del processo quando si utilizzava l'implementazione basata su AlarmManager. b/123329850
- Risolto un caso che causava la perdita di wakelock in WorkManager durante l'utilizzo dell'implementazione basata su AlarmManager.
Versione 1.0.0-beta03
25 gennaio 2019
Questa release contiene alcune correzioni di bug.
Correzioni di bug
- Abbiamo introdotto una regressione
1.0.0-beta02
che causava la mancata esecuzione del lavoro in alcune situazioni. b/123211993 - Risolto il problema per cui il lavoro non rispettava correttamente la tempistica di backoff. b/122881597
- È stato risolto il problema
ConcurrentModificationException
sui dispositivi con Android 5.1 (API o versioni precedenti). Questa è una continuazione della correzione in1.0.0-beta02
. B/121345393 - È stato aggiunto
exported=false
per alcuni componenti del file manifest privi di questa annotazione. - Sono incluse informazioni su come WorkManager interagisce con il sistema operativo nella documentazione a livello di pacchetto.
Versione 1.0.0-beta02
15 gennaio 2019
Questa release contiene alcune correzioni di bug.
Correzioni di bug
- Risolto il caso limite per cui il lavoro periodico poteva essere eseguito più di una volta per intervallo su dispositivi con Android 6.0 (livello API 23). b/121998363
- Risolto il problema
ConcurrentModificationException
sui dispositivi con Android 5.1 (livello API 22) o versioni precedenti. b/121345393 - Correzione dell'esecuzione errata del lavoro quando i vincoli non vengono soddisfatti sui dispositivi con Android 5.1 (livello API 22) o versioni precedenti. b/122578012
- Gestione del completamento del lavoro ottimizzata in alcuni casi limite. b/122358129
- È stata aggiunta una modifica per risolvere le potenziali racecondition tra più istanze di
LiveData
utilizzate da WorkManager. - Spostata per utilizzare la dipendenza
Room
1.1.1
anziché1.1.1-rc01
; queste versioni sono identiche. b/122578011
Versione 1.0.0-beta01
19 dicembre 2018
Questa release non contiene modifiche all'API. In futuro, WorkManager rimarrà stabile nell'API fino alla versione successiva, a meno che non ci siano problemi critici. Questa release contiene alcune correzioni di bug.
Correzioni di bug
- I figli che in precedenza avevano annullato il lavoro principale non potranno più essere eseguiti. b/120811767
- Classi di logging inizializzate correttamente (principalmente visualizzate durante i test).
Versione 1.0.0-alpha13
12 dicembre 2018
Questa release contiene una piccola modifica 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. Questa è una modifica che provoca un errore di API. b/120564418
Interruzione delle modifiche all'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 interessano l'API; consulta la sezione Interruzione delle modifiche all'API di seguito. È probabile che questa versione venga rilasciata come prima versione beta. alpha12
contiene anche numerosi aggiornamenti alla documentazione.
Modifiche alle API
- Un nuovo artefatto,
work-rxjava2
, introduceRxWorker
. Questo è unListenableWorker
che prevedeSingle<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 mentre ci avviciniamo alla versione beta. Cercheremo di aggiungere un'alternativa in futuro. - Combinazione di
Payload
inResult
.Result
è ora una "classe sicura" con tre implementazioni concrete, che puoi ottenere tramiteResult.success()
(oResult.success(Data)
),Result.failure()
(oResult.failure(Data)
) eResult.retry()
. I tuoiListenableFuture
ora restituisconoResult
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 di contenuti con attivazione lenta. b/119919774 WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration)
variante aggiunta. Questo metodo richiede l'API 26.- Aggiunti metodi di estensione Kotlin
Operation.await()
eListenableFuture.await()
. - Rinominato
Operation.getException()
inOperation.getThrowable()
. Si tratta di una modifica che provoca un errore. - La classe
ContentUriTriggers
e i metodi che la fanno riferimento non sono più disponibili per l'uso 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 compilazione, puoi eseguire il wrapping dei vararg esistenti conArrays.asList(...)
. ma includiamo anche versioni con un solo argomento di ciascun metodo. Si tratta di una modifica che provoca un errore. - Sono state rimosse
WorkContinuation.combine(OneTimeWorkRequest, *)
varianti. Stava presentando un'API 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 per il ripristino dopo la morte di un'attività in esecuzione.
LiveData
osservato tramiteobserveForever
viene monitorato tramite WorkManager. Questo è un backport di una correzione della libreria di stanze. B/74477406Data.Builder.build()
ora genera un'eccezione se l'oggetto serializzato supera le sue dimensioni massime. In precedenza, questo accadeva solo su un thread in background in cui non era possibile gestirlo correttamente.- Ulteriore distinzione tra lavori interrotti e annullati;
getWorkInfoById()
restituirà unWorkInfo
con l'State
CANCELLED
nel mese diListenableWorker.onStopped()
. - Tratta
null
Result
come errori inListenableWorker
. B/120362353 - Correzione speculativa per i tablet Shield con l'API 24 che a volte generava un
IllegalArgumentException
. B/119484416
Interruzione delle modifiche all'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 mentre ci avviciniamo alla versione beta. Cercheremo di aggiungere un'alternativa in futuro. - Combinazione di
Payload
inResult
.Result
è ora una "classe sicura" con tre implementazioni concrete, che puoi ottenere tramiteResult.success()
(oResult.success(Data)
),Result.failure()
(oResult.failure(Data)
) eResult.retry()
. I tuoiListenableFuture
ora restituisconoResult
anzichéPayload
. Gli elementiWorker
non hanno metodi getter e setter per l'outputData
. - Aggiunti metodi di estensione Kotlin
Operation.await()
eListenableFuture.await()
. - Rinominato
Operation.getException()
inOperation.getThrowable()
. - La classe
ContentUriTriggers
e i metodi che la fanno riferimento non sono più disponibili per l'uso pubblico. - Sono stati rimossi gli altri metodi varargs in
WorkManager
,WorkContinuation
eOneTimeWorkRequest
per semplificare l'API. Per risolvere eventuali problemi di compilazione, puoi eseguire il wrapping dei vararg esistenti conArrays.asList(...)
. ma includiamo anche versioni con un solo argomento di ciascun metodo. - Sono state rimosse
WorkContinuation.combine(OneTimeWorkRequest, *)
varianti. Stava presentando un'API confusa; i metodicombine
esistenti sono più comprensibili.
Versione 1.0.0-alpha11
8 novembre 2018
Questa release contiene molte modifiche che diventeranno API stabile all'indirizzo beta
.
In questa release sono state apportate modifiche che interessano l'API; consulta la sezione Interruzione delle modifiche all'API di seguito.
Modifiche alle API
work-runtime-ktx
introduce un nuovoCoroutineWorker
.WorkStatus
è stato rinominato inWorkInfo
. Tutte le varianti di metodogetStatus
corrispondenti sono state rinominate con le variantigetWorkInfo
corrispondenti. Si tratta di una modifica che provoca un errore.ListenableWorker.onStopped()
non accetta più ha 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 in precedenza array. Ora questi metodi restituiscono 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 di
WorkStatus
non fa più parte dell'API pubblica. Si tratta di una modifica che provoca un errore. Configuration.getMaxJobSchedulerID()
eConfiguration.getMinJobSchedulerID()
sono stati rinominati rispettivamenteConfiguration.getMinJobSchedulerId()
eConfiguration.getMaxJobSchedulerId()
. Si tratta di una modifica che provoca un errore.- Sono state aggiunte molte annotazioni
@NonNull
all'API pubblica per migliorare l'ergonomia dell'API. - Aggiungi l'API
WorkManager.enqueueUniqueWork()
per accodareOneTimeWorkRequest
univoche senza dover creare unWorkContinuation
. - Tutte le varianti dei metodi
enqueue
ecancel
suWorkManager
ora restituiscono un nuovo tipoOperation
. 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 API e il numero di metodi. - Se si tenta di
initialize
WorkManager
più di una volta per procedura, 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 per
PeriodicWork
sia nel futuro. Correzioni b/118204399 - Rimuovi potenziali I/O del disco quando utilizzi WorkManager all'avvio dell'app. Correzioni b/117796731
- Correggi una condizione di gara in
WorkConstraintsTracker
. Risolve i problemi relativi ad android-workmanager/problemi/56.
Interruzione delle modifiche all'API
WorkStatus
è stato rinominato inWorkInfo
. Tutte le varianti di metodogetStatus
corrispondenti sono state rinominate con le variantigetWorkInfo
corrispondenti.ListenableWorker.onStopped()
non accetta più ha 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 in precedenza array. Ora questi metodi restituiscono raccolte.ListenableWorker.onStartWork()
è stato rinominato inListenableWorker.startWork()
.- Il costruttore di
WorkStatus
non fa più parte dell'API pubblica. Configuration.getMaxJobSchedulerID()
eConfiguration.getMinJobSchedulerID()
sono stati rinominati rispettivamenteConfiguration.getMinJobSchedulerId()
eConfiguration.getMaxJobSchedulerId()
.- Tutte le varianti dei metodi
enqueue
ecancel
suWorkManager
ora restituiscono un nuovo tipoOperation
. - Tutte le varianti di
enqueue
non accettano più vararg perWorkRequest
. - Se si tenta di
initialize
WorkManager
più di una volta per procedura, verrà restituito unIllegalStateException
.
Versione 1.0.0-alpha10
11 ottobre 2018
Questa release supporta il lavoro asincrono controllato dallo sviluppatore. In questa release sono state apportate modifiche che interessano l'API; consulta la sezione Interruzione delle modifiche all'API di seguito.
Prevediamo che WorkManager sta entrando nella fase finale del suo periodo alpha. Prevediamo di essere API stabile in versione beta, quindi ti invitiamo a dedicare un po' di tempo a inviare il tuo feedback sul nostro Issue Tracker.
Modifiche alle API
- Sono stati rimossi tutti i metodi e le classi
deprecated
precedenti, in particolare il costruttoreWorker
predefinito. Questa è una modifica che provoca un errore di API. NonBlockingWorker
rinominata inListenableWorker
, che ora è una classe pubblica mostrata e pronta per l'uso.ListenableWorker
fornisce l'accesso a un metodo astratto,ListenableFuture<Payload> onStartWork()
, che viene chiamato nel thread principale. Spetta a te iniziare ed elaborare il lavoro in modo asincrono. Al termine, dovresti aggiornare correttamenteListenableFuture
. Le implementazioni di riferimento diListenableFuture
sono fornite nel pacchettoFutures
inalpha02
(vedi sotto la sezioneWorkManager
).Worker
estendeListenableWorker
e funziona ancora come prima, con un metodoResult doWork()
astratto.- Alcuni metodi e membri sono stati messi in ordine casuale da
Worker
aListenableWorker
. - Presto forniremo implementazioni di riferimento per
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 denominataWorkerFactory
. L'implementazione garantisce che il comportamento predefinito basato sulla riflessione venga richiamato come ultimo tentativo per qualsiasi istanzaWorkerFactory
creata dall'utente. Si tratta di una modifica che provoca un errore. - Sono stati rimossi
WorkManager.synchronous()
eWorkContinuation.synchronous()
e tutti i metodi correlati. AggiuntoListenableFuture<Void>
come tipo restituito di molti metodi nell'API. Questa è una modifica che provoca un errore di API.- Ora puoi ottenere e osservare in modo sincrono utilizzando gli
ListenableFuture
. Ad esempio,WorkManager.enqueue()
prima veniva restituitovoid
; ora restituisceListenableFuture<Void>
. Puoi chiamareListenableFuture.addListener(Runnable, Executor)
oListenableFuture.get()
per eseguire il codice al termine dell'operazione. - Tieni presente che questi
ListenableFuture
non indicano se l'operazione è riuscita o meno, ma solo se è stata completata. Dovrai comunque collegare i metodi di WorkManager per trovare queste informazioni. - ignoriamo le chiamate
cancel()
per questi oggetti perché sono poco chiari e difficili da ragionare (stai annullando l'operazione o il lavoro risultante?). Ciò rientra nel contratto diFuture
. - Per mantenere la parità con i metodi sincroni
getStatus*
, abbiamo fornitoListenableFuture
varianti e abbiamo rinominato quelle esistenti che hanno restituitoLiveData
in modo che il nome includa esplicitamente "LiveData" (ad esempio,getStatusesByIdLiveData(UUID)
). Questa è una modifica che provoca un errore di utilizzo dell'API.
- Ora puoi ottenere e osservare in modo sincrono utilizzando gli
Correzioni di bug
- Risolto il problema noto della versione alpha09 relativo ai file
androidx-annotations.pro
duplicati. Puoi rimuovere la soluzione alternativa dalle note di rilascio precedenti eliminandoexclude 'META-INF/proguard/androidx-annotations.pro'
dal file gradle. - Sono state aggiunte configurazioni ProGuard per mantenere il nuovo costruttore
Worker
. b/116296569 - Correggi il potenziale
NullPointerException
in una condizione di gara in cui il lavoro è statoREPLACE
d. b/116253486 e b/116677275 WorkContinuation.combine()
ora accetta uno o piùWorkContinuation
anziché due o più. b/117266752
Interruzione delle modifiche all'API
- Sono stati rimossi tutti i metodi e le classi
deprecated
precedenti, in particolare il costruttoreWorker
predefinito. - L'interfaccia
WorkerFactory
e l'implementazione concretaDefaultWorkerFactory
sono state unite in una classe astratta denominataWorkerFactory
. WorkManager.synchronous()
eWorkContinuation.synchronous()
rimosse.- Ora i metodi
WorkManager.getStatus*()
restituisconoListenableFuture
.WorkManager.getStatus*LiveData()
ha restituitoLiveData
.
Versione 1.0.0-alpha09
19 settembre 2018
Problema noto
Se riscontri il seguente problema: "Sono stati trovati più file con 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:
trendy
android { packagingOptions { exclude 'META-INF/proguard/androidx-annotations.pro' } }
Kotlin
android { packagingOptions { exclude("META-INF/proguard/androidx-annotations.pro") } }
Correzioni di bug
- È stata aggiunta un'altra correzione, necessaria per l'errore "100 job". b/115560696
- Sono state aggiunte alcune correzioni per gli errori relativi ai vincoli di chiave esterna dovuti alle condizioni di gara. b/114705286
- Chiamate
ConstraintTrackingWorker.onStopped(boolean)
delegate alWorker
sottostante. B/114125093 - Applica il ritardo minimo di backoff corretto per Firebase JobDispatcher. b/113304626
- L'organizzazione in thread garantisce miglioramenti all'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. Utilizza 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 il nuovo artefatto
ListenableFuture
internamente (privo di dipendenze Guava). Introdurremo l'API AscoltaableFutures nelle prossime versioni. Questa modifica supporterà l'eventuale possibilità di mostrareNonBlockingWorker
. - Aggiungi la possibilità di attivare il lavoro a tempo in
TestDriver
tramiteTestDriver.setInitialDelayMet(UUID)
eTestDriver.setPeriodDelayMet(UUID)
. B/113360060
Modifiche che provocano un errore
- I costruttori predefiniti
Worker
eNonBlockingWorker
sono deprecati. Esegui la migrazione al nuovo costruttore il prima possibile. Le versioni future rimuoveranno il costruttore predefinito.
Versione 1.0.0-alpha08
27 agosto 2018
Correzioni di bug
- Componenti di WorkManager etichettati esplicitamente come inconsapevoli dell'avvio diretto, quindi non si attivano durante l'avvio diretto. In futuro, forniremo una versione di WorkManager che supporta l'avvio diretto. B/112665532
- Risolto il problema per cui il lavoro ripetuto non era in esecuzione. b/112604021
- Risolto il lavoro periodico non eseguito ripetutamente (relativo al problema sopra indicato). b/112859683
- Criteri di backoff rispettati quando il processo dell'app è già in esecuzione.
- Messaggi di eccezione corretti in
Data
per indicare che il limite è di 10 kB. - Valore massimo di
Configuration.setMaxSchedulerLimit(int)
abbassato 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
- Correzione di una potenziale query SQL con limiti negativi che potrebbe restituire un numero illimitato di risultati.
- L'esecuzione del lavoro terminata ora annulla correttamente tutte le copie in sospeso di tale lavoro in altri scheduler. Ciò ha comportato il superamento del limite di
JobScheduler
job. b/111569265 - È stato corretto un
ConcurrentModificationException
inConstraintTracker
. B/112272753 - Le annotazioni del tipo restituito di
Data.getBooleanArray(String)
eData.getIntArray(String)
sono state modificate in@Nullable
anziché@NonNull
. B/112275229
Modifiche alle API
Worker
ora estende una nuova classe,NonBlockingWorker
. Ciò non influisce sull'utilizzo corrente. In futuro,NonBlockingWorker
diventerà un'entità completamente supportata per le soluzioni di threading personalizzate.- Le annotazioni del tipo restituito di
Data.getBooleanArray(String)
eData.getIntArray(String)
sono state modificate in@Nullable
anziché@NonNull
. B/112275229 - Estensioni Kotlin: ritirato
Map.toWorkData()
e aggiunto unworkDataOf(vararg Pair<String, Any?>)
di primo livello per essere più coerente 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
- Correggi un bug che impedisce l'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/issue/56 - Crea
WorkRequest
univoci quando utilizziWorkRequest.Builder#build()
. B/111408337 - Attiva l'utilizzo di
RescheduleReceiver
solo quando sono presentiWorkRequest
che ne hanno bisogno. b/111765853
Versione 1.0.0-alpha05
24 luglio 2018
Modifiche alle API
WorkManager.getInstance()
ora è annotata con@NonNull
anziché@Nullable
. Se invece il singleton non viene inizializzato correttamente in caso di inizializzazione manuale, il metodo genera un valoreIllegalStateException
. Questa è una modifica recente all'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 accetti più un valore predefinito (è implicitamentenull
). Questa è una modifica che provoca un errore dell'API. - Alcuni metodi sono stati contrassegnati come
@hide
solo per l'utilizzo interno. Sono inclusi il costruttoreConstraints
,Data.toByteArray()
eData.fromByteArray(byte[])
. Questa è una modifica che provoca un errore di API.
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
quando si utilizzaJobScheduler
. B/110798652 - Risolto il problema per cui i
PeriodicWorkRequest
non vengono eseguiti correttamente dopo la sospensione del dispositivo. b/111469837 - Risolto il problema di ritardi iniziali durante l'utilizzo di Firebase JobDispatcher. b/111141023
- Risolti alcuni potenziali problemi di gara e tempi di gara.
- Hai liberato correttamente
BroadcastReceiver
di file che non erano più necessari. - Ottimizzazione delle prestazioni di riprogrammazione al riavvio delle app dopo la chiusura forzata.
- È consentito chiamare
TestScheduler.setAllConstraintsMet(UUID)
prima o dopo aver accodato unWorkRequest
specificato. B/111238024
Modifiche che provocano un errore
WorkManager.getInstance()
ora è annotata con@NonNull
anziché@Nullable
.- È stata modificata la firma di
Data.getString()
in modo che non accetti più un valore predefinito (è implicitamentenull
). - Alcuni metodi sono stati contrassegnati come
@hide
solo per l'utilizzo interno. Sono inclusi il costruttoreConstraints
,Data.toByteArray()
eData.fromByteArray(byte[])
.
Versione 1.0.0-alpha04
26 giugno 2018
Correzioni di bug
- Gli elementi
PeriodicWorkRequest
vengono ora ripianificati correttamente quando viene utilizzata l'implementazione basata suAlarmManager
. - Risolto il potenziale errore ANR durante la riprogrammazione di tutti i worker dopo un arresto forzato o un riavvio. b/110507716
- Sono state aggiunte annotazioni con supporto di valori null a varie API WorkManager. b/110344065
- Registra le eccezioni non rilevate che si verificano durante l'esecuzione del worker. b/109900862
- Migrazioni di database distruttive consentite nel caso in cui tu decida di eseguire il rollback a una versione precedente di WorkManager. b/74633270
- Risolto il problema di 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 lo stesso formato di tag implicito personalmente.
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 processi duplicati quando si utilizzava
JobScheduler
dopo il riavvio del dispositivo.I job con trigger di URI dei contenuti ora vengono mantenuti dopo i riavvii. b/80234744
Aggiornamenti della documentazione. b/109827628, b/109758949, b/80230748
È stato risolto il problema di arresto anomalo durante il nuovo accodamento di un
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
è in grado di distinguere tra cancellazione avviata dall'utente e interruzione temporanea richiesta da sistema operativo.Worker.isStopped()
restituiscetrue
se è stato richiesto un tipo di interruzione.Worker.isCancelled()
restituiscetrue
quando l'opera è stata esplicitamente annullata. b/79632247- Aggiungi il supporto per JobParameters#getNetwork() sull'API 28. È esposto tramite
Worker.getNetwork()
. - È stato aggiunto
Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit)
per poter applicare in modo forzato il numero di job che possono essere inviati aJobScheduler
oAlarmManager
. Ciò aiuta a evitare cheWorkManager
utilizzi tutti i tuoi slotJobScheduler
disponibili. - È stato aggiunto
Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId)
, che consente di definire un intervallo di ID jobJobScheduler
sicuri perWorkManager
da usare. b/79996760 Worker.getRunAttemptCount()
restituisce il conteggio delle esecuzioni correnti per un determinatoWorker
. B/79716516WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork)
ti consente di accodarePeriodicWorkRequest
univoche. b/79600647WorkManager.cancelAllWork()
annulla tutti iWorker
. Le librerie che dipendono daWorkManager
possono eseguire query quando questo metodo è stato chiamato per ultimo utilizzandoWorkManager.getLastCancelAllTimeMillis()
per eseguire un'ulteriore pulizia dello stato interno.- È stato aggiunto
WorkManager.pruneWork()
per rimuovere i job completati dal database interno. b/79950952, b/109710758
Modifiche del comportamento
- È stato aggiunto un tag implicito per tutti i
WorkRequest
, che è il nome completo della classeWorker
. In questo modo è possibile rimuovere iWorkRequest
senzatag
o quandoid
non è disponibile. b/109572351
Modifiche che provocano un errore
- Rinominato
Worker.WorkerResult
inWorker.Result
. Worker.onStopped
ora ha 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
il giornoState.isFinished()
. B/79550068 - Risolto un problema che causava la riprogrammazione di
Worker
per il giornoApplication.onCreate()
. B/79660657 - Risolto il problema per cui era possibile pianificare più lavoro di quanto consentito dal sistema operativo. b/79497378
- La pulizia dei wakelock associati ai
Worker
è stata spostata nel thread in background. - Ora l'implementazione
AlarmManager
consente la pulizia corretta quando tutte le operazioni in sospeso sono state completate. - Sono state risolte le query SQL di pulizia che hanno interessato le impostazioni internazionali diverse dall'inglese. b/80065360
- Aggiunto il supporto per
float
inData
. B/79443878 Data.Builder.putAll()
ora restituisce un'istanza diBuilder
. B/79699162- Ulteriori informazioni relative a javadoc e correzioni nella documentazione. b/79691663
Modifiche alle API
Worker
possono reagire all'interruzione. È possibile usareWorker.isStopped()
per verificare seWorker
è stato arrestato.Worker.onStopped()
può essere utilizzato per eseguire operazioni di pulizia leggera.- L'API
Worker.getTags()
restituisce unSet
di tag associati aWorker
. - Sono stati aggiunti
javax.time.Duration
sovraccarichi per le API che richiedono una combinazione di durata eTimeUnit
s. Questa funzionalità è protetta da@RequiresApi(26)
. - Le estensioni
WorkManager
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 del lavoro in background garantito e consapevole di vincoli. Questa release iniziale è 1.0.0-alpha01
.