WorkManager
Ultimo aggiornamento | Release stabile | Candidato per la release | Versione beta | Alpha Release |
---|---|---|---|---|
30 luglio 2025 | 2.10.3 | - | - | - |
Dichiarazione di dipendenze
Per aggiungere una dipendenza da WorkManager, devi aggiungere il repository Maven di Google al tuo progetto:
Aggiungi le dipendenze per gli artefatti che ti servono nel file build.gradle
per
la tua app o il tuo modulo:
Groovy
dependencies { def work_version = "2.10.3" // (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.10.3" // (Java only) implementation("androidx.work:work-runtime:$work_version") // Kotlin + coroutines implementation("androidx.work:work-runtime-ktx:$work_version") // optional - RxJava2 support implementation("androidx.work:work-rxjava2:$work_version") // optional - GCMNetworkManager support implementation("androidx.work:work-gcm:$work_version") // optional - Test helpers androidTestImplementation("androidx.work:work-testing:$work_version") // optional - Multiprocess support implementation("androidx.work:work-multiprocess:$work_version") }
Per informazioni sull'utilizzo delle estensioni Kotlin, consulta la documentazione di KTX.
Per ulteriori informazioni sulle dipendenze, consulta Aggiungere dipendenze di build.
Feedback
Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se riscontri nuovi problemi o hai idee per migliorare questa libreria. Prima di crearne uno nuovo, dai un'occhiata ai problemi esistenti in questa libreria. 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.3
30 luglio 2025
androidx.work:work-*:2.10.3
viene ritirata. La versione 2.10.3 contiene questi commit.
Correzioni di bug
- Risolvi un problema per cui i lavoratori con vincoli di rete identici a quelli di un lavoratore precedente segnalavano che i vincoli non venivano rispettati. (b/427115602).
Versione 2.10.2
18 giugno 2025
androidx.work:work-*:2.10.2
viene ritirata. La versione 2.10.2 contiene questi commit.
Correzioni di bug
- Risolvi un problema durante il salvataggio dei worker con richieste di rete e funzionalità predefinite che causavano la riaggiunta delle funzionalità rimosse, con conseguente malfunzionamento dei worker con vincoli di rete. (b/409716532)
- Correzione di un bug che impediva ai worker con vincoli di rete di essere eseguiti tempestivamente a causa di vincoli non soddisfatti, anche se la rete e le funzionalità erano disponibili. (b/423403088)
Versione 2.10.1
23 aprile 2025
androidx.work:work-*:2.10.1
viene ritirata. La versione 2.10.1 contiene questi commit.
Correzioni di bug
- Ridurre la possibilità che
TooManyRequestsException
venga escluso dalla registrazione diWorkManager
di unNetworkCallback
utilizzato per il monitoraggio dei vincoli. (b/231499040, b309d5).
Versione 2.10.0
30 ottobre 2024
androidx.work:work-*:2.10.0
viene ritirata. La versione 2.10.0 contiene questi commit.
Modifiche significative dalla versione 2.9.1
- Sono stati aggiunti tag di traccia a Jobs da
WorkManager
, il che rende molto più semplice la comprensione di "adb shell dumpsys jobscheduler", poiché conterrà il nome del worker in esecuzione. Vengono aggiunte anche sezioni di traccia intorno alle aree chiave diWorkManager
. Configuration.workerCoroutineContext
è stato aggiunto per il controllo del dispatcher in cui viene eseguitoCoroutineWorker
.- Gli sviluppatori possono specificare
NetworkRequest
come vincolo per un worker tramite il metodoConstraints.setRequiredNetworkRequest
. Ciò consente un controllo più granulare sulla rete che deve essere eseguita da questo worker. WorkManager
La versione 2.10.0 è ora compilata con l'SDK 35 e contiene varie modifiche per la compatibilità con l'SDK 35.
Versione 2.10.0-rc01
24 ottobre 2024
androidx.work:work-*:2.10.0-rc01
viene ritirata. La versione 2.10.0-rc01 contiene questi commit.
Versione 2.10.0-beta01
2 ottobre 2024
androidx.work:work-*:2.10.0-beta01
viene ritirata. La versione 2.10.0-beta01 contiene questi commit.
Versione 2.10.0-alpha04
18 settembre 2024
androidx.work:work-*:2.10.0-alpha04
viene ritirata. La versione 2.10.0-alpha04 contiene questi commit.
Modifiche alle API
- Aggiungi il motivo dell'interruzione
STOP_REASON_FOREGROUND_SERVICE_TIMEOUT
per quando un worker in primo piano viene interrotto a causa del timeout di esecuzione in base al tipo di servizio in primo piano. (Ibd0af)
Versione 2.10.0-alpha03
4 settembre 2024
androidx.work:work-*:2.10.0-alpha03
viene ritirata. La versione 2.10.0-alpha03 contiene questi commit.
Nuove funzionalità
- Sono stati aggiunti tag di traccia a Jobs da
WorkManager
, il che rende molto più semplice la comprensione di "adb shell dumpsys jobscheduler", poiché conterrà il nome del worker in esecuzione. Vengono aggiunte anche sezioni di traccia intorno alle aree chiave diWorkManager
.
Modifiche alle API
- WorkManager 2.10.0 ora viene compilato con l'SDK 35.
- Correzione dei worker in primo piano di tipo "servizio breve" e "sincronizzazione dati" che vanno in timeout e causano un errore ANR quando
WorkManager
non chiamastopSelf()
. Questa correzione si applica solo ai dispositivi con API 34 e 35 in cui sono stati introdotti i tipi di servizi in primo piano. (ca06b2, b/364508145) - Nuove API
WorkerParameters
che consentono di cambiare il processo remoto a cuiWorker
si associa quando si utilizza unWorkerFactory
. (Ibdc8a, Ie8a90, I7373f)
Correzioni di bug
- È stato corretto un arresto anomalo causato da
WorkManager
che tentava di riavviare un worker a esecuzione prolungata (ovvero un worker in primo piano) quando il tipo di lavoro in primo piano aveva autorizzazioni preliminari di Android 14 revocate. (b/333957914) - È stata rimossa la definizione manuale dell'accesso alle nuove API della piattaforma, poiché questa avviene automaticamente tramite la modellazione delle API quando si utilizza R8 con AGP 7.3 o versioni successive (ad es. R8 versione 3.3) e per tutte le build quando si utilizza AGP 8.1 o versioni successive (ad es. D8 versione 8.1). I client che non utilizzano AGP sono invitati a eseguire l'aggiornamento alla versione 8.1 o successive di D8. Consulta questo articolo per ulteriori dettagli. (Ia60e0, b/345472586)
Versione 2.10.0-alpha02
17 aprile 2024
androidx.work:work-*:2.10.0-alpha02
viene ritirata. La versione 2.10.0-alpha02 contiene questi commit.
Modifiche alle API
- È stata aggiunta la possibilità di emettere intervalli di traccia tramite un
@RestrictTo
Tracer
configurabile inWorkManager
. (I17d7f, b/260214125) Configuration.workerCoroutineContext
è stato aggiunto per il controllo del dispatcher in cui viene eseguitoCoroutineWorker
. Consente di evitare completamente l'utilizzo diDispatchers.Default
inWorkManager
. (Icd1b7)- Aggiungi gestori di eccezioni personalizzati per i worker (Ib1b74, b/261190695)
OneTimeWorkRequest.Builder
ePeriodicWorkRequest.Builder
ora possono essere costruiti conKClass
anzichéClass
:val request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build()
(Ib55f6)- La classe
WorkManager
è stata migrata a Kotlin. Ora i metodi che restituisconoLiveData
,ListenableFuture
oFlow
forniscono informazioni corrette sulla nullabilità. Potrebbe essere necessario apportare modifiche al codice sorgente dei client se le ipotesi di nullabilità in quel codice erano errate. (If6757)
Versione 2.10.0-alpha01
24 gennaio 2024
androidx.work:work-*:2.10.0-alpha01
viene ritirata. 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 deve essere eseguita da questo worker.
Modifiche alle API
- Aggiunta di un'opzione per specificare
NetworkRequest
come vincolo. (Id98a1, b/280634452)
Versione 2.9
Versione 2.9.1
7 agosto 2024
androidx.work:work-*:2.9.1
viene ritirata. La versione 2.9.1 contiene questi commit.
Correzioni di bug
- È stato corretto un arresto anomalo causato da
WorkManager
che tentava di riavviare un worker a esecuzione prolungata (ovvero un worker in primo piano) quando il tipo di lavoro in primo piano aveva autorizzazioni preliminari di Android 14 revocate. (b/333957914)
Versione 2.9.0
29 novembre 2023
androidx.work:work-*:2.9.0
viene ritirata. La versione 2.9.0 contiene questi commit.
Modifiche importanti dalla versione 2.8.0
- Osservabilità tramite
Flow
. AnzichéLiveData
, l'avanzamento del worker ora può essere osservato tramite Flow utilizzandoWorkManager.getWorkInfosFlow
e metodi simili. - Ora
WorkManager
fornisce un suggerimento sul motivo per cui un worker è stato arrestato in precedenza. Può essere eseguito da un worker stesso tramite il metodogetStopReason()
o daWorkInfo
tramitegetStopReason()
. - Pianificazione precisa dei worker periodici tramite
setNextScheduleTimeOverride
. Ciò consente il calcolo dinamico del successivo programma di lavoro periodico, che può essere utilizzato per implementare funzionalità avanzate come tempi di aggiornamento adattivi, comportamento di nuovi tentativi personalizzato o per far eseguire un worker del feed di notizie prima che l'utente si svegli ogni mattina senza deriva.ExistingPeriodicWorkPolicy.UPDATE
deve essere utilizzato con queste tecniche per evitare di annullare un worker attualmente in esecuzione durante la pianificazione del successivo. - Test di WorkManager con la corrispondenza della produzione di threading.
ExecutorsMode.PRESERVE_EXECUTORS
può essere utilizzato ininitializeTestWorkManager
per conservare gli executor impostati inConfiguration
e per utilizzare il thread principale reale. - Le API coroutine come
CoroutineWorker
sono state spostate dall'artefatto aggiuntivo work-runtime-ktx all'artefatto principale work-runtime. work-runtime-ktx ora è vuoto.
Modifiche alle API
stopReason
è stato aggiunto aWorkInfo
. Rende disponibilestopReason
dopo l'esecuzione del worker. Potrebbe essere utile per la generazione di reportstopReason
in modo utilizzabile, perché una volta interrotto un worker, un'app stessa potrebbe essere chiusa molto rapidamente. (I21386)- Consenti di impostare
Clock
tramite la configurazione e di utilizzarlo per determinare la sequenza di esecuzione dei test dei worker. (Ic586e) - Il metodo
getStopReason()
è stato aggiunto aListenableWorker
, che fornisce un suggerimento sul motivo per cui il worker è stato interrotto. (I07060) - È stato aggiunto
WorkManagerTestInitHelper#closeWorkDatabase()
per evitare l'avviso di Closeguard sulle risorse trapelate. (Ia8d49) - Il costruttore di
WorkInfo
è ora pubblico, il che può essere utile per i test. (Ia00b6, b/209145335) work-runtime-ktx
è ora vuoto,CoroutineWorker
e altre utilità specifiche di Kotlin sono ora disponibili nell'artefatto principale di work-runtime. (I71a9a)- Aggiunto il metodo
setNextScheduleTimeOverride
, che consente di impostare con precisione i programmi di lavoro periodici (I3b4da) - È stato aggiunto
getNextScheduleTimeMillis
per ottenere informazioni sulla durata di esecuzione pianificata aWorkInfo
. (I797e4) - Le informazioni sul ritardo iniziale e sulla periodicità vengono aggiunte a
WorkInfo
. (I52f2f) - Aggiunto il metodo per osservare i lavoratori tramite Flussi tramite i metodi
getWorkInfosByTagFlow
,getWorkInfoByIdFlow
,getWorkInfosForUniqueWorkFlow
,getWorkInfosFlow
(If122a) - Sono state aggiunte le annotazioni
@RequiresApi(...)
mancanti ai costruttori e alle proprietà diConstraints
. Ora sono allineati alle annotazioni corrispondenti sui setter inConstraints.Builder
esistenti dalle prime versioni diWorkManager
. (I6d7d2) WorkManager
ora ha un limite separato per i worker URI dei contenuti per garantire loro slot inJobScheduler
ed evitare aggiornamenti dei contenuti mancanti in caso di 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 ritirata. 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 ritirata. La versione 2.9.0-beta01 contiene questi commit.
Modifiche alle API
- Aggiunte costanti per i motivi di interruzione restituiti da
WorkInfo.stopReason
eListenableWorker.stopReason
(I0cc00)
Versione 2.9.0-alpha02
26 luglio 2023
androidx.work:work-*:2.9.0-alpha02
viene ritirata. La versione 2.9.0-alpha02 contiene questi commit.
Nuove funzionalità
- Ora
WorkManager
fornisce un suggerimento sul motivo per cui un worker è stato arrestato in precedenza. Può essere eseguito da un worker stesso tramite il metodogetStopReason()
o daWorkInfo
tramitegetStopReason()
.
Modifiche alle API
stopReason
è stato aggiunto aWorkInfo
. Rende disponibilestopReason
dopo l'esecuzione del worker. Potrebbe essere utile per la generazione di reportstopReason
in modo utilizzabile, perché una volta interrotto un worker, l'app stessa potrebbe essere chiusa molto rapidamente. (I21386)- Consenti di impostare l'orologio tramite la configurazione e di utilizzarlo per determinare la sequenza di esecuzione dei test dei worker. (Ic586e)
- Il metodo
getStopReason()
è stato aggiunto aListenableWorker
, che fornisce un suggerimento sul motivo per cui il worker è stato interrotto. (I07060) - È stato aggiunto
WorkManagerTestInitHelper#closeWorkDatabase()
per evitare l'avviso di Closeguard sulle risorse trapelate. (Ia8d49)
Correzioni di bug
- È stata aggiunta la possibilità di ignorare
overrideNextScheduleTime
utilizzandoTestDriver
e sono stati risolti i problemi di testabilità. (Ic2905)
Versione 2.9.0-alpha01
7 giugno 2023
androidx.work:work-*:2.9.0-alpha01
viene ritirata. La versione 2.9.0-alpha01 contiene questi commit.
Nuove funzionalità
- Osservabilità tramite
Flow
. AnzichéLiveData
, l'avanzamento del worker ora può essere osservato tramite Flow utilizzandoWorkManager.getWorkInfosFlow
e metodi simili. - Pianificazione precisa dei worker periodici tramite
setNextScheduleTimeOverride
. Ciò consente il calcolo dinamico del successivo programma di lavoro periodico, che può essere utilizzato per implementare funzionalità avanzate come tempi di aggiornamento adattivi, comportamento di nuovi tentativi personalizzato o per far eseguire un worker del feed di notizie prima che l'utente si svegli ogni mattina senza deriva.ExistingPeriodicWorkPolicy.UPDATE
deve essere utilizzato con queste tecniche per evitare di annullare un worker attualmente in esecuzione durante la pianificazione del successivo. WorkManager
's testing with threading matching production.ExecutorsMode.PRESERVE_EXECUTORS
può essere utilizzato per conservare gli executor impostati inConfiguration
e per utilizzare il thread principale reale.- Le API coroutine come
CoroutineWorker
sono state spostate dall'artefatto aggiuntivowork-runtime-ktx
all'artefatto principalework-runtime
.work-runtime-ktx
ora è vuoto.
Modifiche alle API
- Il costruttore di
WorkInfo
è ora pubblico, il che può essere utile per i test. (Ia00b6, b/209145335) work-runtime-ktx
è ora vuoto,CoroutineWorker
e altre utilità specifiche di Kotlin sono ora disponibili nell'artefattowork-runtime
principale. (I71a9a)- Aggiunto il metodo
setNextScheduleTimeOverride
, che consente di impostare con precisione i programmi di lavoro periodici (I3b4da) getEarliestRunTimeMillis
rinominato ingetNextScheduleTimeMillis
. (I2bd7a)- Le informazioni sull'ora della prossima esecuzione pianificata vengono aggiunte a
WorkInfo
. (I797e4) - Le informazioni sul ritardo iniziale e sulla periodicità vengono aggiunte a
WorkInfo
. (I52f2f) - Aggiunto il metodo per osservare i lavoratori tramite Flussi tramite i metodi
getWorkInfosByTagFlow
,getWorkInfoByIdFlow
,getWorkInfosForUniqueWorkFlow
,getWorkInfosFlow
(If122a) - Sono state aggiunte le annotazioni
@RequiresApi(...)
mancanti ai costruttori e alle proprietà di Constraints. Ora sono allineati alle annotazioni corrispondenti sui setter inConstraints.Builder
esistenti dalle prime versioni diWorkManager
. (I6d7d2) WorkManager
ora ha un limite separato per i worker URI dei contenuti per garantire loro slot inJobScheduler
ed evitare aggiornamenti dei contenuti mancanti in caso di carico elevato. Il limite può essere configurato tramiteConfiguration.Builder.setContentUriTriggerWorkersLimit
. (Ic128f)- I vincoli vengono aggiunti a
WorkInfo
. (I162c0)
Versione 2.8
Versione 2.8.1
22 marzo 2023
androidx.work:work-*:2.8.1
viene ritirata. La versione 2.8.1 contiene questi commit.
Correzioni di bug
- È stato risolto un 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 ritirata. 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 intrusivo, preservando l'ora di accodamento originale, il concatenamento e così via. Per maggiori dettagli, consulta il post del blog dettagliato su questa funzionalità, nonché la documentazione Java perWorkManager.updateWork
eExistingPeriodicWorkPolicy.UPDATE
.
Modifiche alle API
WorkManager.updateWork
è stato aggiunto per aggiornare il lavoro preservando l'ora di accodamento e il concatenamento originali.(I9a248, b/219446409)- Membri aggiunti:
ExistingPeriodicWorkPolicy.UPDATE
Questa policy consente di aggiornare un lavoro periodico in base al nome. È simile aREPLACE
esistente, ma è meno intrusivo: non annulla un worker se è attualmente in esecuzione e conserva l'ora di accodamento. Il ritardo iniziale e il periodo vengono calcolati a partire dall'ora di accodamento originale, anziché dall'ora di aggiornamento.REPLACE
è stato ritirato per ridurre la confusione traREPLACE
eUPDATE
, che hanno nomi molto simili. Se vuoi comunque mantenere la semantica precedente diREPLACE
, puoi utilizzareCANCEL_AND_REENQUEUE
, che è identico aREPLACE
. (I985ed, b/219446409) - Aggiunta la possibilità di intercettare le eccezioni di pianificazione fornendo
Consumer<Throwable>
tramite setSchedulingExceptionHandler) - È stata aggiunta la possibilità di fornire
Consumer<Throwable>
tramite setInitializationExceptionHandler per determinare se si sono verificati problemi durante il tentativo di inizializzazione di WorkManager. - I suggerimenti 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
,WorkQuery.fromTags
per creare direttamenteWorkQuery
. (b/199919736) (If48f2, b/199919736) - Aggiunta di
getForegroundInfo
aWorker
. (Ic1ead) RxWorker
sia per RxJava 2 che per RxJava 3 ora hasetForeground
che restituisceCompletable
che può essere utilizzato al posto disetForegroundInfoAsync
che restituisceListenableFuture
RxWorker
sia per RxJava 2 che per RxJava 3 restituiscegetForegroundInfo
Single
che può essere utilizzato al posto digetForegroundInfoAsync
che restituisceListenableFuture
. (b/203851459)- Ora i vincoli possono essere creati direttamente anziché utilizzando
Constraints.Builder
, il che è comodo per gli utenti Kotlin. (Idc390, b/137568653) - È stata aggiunta la possibilità di verificare se
WorkManager
è stato inizializzato. Inoltre, è stata aggiunta una nuova APIgetConfiguration()
per consentire agli sviluppatori di librerie di ottenere la configurazione con cui è stata inizializzataWorkManager
. (I6eff3, b/212300336)
Correzioni di bug
- Risolto un problema con lo scheduler greedy che impediva l'esecuzione immediata dei worker in caso di carico. (I9686b, b/248111307)
- È stato aggiunto
@RequiresPermission
alle API che richiedono la concessione dell'autorizzazionePOST_NOTIFICATIONS
su SDK 33 e versioni successive. (Ie542e, b/238790278) - Propaga le cancellazioni in
CoroutineScope
aListenableFuture
quando utilizzisuspendCancellableCoroutine
.
Versione 2.8.0-rc01
7 dicembre 2022
androidx.work:work-*:2.8.0-rc01
viene ritirata. La versione 2.8.0-rc01 contiene questi commit.
Nuove funzionalità
- Nessuna nuova funzionalità in questa release. Si tratta principalmente di un aumento della versione
Versione 2.8.0-beta02
9 novembre 2022
androidx.work:work-*:2.8.0-beta02
viene ritirata. La versione 2.8.0-beta02 contiene questi commit.
Correzioni di bug
- È stato corretto il metodo
equals
inWorkInfo
, che in precedenza non teneva conto delle informazioni sulla nuova generazione. (4977cc)
Versione 2.8.0-beta01
5 ottobre 2022
androidx.work:work-*:2.8.0-beta01
viene ritirata. La versione 2.8.0-beta01 contiene questi commit.
Correzioni di bug
- Risolto un problema con lo scheduler greedy che impediva l'esecuzione immediata dei worker in caso di carico. (I9686b, b/248111307)
Versione 2.8.0-alpha04
7 settembre 2022
androidx.work:work-*:2.8.0-alpha04
viene ritirata. La versione 2.8.0-alpha04 contiene questi commit.
Modifiche alle API
WorkerInfo.getGeneration()
eWorkerParameters.getGeneration()
sono stati aggiunti per restituire la generazione di un worker. Un worker ha più generazioni se è stato aggiornato tramiteWorkManager.updateWork
oWorkManager.enqueueUniquePeriodicWork
utilizzandoExistingPeriodicWorkPolicy.UPDATE
. Tieni presente che se il worker è attualmente in esecuzione, è possibile che questo metodo restituisca una generazione più recente rispetto a quella del worker 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 ritirata. La versione 2.8.0-alpha03 contiene questi commit.
Nuove funzionalità
- È stata aggiunta la possibilità di aggiornare
WorkRequests
in modo non invasivo, preservando l'ora di accodamento originale, il concatenamento e così via. Per ulteriori dettagli, consultaWorkManager.updateWork
eExistingPeriodicWorkPolicy.UPDATE
.
Modifiche alle API
WorkManager.updateWork
è stato aggiunto per aggiornare il lavoro preservando l'ora di accodamento e il concatenamento originali.(I9a248, b/219446409)- Membri aggiunti:
ExistingPeriodicWorkPolicy.UPDATE
Questa policy consente di aggiornare un lavoro periodico in base al nome. È simile aREPLACE
esistente, ma è meno intrusivo: non annulla un worker se è attualmente in esecuzione e conserva l'ora di accodamento. Il ritardo iniziale e il periodo vengono calcolati a partire dall'ora di accodamento originale, anziché dall'ora di aggiornamento.REPLACE
è stato ritirato per ridurre la confusione traREPLACE
eUPDATE
, che hanno nomi molto simili. Se vuoi comunque mantenere la semantica precedente diREPLACE
, puoi utilizzareCANCEL_AND_REENQUEUE
, che è identico aREPLACE
. (I985ed, b/219446409) - Aggiungi la possibilità di intercettare le eccezioni di pianificazione definendo un
SchedulingExceptionHandler
. (I033eb) - I suggerimenti 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 ritirata. La versione 2.8.0-alpha02 contiene questi commit.
Modifiche alle API
- Ora i vincoli possono essere creati direttamente anziché utilizzando Builder, il che è comodo per gli utenti Kotlin. (Idc390, b/137568653)
- È stata aggiunta la possibilità di verificare se
WorkManager
è stato inizializzato. Inoltre, è stata aggiunta una nuova APIgetConfiguration()
per consentire agli sviluppatori di librerie di ottenere la configurazione con cui è stata inizializzataWorkManager
. (I6eff3, b/212300336)
Versione 2.8.0-alpha01
12 gennaio 2022
androidx.work:work-*:2.8.0-alpha01
viene ritirata. 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 BuildCompat sperimentali per gli SDK futuri (Iafd82, b/207528937)
- Aggiungi
getForegroundInfo
aWorker
. (Ic1ead) - Sono stati aggiunti metodi helper
WorkQuery.fromIds
per creare WorkQuery direttamente dagli ID. (Ie5bdf, b/199919736) - RxWorker ora restituisce
setForeground
Completable
che possono essere utilizzati al posto disetForegroundInfoAsync
che restituisceListenableFuture
. (I85156) - RxWorker per RxJava 2 ora ha
getForegroundInfo
che restituisceSingle
e che può essere utilizzato al posto digetForegroundInfoAsync
che restituisceListenableFuture
. (I21c91, b/203851459) - RxWorker per RxJava 3 ora ha
getForegroundInfo
che restituisceSingle
che può essere utilizzato al posto digetForegroundInfoAsync
che restituisceListenableFuture
. (I1ca8a) - RxWorker ora restituisce
setForeground
Completable
che possono essere utilizzati al posto disetForegroundInfoAsync
che restituisceListenableFuture
. (I992a3, b/203851459)
Correzioni di bug
- Propaga le cancellazioni in
CoroutineScope
aListenableFuture
quando utilizzisuspendCancellableCoroutine
. (I77e63)
Versione 2.7
Versione 2.7.1
17 novembre 2021
androidx.work:work-*:2.7.1
viene ritirata. La versione 2.7.1 contiene questi commit.
Correzioni di bug
- Le cancellazioni in
CoroutineScope
vengono propagate aListenableFuture
quando utilizzisuspendCancellableCoroutine
. (I77e63) - Viene generata immediatamente un'eccezione quando le richieste di lavoro ritardate vengono contrassegnate come urgenti. bef1762
Versione 2.7.0
13 ottobre 2021
androidx.work:work-*:2.7.0
viene ritirata. 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 rapidi in JobScheduler a partire da Android 12, fornendo al contempo la compatibilità con le versioni precedenti di Android delegando a un servizio in primo piano.
Versione 2.7.0-rc01
29 settembre 2021
androidx.work:work-*:2.7.0-rc01
viene ritirata. 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 ritirata. La versione 2.7.0-beta01 contiene questi commit.
Nuove funzionalità
- Riduce la contesa SQLite multiprocesso durante l'inizializzazione di WorkManager.
Modifiche alle API
- Rimuovi le API
@ExperimentalExpeditedWork
dato che le API della piattaforma sottostante per Android 12 (S) sono stabili. (aosp/1792806)
Correzioni di bug
- Fornire un messaggio di errore migliore per i lavoratori con procedura rapida che non implementano
getForegroundInfoAsync()
. (aosp/1809376)
Versione 2.7.0-alpha05
21 luglio 2021
androidx.work:work-*:2.7.0-alpha05
viene ritirata. 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 ritirata.
Questa release contiene anche le modifiche della release 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 job urgenti vengono riprogrammati, non sono più urgenti. Diventano job regolari.
Versione 2.7.0-alpha03
21 aprile 2021
androidx.work:work-*:2.7.0-alpha03
viene ritirata. La versione 2.7.0-alpha03 contiene questi commit.
Nuove funzionalità
Da WorkManager
2.6.0-alpha02
: aggiunge il supporto per i worker che possono essere eseguiti in qualsiasi processo. (Iaf200)Da WorkManager
2.6.0-alpha02
: è stato aggiuntoRemoteCoroutineWorker
, 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 worker multiprocesso persetProgressAsync()
. (Ib6d08) - Da WorkManager
2.6.0-alpha02
:rendiWorkManagerInitializer
pubblico 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 ritirata. La versione 2.7.0-alpha02 contiene questi commit.
Correzioni di bug
- Rendi esplicita la mutabilità di
PendingIntent
per correggere un arresto anomalo quando il target è Android 12. (b/180884673)
Versione 2.7.0-alpha01
18 febbraio 2021
androidx.work:work-*:2.7.0-alpha01
viene ritirata. La versione 2.7.0-alpha01 contiene questi commit.
Nuove funzionalità
WorkManager introduce una nuova API
WorkRequest.Builder.setExpedited(...)
per tenere conto delle limitazioni del servizio in primo piano in Android 12.Le applicazioni non possono più avviare un servizio in primo piano quando sono in background. Pertanto, per supportare meglio il lavoro a lunga esecuzione precedentemente vincolato al ciclo di vita di un servizio in primo piano, le applicazioni possono contrassegnare
WorkRequest
come accelerati.Questa API sostituisce le API
setForegroundAsync(...)
/setForeground(...)
, ora obsolete.Quando utilizzi
setExpedited(...)
, WorkManager delega i job rapidi inJobScheduler
a partire da Android 12, fornendo al contempo la compatibilità con le versioni precedenti di Android delegando i servizi in primo piano.
Modifiche alle API
- Aggiungi il supporto per i
WorkRequest
rapidi.
Versione 2.6.0
Versione 2.6.0
1° settembre 2021
androidx.work:work-*:2.6.0
viene ritirata. 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 procedere nel seguente modo.<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.work.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
, ovvero 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 ritirata. 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 ritirata. La versione 2.6.0-beta02 contiene questi commit.
Correzioni di bug
- Ora
RemoteWorkManager
viene scollegato correttamente daRemoteWorkManagerService
, il che consente aRemoteWorkManagerService
di eseguire la pulizia correttamente. aosp/1730694 RemoteListenableWorker
ora si dissocia correttamente daRemoteWorkerService
, il che consente aRemoteWorkerService
di eseguire la pulizia correttamente. aosp/1743817ForceStopRunnable
ora viene eseguito solo nel processo dell'app principale. Si tratta di un'ottimizzazione che evita la contesa delle risorse per le app che utilizzano più processi. aosp/1749180, aosp/1761729
Versione 2.6.0-beta01
2 giugno 2021
androidx.work:work-*:2.6.0-beta01
viene ritirata. La versione 2.6.0-beta01 contiene questi commit.
Questa release contiene alcuni miglioramenti minori della documentazione. La release è in gran parte identica alla 2.6.0-alpha02.
Versione 2.6.0-alpha02
21 aprile 2021
androidx.work:work-*:2.6.0-alpha02
viene ritirata. 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
, ovvero un'implementazione diRemoteListenableWorker
che può essere associata a un processo remoto. (I30578)
Modifiche alle API
- È stato aggiunto il supporto per il vincolo di rete
TEMPORARILY_UNMETERED
. (I08d5e) - Supporto di worker multi-processo per
setProgressAsync()
. (Ib6d08) - Rendi pubblico
WorkManagerInitializer
in modo che altriandroidx.startup.Initializer
possano utilizzarli come dipendenze. (I5ab11)
Versione 2.6.0-alpha01
24 marzo 2021
androidx.work:work-*:2.6.0-alpha01
viene ritirata. 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 procedere nel seguente modo.<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.work.impl.WorkManagerInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
(oppure)
<!-- If you want to disable android.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
Modifiche alle API
- Aggiungi un'API
Result.getOutputData()
che restituisceoutputData
di ListenableWorker. (Ie51e3)
Correzioni di bug
- Aggiungi una soluzione alternativa per un bug OEM che causa la generazione di un
SecurityException
quando si utilizzano le APIAlarmManager
. (aosp/1587518)
Versione 2.5.0
Versione 2.5.0
27 gennaio 2021
androidx.work:work-*:2.5.0
viene ritirata. La versione 2.5.0 contiene questi commit.
Modifiche principali dalla versione 2.4.0
- Un nuovo artefatto
:work:work-multiprocess
per le app che utilizzano più processi. Ciò introduce miglioramenti delle prestazioni unificando la pianificazione delle richieste di lavoro in un unico processo.- Per utilizzare
work-multiprocess
, definisci una dipendenza da:implementation "androidx.work:work-multiprocess:2.5.0"
- Designa un processo principale utilizzando Configuration.Builder.setDefaultProcessName(String).
- Quando utilizzi
work-multiprocess
, vuoi utilizzare anche RemoteWorkManager per gestire i tuoiWorkRequest
. RemoteWorkManager contatta sempre il processo designato. Lo scheduler in-process viene eseguito anche nel processo designato.
- Per utilizzare
- A volte,
ActivityManager
non può creare un'istanza diJobService
per avviare un job. Ciò causa l'eliminazione silenziosa del job sottostante a causa di un bug della piattaforma.WorkManager
ora garantisce che esistano job di backup per ogniWorkRequest
quando unApplication
viene inizializzato tramite la riconciliazione dei job. Ciò migliora notevolmente l'affidabilità dell'esecuzione dei job. (b/172475041, aosp/1489577) WorkManager
limita la crescita del database riducendo la durata del buffer in cui vengono monitorati iWorkRequest
dopo il completamento di unWorkRequest
. In precedenza, la durata era di7
giorni. È stata ridotta a1
giorni più la durata di keepResultsForAtLeast. (aosp/1419708)TestListenableWorkerBuilder
ora supporta l'estensione della classe reificataListenableWorker
per semplificare i test. (aosp/1443299, b/169787349)- L'ispettore WorkManager è ora disponibile quando utilizzi Android Studio Arctic Fox.
Versione 2.5.0-rc01
13 gennaio 2021
androidx.work:work-*:2.5.0-rc01
viene ritirata. La versione 2.5.0-rc01 contiene questi commit.
Correzioni di bug
- È stato corretto un bug per cui
getWorkInfosLiveData
non veniva invalidato correttamente dopo l'aggiornamento delle entità quando si utilizzava l'API basata suWorkQuery
. (aosp/1540566, b/173769028) - È stato corretto un bug per cui, in rari casi, le transazioni del database non venivano contrassegnate come riuscite. Ciò causa problemi su alcuni dispositivi Motorola. (aosp/1535368, b/175944460)
- È stato corretto un bug per ignorare i
NoSuchElementException
quando si tenta di annullare il binding da un processo non attivo. (aosp/1530589) - Migliora
ConstraintTrackingWorker
per arrestare unListenableWorker
solo se non è già stato arrestato. (aosp/1496844, b/172946965) - Aggiorna le librerie androidx.work in modo che abbiano come target Java 8 (Ibd2f2)
Versione 2.5.0-beta02
2 dicembre 2020
androidx.work:work-*:2.5.0-beta02
viene ritirata. La versione 2.5.0-beta02 contiene questi commit.
Correzioni di bug
- È stato corretto un bug in
androidx.work:work-multiprocess
in cui WorkManager bloccava inavvertitamente il thread chiamante durante il tentativo di binding al processo designato. (aosp/1475538) - È stato corretto un bug per cui i
PeriodicWorkRequest
non venivano riconciliati correttamente. (b/172475041, aosp/1489577) - È stata aggiunta una soluzione alternativa per un bug della piattaforma durante l'interruzione del servizio in primo piano quando si utilizzano le API
setForeground*
. (b/170924044, aosp/1489901)
Versione 2.5.0-beta01
28 ottobre 2020
androidx.work:work-*:2.5.0-beta01
viene ritirata. La versione 2.5.0-beta01 contiene questi commit.
Nuove funzionalità
WorkManager
limita automaticamente il numero diWorkRequest
che possono essere selezionati dallo scheduler in-process. Le richieste vengono comunque eseguite in ordine FIFO. (aosp/1455228)WorkManager
tenta di eseguire il recupero quando il datastore dell'applicazione si trova in uno stato non valido. (aosp/1463103)
Correzioni di bug
- Quando le
ListenableWorker
vengono interrotte, contrassegnale immediatamente comeENQUEUED
in modo che possano essere riprogrammate in un secondo momento. (aosp/1455618, b/170273988)
Versione 2.5.0-alpha03
14 ottobre 2020
androidx.work:work-*:2.5.0-alpha03
viene ritirata. 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
- Utilizza
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 Proguard per
:work:work-multiprocess
. (aosp/1432091) - Migliora i cicli di vita delle notifiche per i 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 ritirata. La versione 2.5.0-alpha02 contiene questi commit.
Nuove funzionalità
- Aggiungi un'API a WorkQuery per poter utilizzare
id
per eseguire query suWorkInfo
. (aosp/1412372, b/157335295) - WorkManager supporta meglio le app che utilizzano più processi con un nuovo artefatto (
androidx.work:work-multiprocess:*
). Questo nuovo artefatto aiuta a risolvere alcuni problemi riscontrati dalle app di grandi dimensioni, tra cui:- WorkManager in genere deve essere inizializzato in ogni processo dell'app. Questo non è l'ideale perché aumenta la contesa di 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 simile apackageName:processName
(ad es.com.example:remote
). - Un insieme di nuove API:
RemoteWorkManager
eRemoteWorkContinuation
perenqueue
,cancel
equery
richieste di lavoro. Queste API non includono variantiLiveData
per evitare conflitti SQLite tra più processi. Tutte le chiamate aenqueue
,cancel
equery
vengono inoltrate a un processo dell'appprimary
utilizzando AIDL e restituiscono un intentListenableFuture
. (aosp/1392657, aosp/1411210, aosp/1412215, aosp/1417713)
- WorkManager in genere deve essere inizializzato in ogni processo dell'app. Questo non è l'ideale perché aumenta la contesa di 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
- WorkManager ora esegue il pruning in modo più aggressivo dei
WorkRequest
completati che non hanno dipendenze incomplete. La durata del buffer è cambiata da7
giorni a1
giorno. (aosp/1419708)
Correzioni di bug
- WorkManager ora riconcilia i job in modo proattivo, in modo che i job
WorkRequest
eJobScheduler
siano sincronizzati quando viene inizializzatoWorkManager
. (aosp/1412794, b/166292069)
Versione 2.5.0-alpha01
19 agosto 2020
androidx.work:work-*:2.5.0-alpha01
viene ritirata. La versione 2.5.0-alpha01 contiene questi commit.
Nuove funzionalità
- Modifiche alle API interne che ci consentono di fornire strumenti migliori con
WorkManager
in futuro. Continua a seguirci per altri aggiornamenti.
Correzioni di bug
- Gestire
SecurityException
s durante il monitoraggio dello stato della rete su alcuni dispositivi. (aosp/1396969)
Contributo esterno
- Correzione della 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 ritirata. La versione 2.4.0 contiene questi commit.
Modifiche importanti dalla versione 2.3.0
- Lo scheduler in-process di
WorkManager
è ora più potente. In precedenza, lo statoScheduler
in corso prendeva in considerazione solo l'esecuzione del lavoro che non era in ritardo e i cui vincoli erano soddisfatti. Ora, lo scheduler in corso tiene traccia deiWorkRequest
s che potrebbero essere eseguiti in futuro, incluse le PeriodicWorkRequest.Scheduler
in-process non rispetta nemmeno i limiti di pianificazione (ma è comunque limitato alle dimensioni diExecutor
utilizzato da WorkManager). Ciò significa che l'applicazione ora può eseguire molte più WorkRequest quando è in primo piano. Per gestire l'esecuzione del lavoro ritardato in primo piano,WorkManager
introduce anche un nuovoRunnableScheduler
configurabile. (aosp/1185778) - WorkManager ora supporta RxJava 3. Per utilizzare RxJava 3, devi includere la seguente dipendenza:
implementation "androidx.work:work-rxjava3:2.4.0"
. (aosp/1277904) - È stata aggiunta la possibilità di eseguire query per
WorkInfo
utilizzando unWorkQuery
. Questa funzionalità è utile quando gli sviluppatori vogliono eseguire query sugliWorkInfo
in base a una combinazione di più attributi. Per ulteriori informazioni, consultaWorkQuery.Builder.fromStates(...)
,WorkQuery.Builder. fromTags(...)
oWorkQuery.Builder.fromUniqueWorkNames(...)
. (aosp/1253230, b/143847546) Aggiungi 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:
- WorkRequest completate nelle ultime 24 ore.
- WorkRequest attualmente in esecuzione.
- Scheduled WorkRequests. (aosp/1235501)
Aggiungi
ExistingWorkPolicy.APPEND_OR_REPLACE
, che è simile aAPPEND
, ma sostituisce una catena che ha annullato o non ha superato i prerequisiti. (b/134613984, aosp/1199640)Offrire la possibilità di aggiungere un
RunnableScheduler
personalizzato per monitorare le richieste di lavoro che devono essere eseguite 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
più strettamente alla piattaforma. (aosp/1312583)Lo scheduler in-process ora utilizza API migliori per determinare il nome del processo. Ciò è utile per supportare meglio le app che utilizzano più processi. (aosp/1324732)
Nuove regole di analisi tramite lint che applicano:
- Utilizzo del
foregroundServiceType
corretto quando utilizzi le APIsetForegroundAsync()
. (b/147873061, aosp/1215915) - Specifica gli ID JobScheduler che WorkManager deve utilizzare quando utilizza direttamente le API JobService. aosp/1223567
- È stata aggiunta una nuova regola di lint che garantisce che le implementazioni di
ListenableWorker
siano orapublic
quando si utilizzaWorkerFactory
predefinito. (aosp/1291262)
- Utilizzo del
Le chiamate a
setForegroundAsync()
che non vengono completate prima del completamento di unListenableWorker
verranno ora segnalate tramite unIllegalStateException
nelListenableFuture
restituito. (aosp/1262743)È stato corretto un bug per cui
ForegroundService
non viene interrotto dopo l'interruzione di unWorker
in primo piano. (b/155579898, aosp/1302153)Correzione di un bug in cui
WorkManager
tenta di eseguire più istanze di unWorker
associato a un servizio in primo piano (b/156310133, aosp/1309853)
Versione 2.4.0-rc01
24 giugno 2020
androidx.work:work-*:2.4.0-rc01
viene ritirata. 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. Ciò è utile per supportare meglio le app che utilizzano più processi. (aosp/1324732)
Versione 2.4.0-beta01
20 maggio 2020
androidx.work:work-gcm:2.4.0-beta01
, androidx.work:work-runtime:2.4.0-beta01
, androidx.work:work-runtime-ktx:2.4.0-beta01
, androidx.work:work-rxjava2:2.4.0-beta01
e androidx.work:work-testing:2.4.0-beta01
sono rilasciati. La versione 2.4.0-beta01 contiene questi commit.
Correzioni di bug
- È stato corretto un bug per cui
ForegroundService
non viene interrotto dopo l'interruzione di unWorker
in primo piano. (b/155579898, aosp/1302153) - Correzione di un bug in cui
WorkManager
tenta di eseguire più istanze di unWorker
associato a un servizio in primo piano (b/156310133, aosp/1309853) - 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
più strettamente alla piattaforma. (aosp/1312583)
Versione 2.4.0-alpha03
29 aprile 2020
androidx.work:work-*:2.4.0-alpha03
viene ritirata. La versione 2.4.0-alpha03 contiene questi commit.
Nuove funzionalità
- WorkManager ora supporta RxJava 3. Per utilizzare RxJava 3, devi includere la seguente dipendenza:
implementation "androidx.work:work-rxjava3:2.4.0-alpha03"
. (aosp/1277904) - È stata aggiunta una nuova regola di lint che garantisce che le implementazioni di
ListenableWorker
siano orapublic
quando si utilizzaWorkerFactory
predefinito. (aosp/1291262)
Modifiche alle API
- La chiamata di
setProgressAsync()
dopo il termine dell'esecuzione diListenableWorker
ora segnalerà unException
tramiteListenableFuture
. (aosp/1285494) WorkQuery.Builder
ora è contrassegnato comefinal
. (aosp/1275037)- I metodi di fabbrica
WorkQuery.Builder
,withStates
,withTags
ewithUniqueWorkNames
sono stati rinominati rispettivamente infromStates
,fromTags
efromUniqueWorkNames
. (aosp/1280287)
Correzioni di bug
- Ignora i
SecurityException
quando monitori lo stato della rete di un dispositivo. (b/153246136, aosp/1280813)
Versione 2.4.0-alpha02
1° aprile 2020
androidx.work:work-*:2.4.0-alpha02
viene ritirata. La versione 2.4.0-alpha02 contiene questi commit.
Nuove funzionalità
- È stata aggiunta una nuova regola Lint che avvisa quando
WorkRequest
s richiede siaConstraints.setRequiresCharging(...)
siaConstraints.setRequiresDeviceIdle(...)
. Alcuni dispositivi non sono mai in carica e inattivi contemporaneamente. Pertanto, queste richieste verranno eseguite meno frequentemente del previsto. (aosp/1253840)
Modifiche alle API
È stata aggiunta la possibilità di eseguire query per
WorkInfo
utilizzando unWorkQuery
. Questa funzionalità è utile quando gli sviluppatori vogliono eseguire query sugliWorkInfo
in base a una combinazione di più attributi. Per ulteriori informazioni, consultaWorkQuery.Builder withStates(...)
,WorkQuery.Builder withTags(...)
oWorkQuery.Builder withUniqueWorkNames(...)
. (aosp/1253230, b/143847546)Le chiamate a
setForegroundAsync()
che non vengono completate prima del completamento di unListenableWorker
verranno ora segnalate tramite unIllegalStateException
nelListenableFuture
restituito. (aosp/1262743)
Correzioni di bug
- È stata corretta la regola di lint che verifica la presenza di durate degli intervalli non valide per i
PeriodicWorkRequest
. (aosp/1254846, b/152606442)
Versione 2.4.0-alpha01
4 marzo 2020
androidx.work:work-*:2.4.0-alpha01
viene ritirata. La versione 2.4.0-alpha01 contiene questi commit.
Nuove funzionalità
Lo scheduler in-process di
WorkManager
è ora più potente. In precedenza, lo scheduler in-process prendeva in considerazione solo l'esecuzione del lavoro non ritardato e i cui vincoli erano soddisfatti. Ora, lo scheduler in-process monitora iWorkRequest
che potrebbero essere eseguiti in futuro, inclusi iPeriodicWorkRequest
. Lo scheduler in-process non rispetta i limiti di pianificazione (ma è comunque limitato alle dimensioni delExecutor
utilizzato da WorkManager). Ciò significa che l'applicazione ora può eseguire molte piùWorkRequest
quando è in primo piano. (aosp/1185778)È stata aggiunta la possibilità di richiedere informazioni di diagnostica da WorkManager utilizzando
adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
. Questo fornisce molte informazioni utili, tra cui:- WorkRequest completate nelle ultime 24 ore.
- WorkRequest attualmente in esecuzione.
- Scheduled WorkRequests. (aosp/1235501)
Nuove regole di analisi tramite lint che applicano:
- Utilizzo del
foregroundServiceType
corretto quando utilizzi le APIsetForegroundAsync()
. (b/147873061, aosp/1215915) - Specifica gli ID
JobScheduler
cheWorkManager
deve utilizzare quando utilizza direttamente le APIJobService
. (aosp/1223567)
- Utilizzo del
Modifiche alle API
Aggiungi
ExistingWorkPolicy.APPEND_OR_REPLACE
, che è simile aAPPEND
, ma sostituisce una catena che ha annullato o non ha superato i prerequisiti. (b/134613984, aosp/1199640)Offrire la possibilità di aggiungere un
RunnableScheduler
personalizzato per monitorare iWorkRequest
che devono essere eseguiti in futuro. Viene utilizzato dallo scheduler in-process. (aosp/1203944)
Correzioni di bug
setProgress()
è stato ritirato inRxWorker
perché in precedenza restituiva unSingle<Void>
, che è un tipo impossibile. È stata aggiunta una nuova APIsetCompletableProgress()
che restituisce unCompletable
; inoltre, sono state aggiunte nuove regole Lint che aiutano a eseguire la migrazione alle nuove API. (b/150080946, aosp/1242665)
Versione 2.3.4
Versione 2.3.4
18 marzo 2020
androidx.work:work-*:2.3.4
viene ritirata. La versione 2.3.4 contiene questi commit.
Correzioni di bug
- È stato corretto un bug che causava l'esecuzione di più istanze di un
Worker
a lunga esecuzione dopo il superamento della finestra di esecuzione di 10 minuti. (aosp/1247484, b/150553353) - Correzione del lint
IssueRegistry
di WorkManager. Grazie @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 ritirata. La versione 2.3.3 contiene questi commit.
Correzioni di bug
- È stato corretto un bug per cui, se un
Worker
veniva interrotto, non veniva riprogrammato correttamente. (b/150325687, aosp/1246571)
Versione 2.3.2
Versione 2.3.2
19 febbraio 2020
androidx.work:work-*:2.3.2
vengono rilasciati. La versione 2.3.2 contiene questi commit.
Correzioni di bug
- Risolve 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 competizione in ConstraintControllers. (aosp/1220100)
- È stato migliorato il ciclo di vita del servizio in primo piano per i worker a esecuzione prolungata. (aosp/1226295)
- Migliorata la gestione dell'annullamento delle notifiche per i worker a esecuzione prolungata in caso di annullamento del worker. (aosp/1228346)
Versione 2.3.1
Versione 2.3.1
5 febbraio 2020
androidx.work:work-*:2.3.1
viene ritirata. La versione 2.3.1 contiene questi commit.
Correzioni di bug
- Gestisci meglio il ciclo di vita degli
Notification
per gliWorker
a lunga esecuzione che vengono eseguiti 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 di lint per garantire che venga specificato un
foregroundServiceType
inAndroidManifest.xml
quando si utilizzanoforegroundServiceType
inForegroundInfo
. (aosp/1214207, b/147873061)
Versione 2.3.0
Versione 2.3.0
22 gennaio 2020
androidx.work:work-*:2.3.0
viene rilasciato senza modifiche dal giorno 2.3.0-rc01
. La versione 2.3.0 contiene questi commit.
Modifiche importanti dalla versione 2.2.0
- Supporto per lavori importanti o di lunga durata tramite
ListenableWorker#setForegroundAsync()
. - Supporto per l'avanzamento worker tramite
ListenableWorker#setProgressAsync()
. - WorkManager ora include regole lint aggiuntive come parte della libreria, il che aiuta a individuare i bug in anticipo.
Versione 2.3.0-rc01
8 gennaio 2020
androidx.work:work-*:2.3.0-rc01
viene ritirata. 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
dawork-runtime-ktx
. (aosp/1194410)
Versione 2.3.0-beta02
18 dicembre 2019
androidx.work:work-*:2.3.0-beta02
viene ritirata. La versione 2.3.0-beta02 contiene questi commit.
Nuove funzionalità
- È stato aggiunto un messaggio di errore migliore per le eccezioni SQLite non recuperabili. (aosp/1185777)
- È stata aggiunta una regola di lint che garantisce la rimozione del content provider
androidx.work.impl.WorkManagerInitializer
daAndroidManifest.xml
quando si utilizza l'inizializzazione on demand. (aosp/1167007) - È stato aggiunto un avviso di lint quando
enqueue()
viene utilizzato per unPeriodicWorkRequest
anzichéenqueueUniquePeriodicWork()
. (aosp/1166032)
Modifiche all'API
- Ora
ForegroundInfo
richiede di specificarenotificationId
da utilizzare quando si utilizzaListenableWorker.setForegroundAsync()
. Questa è una modifica che provoca un errore. In questo modo puoi eseguire piùWorker
a esecuzione prolungata in parallelo.WorkManager
gestisce meglio anche la durata deiNotification
forniti. (b/145473554, aosp/1181208, asop/1181216, asop/1183577)
Correzioni di bug
- È stato corretto un bug nell'implementazione di AlarmManager per cui gli allarmi non venivano puliti correttamente. (aosp/1156444)
- È stato corretto un bug per cui un elenco vuoto di
WorkRequest
causava la creazione di una catenaWorkContinuation
errata. (b/142835274, aosp/1157051)
Modifiche alle dipendenze
- WorkManager ora utilizza Room 2.2.2.
Versione 2.3.0-beta01
20 novembre 2019
androidx.work:work-*:2.3.0-beta01
viene ritirata. La versione 2.3.0-beta01 contiene questi commit.
Nuove funzionalità
- È stata aggiunta una nuova regola di lint che impedisce agli sviluppatori di commettere errori dovuti all'implementazione errata di
androidx.work.Configuration.Provider
quando si utilizza l'inizializzazione on demand. aosp/1164559
Versione 2.3.0-alpha03
23 ottobre 2019
androidx.work:work-*:2.3.0-alpha03
viene ritirata. La versione 2.3.0-alpha03 contiene questi commit.
Nuove funzionalità
- È stata aggiunta l'API
WorkManager.createCancelPendingIntent()
, che semplifica l'annullamento delleWorkRequest
senza dover registrare un altro componente inAndroidManifest.xml
. Questa API semplifica in particolare l'annullamento degliWorkRequest
dagliNotification
. Prevediamo che questa funzionalità venga abbinata alle nuove API in primo piano nella versione 2.3.0. - Ora WorkManager dipende dalla versione stabile di
androidx.room:*:2.2.0
.
Modifiche all'API
ForegroundInfo.getNotificationType()
è stato rinominato inForegroundInfo.getForegroundServiceType()
per essere più coerente con le API della piattaforma sottostante. (b/142729893, aosp/1143316)
Correzioni di bug
- È stato corretto un bug causato da una chiamata non necessaria a
setTransactionSuccessful()
al di fuori di una transazione. Ciò accade per le migrazioni rare. (b/142580433, aosp/1141737)
Versione 2.3.0-alpha02
9 ottobre 2019
androidx.work:work-*:2.3.0-alpha02
viene ritirata. La versione 2.3.0-alpha02 contiene questi commit.
Nuove funzionalità
- WorkManager ora supporta l'esecuzione di attività importanti o di lunga durata che devono essere mantenute attive dal sistema operativo. Per ulteriori informazioni, consulta
ListenableWorker#setForegroundAsync()
(oCoroutineWorker#setForeground()
per Kotlin). (aosp/1133636)
Modifiche all'API
- L'API
containsKey
inData
viene rinominata inhasKeyWithValueOfType
. Anche il metodo di estensione corrispondente nella libreriaktx
è stato rinominato. (b/141916545)
Correzioni di bug
- WorkManager pianifica il lavoro in modo equo quando il numero di
WorkRequest
in coda si avvicina ai limiti di pianificazione. (aosp/1105766) - WorkManager chiama
ListenableWorker#onStopped()
solo se il lavoro non è già stato completato. (b/140055777) - WorkManager ora rimuove le informazioni sullo stato di avanzamento quando un worker viene interrotto o raggiunge lo stato terminale. (aosp/1114572)
Data
ora ha una rappresentazionetoString()
molto più utile. (b/140945323)Data
ora ha un metodoequals()
migliore. Supporta anchedeepEquals
per i tipiArray
. (b/140922528)- WorkManager ora archivia il database interno e i file delle preferenze in una directory senza backup. (b/114808216)
Versione 2.3.0-alpha01
22 agosto 2019
androidx.work:work-*:2.3.September 5, 20190-alpha01
viene ritirata. I commit inclusi in questa versione sono disponibili qui.
Nuove funzionalità
- Ora gli
ListenableWorker
possono impostare l'avanzamento tramite l'APIsetProgressAsync()
. È stata aggiunta anche un'APIsuspend
-ingsetProgress
corrispondente inCoroutineWorker
e unsetProgress
inRxWorker
che restituisce unSingle<Void>
. Con queste nuove API, i lavoratori possono comunicare le informazioni sullo stato di avanzamento tramiteWorkInfo
, che ha un'APIgetProgress
corrispondente. (b/79481554) Data
dispone di un'APIcontainsKey()
che può essere utilizzata per verificare che i dati di input diWorker
s abbiano chiavi con il tipo previsto. (b/117136838)- Ora
Data
può essere serializzato utilizzandoData.toByteArray()
eData.fromByteArray()
. Tieni presente che non esistono garanzie di controllo delle versioni conData
, pertanto non devi renderlo persistente o utilizzarlo per la comunicazione interprocesso tra applicazioni. Possono essere utilizzati in modo sicuro solo tra più processi della stessa applicazione. - È stata aggiunta la possibilità di specificare un
InputMergerFactory
tramiteConfiguration.setInputMergerFactory
. (b/133273159)
Modifiche all'API
- WorkManager genererà un'istanza di
IllegalStateException
se unWorkerFactory
restituisce un'istanza diListenableWorker
richiamata in precedenza. (b/139554406) - Aggiornamenti della documentazione relativi all'annullamento di
ListenableFuture
e al callbackonStopped()
inListenableWorker
. (b/138413671)
Correzioni di bug
- Lo strumento di pianificazione in corso ora ignora i
WorkRequest
con il vincoloidle
. Queste richieste ora vengono rilevate solo daJobScheduler
quando il dispositivo è effettivamenteidle
. (aosp/1089779) TestScheduler
ora utilizza correttamente ilExecutor
specificato per il proprio executor di attività interno nei test. (aosp/1090749)
Versione 2.2.0
Versione 2.2.0
15 agosto 2019
androidx.work:work-*:2.2.0
viene ritirata. I commit inclusi in questa versione sono disponibili qui.
Questa release è identica a androidx.work:work-*:2.2.0-rc01
.
Modifiche importanti nella versione 2.2.0 rispetto alla 2.1.0
androidx.work:work-gcm:2.2.0
è un nuovo artefatto Maven che supporta l'utilizzo di GCMNetworkManager come pianificatore quando Google Play Services è disponibile per i livelli API <= 22. Si tratta di una dipendenza facoltativa che contribuisce a un'elaborazione in background più affidabile e performante nelle versioni precedenti dell'API. Se la tua app utilizza Google Play Services, aggiungi questa dipendenza al file gradle per ottenere automaticamente il supporto di GCMNetworkManager. Se Play Services non è disponibile, WorkManager continuerà a utilizzare AlarmManager sui dispositivi meno recenti.
Versione 2.2.0-rc01
30 luglio 2019
androidx.work:work-*:2.2.0-rc01
viene ritirata. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
- È stato corretto un bug nell'implementazione di AlarmManager che causa l'arresto prematuro del servizio e, in rari casi, 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 ritirata. 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 ritirata. I commit inclusi in questa versione sono disponibili qui.
Nuove funzionalità
androidx.work:work-gcm:2.2.0-beta01
è un nuovo artefatto Maven che supporta l'utilizzo di GCMNetworkManager come pianificatore quando Google Play Services è disponibile per i livelli API <= 22. Si tratta di una dipendenza facoltativa che contribuisce a 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 ottenere automaticamente il supporto di GCMNetworkManager. Se Play Services non è disponibile, WorkManager continuerà a utilizzare AlarmManager sui dispositivi meno recenti.
Correzioni di bug
- Correzione per
IllegalArgumentException
durante il monitoraggio dello stato della rete 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 ritirata. 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 al tuobuild.gradle
:kotlinOptions { jvmTarget = "1.8" }
- È stata aggiunta l'inizializzazione on demand per WorkManager, che verrà creato
solo quando viene fatto riferimento. b/127497100 Per configurare il progetto per l'inizializzazione on demand:
- Disattiva l'inizializzatore automatico.
- Implementa
Configuration.Provider
sull'oggettoApplication
personalizzato. - Modifica tutti i riferimenti a
WorkManager.getInstance()
inWorkManager.getInstance(Context)
. Nell'ambito di questa modifica, abbiamo ritiratoWorkManager.getInstance()
. È sempre più sicuro chiamare la nuova sostituzioneWorkManager.getInstance(Context)
, anche se non esegui l'inizializzazione on demand.
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 a uno o più
WorkerFactory
registrati utilizzandoDelegatingWorkerFactory
. b/131435993 - È stata aggiunta la possibilità di personalizzare il
Executor
utilizzato da WorkManager per tutta la sua contabilità interna tramiteConfiguration.Builder.setTaskExecutor
. - È stata aggiunta la possibilità di creare classi
Worker
eListenableWorker
testabili con unit test utilizzandoTestWorkerBuilder
eTestListenableWorkerBuilder
nell'artefattowork-testing
.- Tieni presente che
work-testing
ora include Kotlin come dipendenza e include diverse estensioni Kotlin per impostazione predefinita.
- Tieni presente che
- È stato aggiunto il conteggio dei tentativi di esecuzione a
WorkInfo
. b/127290461 - Ora i tipi
Data
possono archiviare e recuperare byte e array di byte. Questa operazione NON modifica le dimensioni massime degli oggettiData
. - WorkManager ora dipende da
Room 2.1.0
, il che dovrebbe risolvere alcuni problemi del database.
Versione 2.1.0-rc01
27 giugno 2019
androidx.work:work-*:2.1.0-rc01
viene ritirata. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
- È stato corretto un bug che causava l'arresto anomalo di un'applicazione durante l'esecuzione di job con
JobScheduler
mentre era in corso un backup b/135858602.
Versione 2.1.0-beta02
20 giugno 2019
androidx.work:work-*:2.1.0-beta02
viene ritirata. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
TestListenableWorkerBuilder
ora utilizza ilWorkerFactory
corretto durante la creazione di istanze diListenableWorker
. b/135275844- È stato corretto un bug che causava derive nelle finestre di esecuzione per
WorkRequest
a causa dell'interruzione del processo. b/135272196
Versione 2.1.0-beta01
13 giugno 2019
androidx.work:work-*:2.1.0-beta01
viene ritirata. I commit inclusi in questa versione sono disponibili qui.
Correzioni di bug
- WorkManager ora dipende da
Room 2.1.0
, il che dovrebbe risolvere alcuni problemi del database. - Rimozione di alcune operazioni di I/O del disco di avvio sul thread principale.
- È stato corretto un potenziale deadlock nel monitoraggio dei vincoli. b/134361006
- Job non validi annullati in via preventiva attribuiti a WorkManager. b/134058261
- Sono state aggiunte alcune chiamate difensive alle API JobScheduler per i dispositivi che non funzionano correttamente.
Versione 2.1.0-alpha03
5 giugno 2019
androidx.work:*:2.1.0-alpha03
viene ritirata.
Correzioni di bug
- Documentazione migliorata per le
PeriodicWorkRequest
. WorkManagerTestInitHelper
ora utilizza l'executor in background corretto per i test.- Correzioni dei problemi di SQLite durante la gestione di transazioni di grandi dimensioni su alcuni dispositivi. (b/130182503)
- Le dipendenze di WorkManager ora sono più granulari. (b/133169148).
- Soluzione alternativa per bug specifici dell'OEM nell'implementazione di
JobScheduler
durante la pianificazione dei job utilizzando WorkManager. - Miglioramenti dello strumento di pianificazione basato su AlarmManager in merito alla durata dei servizi che in precedenza causavano rari arresti anomali. (b/133313734)
Versione 2.1.0-alpha02
16 maggio 2019
È stata rilasciata la versione 2.1.0-alpha02 di WorkManager. Questa versione contiene diverse nuove API.
Modifiche alle API
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 a uno o più
WorkerFactory
registrati utilizzandoDelegatingWorkerFactory
. b/131435993È stata aggiunta la possibilità di personalizzare il
Executor
utilizzato da WorkManager per tutta la sua contabilità interna tramiteConfiguration.Builder.setTaskExecutor
.Documentazione migliorata su
WorkRequest.keepResultsForAtLeast
(b/130638001), inizializzazione on demand ePeriodicWorkRequest.Builder
(b/131711394).
Versione 2.1.0-alpha01
24 aprile 2019
È stata rilasciata la versione 2.1.0-alpha01 di WorkManager. Questa versione contiene diverse nuove API. Tieni presente che a partire da questa versione, ci saranno nuove funzionalità che non verranno sottoposte a backporting nella versione 1.x. Ti consigliamo di passare alla versione 2.x.
Modifiche alle API
- È stata aggiunta l'inizializzazione on demand per WorkManager, che verrà creato
solo quando viene fatto riferimento. b/127497100 Per configurare il progetto per l'inizializzazione on demand:
- Disattiva l'inizializzatore automatico.
- Implementa
Configuration.Provider
sull'oggettoApplication
personalizzato. - Modifica tutti i riferimenti a
WorkManager.getInstance()
inWorkManager.getInstance(Context)
. Nell'ambito di questa modifica, abbiamo ritiratoWorkManager.getInstance()
. È sempre più sicuro chiamare la nuova sostituzioneWorkManager.getInstance(Context)
, anche se non esegui l'inizializzazione on demand.
- È stata aggiunta la possibilità di creare classi
Worker
eListenableWorker
testabili con unit test utilizzandoTestWorkerBuilder
eTestListenableWorkerBuilder
nell'artefattowork-testing
.- Tieni presente che
work-testing
ora include Kotlin come dipendenza, ma anche diverse estensioni Kotlin per impostazione predefinita.
- Tieni presente che
- È stato aggiunto il conteggio dei tentativi di esecuzione a
WorkInfo
. b/127290461 - Ora i tipi
Data
possono archiviare e recuperare byte e array di byte. Questa operazione NON modifica le dimensioni massime degli oggettiData
. CoroutineWorker.coroutineContext
deprecato. Questo campo è stato digitato erroneamente comeCoroutineDispatcher
; non dovresti più averne bisogno, in quanto puoi accedere al coroutineContext desiderato nel corpo della funzione di sospensione.RxWorker.createWork()
eRxWorker.getBackgroundScheduler()
ora sono annotati con i tipi restituiti@NonNull
.
Versione 2.0.1
Versione 2.0.1
9 aprile 2019
È stata rilasciata la versione 2.0.1 di WorkManager. Questa release è identica a 2.0.1-rc01.
Versione 2.0.1-rc01
3 aprile 2019
È stata rilasciata la versione 2.0.1-rc01 di WorkManager. Questa versione contiene alcune correzioni di bug. Per gli utenti della versione 1.x precedente, alcune di queste modifiche vengono visualizzate anche nella versione 1.0.1-rc01.
Correzioni di bug
- I test Robolectric ora funzionano correttamente con WorkManager. b/122553577
- È stato corretto un arresto anomalo in un caso limite in cui il monitoraggio dei vincoli non veniva pulito nelle API precedenti a JobScheduler. b/129226383
- È stato risolto un problema
StackOverflowError
relativo a lunghe catene di lavoro. b/129091233 - Documentazione aggiornata per
PeriodicWorkRequest
per indicare che l'orario flessibile non è supportato nell'API 23. - Sono stati corretti alcuni link non funzionanti nella documentazione di Kotlin.
Versione 2.0.0
Versione 2.0.0
20 marzo 2019
È stata rilasciata la versione 2.0.0 di WorkManager. Questa versione è identica alla 2.0.0-rc01 ed è la versione AndroidX della 1.0.0 stabile con dipendenze AndroidX. Ti consigliamo di scegliere come target questa versione anziché le versioni 1.x precedenti. Tutto lo sviluppo attivo avrà come target la versione 2.x e la versione 1.x riceverà solo correzioni di bug critici per un periodo di tempo limitato.
Versione 2.0.0-rc01
7 marzo 2019
È stata rilasciata la versione 2.0.0-rc01 di WorkManager. Questa versione è identica alla versione stabile 1.0.0, ma ha dipendenze AndroidX. Una volta raggiunta la versione stabile 2.0.0, dovresti includere questa versione e le versioni legacy 1.x riceveranno solo alcune correzioni di bug critici. Tutto lo sviluppo attivo avrà come target la versione 2.x.
Dipendenze precedenti ad AndroidX
Documentazione di riferimento: Java
Groovy
dependencies { def work_version = "1.0.1" // (Java only) implementation "android.arch.work:work-runtime:$work_version" // Kotlin + coroutines implementation "android.arch.work:work-runtime-ktx:$work_version" // optional - RxJava2 support implementation "android.arch.work:work-rxjava2:$work_version" // optional - Test helpers androidTestImplementation "android.arch.work:work-testing:$work_version" }
Kotlin
dependencies { val work_version = "1.0.1" // (Java only) implementation("android.arch.work:work-runtime:$work_version") // Kotlin + coroutines implementation("android.arch.work:work-runtime-ktx:$work_version") // optional - RxJava2 support implementation("android.arch.work:work-rxjava2:$work_version") // optional - Test helpers androidTestImplementation("android.arch.work:work-testing:$work_version") }
Versione 1.0.1
Versione 1.0.1
9 aprile 2019
Viene rilasciata la versione 1.0.1 di WorkManager. Questa release è identica a 1.0.1-rc01.
Tieni presente che consigliamo vivamente agli utenti di eseguire l'aggiornamento a WorkManager 2.x, in quanto in futuro verranno rilasciati pochissimi aggiornamenti per il ramo 1.x. Inoltre, non verranno rilasciate nuove API per la libreria 1.x.
Versione 1.0.1-rc01
2 aprile 2019
È stata rilasciata la versione 1.0.1-rc01 di WorkManager. Questa versione contiene alcune correzioni di bug.
Correzioni di bug
- I test Robolectric ora funzionano correttamente con WorkManager. b/122553577
- È stato corretto un arresto anomalo in un caso limite in cui il monitoraggio dei vincoli non veniva pulito nelle API precedenti a JobScheduler. b/129226383
- È stato risolto un problema
StackOverflowError
relativo a lunghe catene di lavoro. b/129091233
Versione 1.0.0
Versione 1.0.0
5 marzo 2019
Questa è la release stabile 1.0.0 di WorkManager. Questa versione di WorkManager è identica alla 1.0.0-rc02.
Versione 1.0.0-rc02
21 febbraio 2019
Questo è il secondo candidato al rilascio della versione stabile 1.0.0 di WorkManager. Questa release contiene due correzioni di bug.
Correzioni di bug
Worker
ora sono pianificati correttamente dopo l'arresto anomalo di un'applicazione. b/124546316Worker
che generano unException
non controllato ora sono contrassegnati correttamente comeFAILED
e non causano più l'arresto anomalo del processo dell'app.
Versione 1.0.0-rc01
14 febbraio 2019
Questo è un candidato per la release stabile 1.0.0 di WorkManager. Questa release contiene una correzione di bug.
Correzioni di bug
- L'implementazione basata su AlarmManager ora rispetta correttamente le finestre
flex
per PeriodicWorkRequest. b/124274584
Versione 1.0.0-beta05
6 febbraio 2019
Questa release contiene alcune correzioni di bug.
Correzioni di bug
- È stato corretto un caso in cui
JobScheduler.getPendingJob(...)
veniva utilizzato nell'API 23. b/123893059 - È stato corretto un
NullPointerException
sui dispositivi con Android 5.1 (livello API 22) o versioni precedenti. b/123835104
Versione 1.0.0-beta04
4 febbraio 2019
Questa release contiene alcune correzioni di bug.
Correzioni di bug
- Miglioramento della pianificazione di PeriodicWork per l'implementazione basata su AlarmManager.
- Risolto un caso in cui WorkManager non riusciva a monitorare correttamente i vincoli quando utilizzava l'implementazione basata su AlarmManager. b/123379508
- È stato corretto un caso in cui WorkManager non riusciva a riprovare a eseguire il lavoro in caso di interruzione del processo quando si utilizzava l'implementazione basata su AlarmManager. b/123329850
- È stato corretto un caso che causava la perdita di Wakelock da parte di WorkManager quando si utilizzava l'implementazione basata su AlarmManager.
Versione 1.0.0-beta03
25 gennaio 2019
Questa release contiene alcune correzioni di bug.
Correzioni di bug
- Abbiamo introdotto una regressione
1.0.0-beta02
che in alcune situazioni impediva l'esecuzione corretta del lavoro. b/123211993 - È stato risolto un caso in cui il backoff non veniva rispettato correttamente. b/122881597
- È stato corretto un
ConcurrentModificationException
sui dispositivi con Android 5.1 (API o) o versioni precedenti. Si tratta di un proseguimento della correzione in1.0.0-beta02
. b/121345393 - È stato aggiunto
exported=false
per alcuni componenti del nostro manifest a cui mancava questa annotazione. - Sono state incluse informazioni su come WorkManager interagisce con il sistema operativo nella documentazione a livello di pacchetto.
Versione 1.0.0-beta02
15 gennaio 2019
Questa release contiene alcune correzioni di bug.
Correzioni di bug
- È stato corretto un caso limite in cui il lavoro periodico poteva essere eseguito più di una volta per intervallo sui dispositivi con Android 6.0 (livello API 23). b/121998363
- È stato corretto un
ConcurrentModificationException
sui dispositivi con Android 5.1 (livello API 22) o versioni precedenti. b/121345393 - È stata corretta l'esecuzione errata del lavoro quando i vincoli non vengono soddisfatti sui dispositivi con Android 5.1 (livello API 22) o versioni precedenti. b/122578012
- Gestione ottimizzata del completamento del lavoro per essere più veloce in alcuni casi limite. b/122358129
- È stata aggiunta una modifica per risolvere potenziali race condition tra più istanze
di
LiveData
utilizzate da WorkManager. - È stato eseguito il passaggio all'utilizzo della dipendenza
Room
1.1.1
anziché1.1.1-rc01
; queste versioni sono identiche. b/122578011
Versione 1.0.0-beta01
19 dicembre 2018
Questa release non contiene modifiche all'API. In futuro, si prevede che WorkManager rimarrà stabile fino alla prossima versione, a meno che non si verifichi un problema critico. Questa release contiene alcune correzioni di bug.
Correzioni di bug
- I job secondari annullati in precedenza di un job principale completato correttamente non verranno più eseguiti. b/120811767
- Classi di logging inizializzate correttamente (visualizzate principalmente 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 per diventare una classe interna diListenableWorker
. In questo modo si evitano conflitti di refactoring con la classeResult
di primo livello di Kotlin. Si tratta di una modifica che causa interruzioni dell'API. b/120564418
Modifiche alle API che causano interruzioni
androidx.work.Result
è stato spostato per diventare una classe interna diListenableWorker
.
Versione 1.0.0-alpha12
5 dicembre 2018
Questa release contiene alcune modifiche all'API che provocano errori. Consulta la sezione Modifiche all'API che provocano errori di seguito. È probabile che questa versione venga rilasciata come prima beta. alpha12
contiene anche aggiornamenti dettagliati della documentazione.
Modifiche alle API
- Un nuovo elemento,
work-rxjava2
, introduceRxWorker
. Si tratta di unListenableWorker
che prevede unSingle<Payload>
. - Il supporto per Firebase JobDispatcher è stato rimosso a causa della sua imminente deprecazione. Ciò significa che l'artefatto
work-firebase
non verrà più aggiornato man mano che ci avviciniamo alla beta. Prenderemo in considerazione l'aggiunta di un'alternativa in futuro. Payload
combinato inResult
.Result
ora è una "classe sigillata" con tre implementazioni concrete, che puoi ottenere tramiteResult.success()
(oResult.success(Data)
),Result.failure()
(oResult.failure(Data)
) eResult.retry()
. Ora i tuoiListenableFuture
s danno come risultatoResult
anzichéPayload
.Worker
non dispone di metodi getter e setter per l'outputData
. Questa è una modifica che provoca un errore.- Sono stati aggiunti
Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit)
eConstraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit)
e le relative varianti per supportare meglio gli URI dei contenuti con attivazione lenta. b/119919774 - Aggiunta della variante
WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration)
. Questo metodo richiede l'API 26. - Sono stati aggiunti i metodi di estensione Kotlin
Operation.await()
eListenableFuture.await()
. Operation.getException()
rinominato inOperation.getThrowable()
. Questa è una modifica che provoca un errore.- La classe
ContentUriTriggers
e i metodi che vi fanno riferimento non sono più disponibili per l'utilizzo pubblico. Questa è 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 racchiudere i varargs esistenti conArrays.asList(...)
. Continuiamo a includere versioni a un solo argomento di ogni metodo. Questa è una modifica che provoca un errore. WorkContinuation.combine(OneTimeWorkRequest, *)
varianti rimosse. Stavano presentando un'API confusa; i metodicombine
esistenti sono più comprensibili. Questa è una modifica che provoca un errore.
Correzioni di bug
- Le implementazioni precedenti a Marshmallow ora sono più affidabili nel recupero dall'interruzione del processo di un'attività già in esecuzione.
LiveData
osservato tramiteobserveForever
viene monitorato tramite WorkManager. Si tratta di un backport di una correzione della libreria Room. b/74477406Data.Builder.build()
ora genera un'eccezione se l'oggetto serializzato supera le dimensioni massime. In precedenza, questo si verificava solo in un thread in background in cui non era possibile gestirlo correttamente.- È stata ulteriormente distinta l'interruzione dal lavoro annullato;
getWorkInfoById()
restituirà unWorkInfo
conCANCELLED
State
duranteListenableWorker.onStopped()
. - Considera
null
Result
come errori inListenableWorker
. b/120362353 - Correzione speculativa per i tablet Shield che eseguono l'API 24 e che a volte generavano un errore
IllegalArgumentException
. b/119484416
Modifiche alle API che causano interruzioni
- Il supporto per Firebase JobDispatcher è stato rimosso a causa della sua imminente deprecazione. Ciò significa che l'artefatto
work-firebase
non verrà più aggiornato man mano che ci avviciniamo alla beta. Prenderemo in considerazione l'aggiunta di un'alternativa in futuro. Payload
combinato inResult
.Result
ora è una "classe sigillata" con tre implementazioni concrete, che puoi ottenere tramiteResult.success()
(oResult.success(Data)
),Result.failure()
(oResult.failure(Data)
) eResult.retry()
. Ora i tuoiListenableFuture
s danno come risultatoResult
anzichéPayload
.Worker
non dispone di metodi getter e setter per l'outputData
.- Sono stati aggiunti i metodi di estensione Kotlin
Operation.await()
eListenableFuture.await()
. Operation.getException()
rinominato inOperation.getThrowable()
.- La classe
ContentUriTriggers
e i metodi che vi fanno riferimento non sono più disponibili per l'utilizzo pubblico. - Sono stati rimossi gli altri metodi varargs in
WorkManager
,WorkContinuation
eOneTimeWorkRequest
per semplificare l'API. Per risolvere eventuali problemi di compilazione, puoi racchiudere i varargs esistenti conArrays.asList(...)
. Continuiamo a includere versioni a un solo argomento di ogni metodo. WorkContinuation.combine(OneTimeWorkRequest, *)
varianti rimosse. Stavano 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 stabili il giorno beta
.
In questa release sono presenti modifiche all'API che provocano errori. Consulta la sezione Modifiche all'API che provocano errori di seguito.
Modifiche alle API
work-runtime-ktx
introduce un nuovoCoroutineWorker
.WorkStatus
è stato rinominato inWorkInfo
. Tutte le varianti del metodogetStatus
corrispondenti sono state rinominate nelle variantigetWorkInfo
corrispondenti. Questa è una modifica che provoca un errore.ListenableWorker.onStopped()
non accetta più un argomento booleano che indica seWorkRequest
è stato annullato.WorkManager
non fa più questa distinzione. Questa è una modifica che provoca un errore.- Il pacchetto
androidx.work.test
è stato rinominato in pacchettoandroidx.work.testing
. Questa è una modifica che provoca un errore. - I setter su
Constraints
non fanno più parte dell'API pubblica. Questa è una modifica che provoca un errore. WorkerParameters.getTriggeredContentUris()
eWorkerParameters.getTriggeredContentAuthorities()
restituivano in precedenza array. Ora questi metodi restituiscono raccolte. Questa è una modifica che provoca un errore.ListenableWorker.onStartWork()
è stato rinominato inListenableWorker.startWork()
. Questa è una modifica che provoca un errore.- Il costruttore per
WorkStatus
non fa più parte dell'API pubblica. Questa è una modifica che provoca un errore. Configuration.getMaxJobSchedulerID()
eConfiguration.getMinJobSchedulerID()
vengono rinominati inConfiguration.getMinJobSchedulerId()
eConfiguration.getMaxJobSchedulerId()
rispettivamente. Questa è 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 mettere in codaOneTimeWorkRequest
univoci senza dover creare unWorkContinuation
. - Tutte le varianti dei metodi
enqueue
ecancel
suWorkManager
ora restituiscono un nuovo tipoOperation
. Questa è una modifica che provoca un errore. - Tutte le varianti di
enqueue
non accettano più varargs perWorkRequest
. Questa è una modifica che provoca un errore. Utilizza invece le raccolte. Puoi utilizzareArrays.asList()
per modificare il codice esistente. Abbiamo apportato questa modifica per ridurre la superficie API e il numero di metodi. - Il tentativo di
initialize
WorkManager
più di una volta per processo ora comporterà unIllegalStateException
. Questa è una modifica che provoca un errore.
Correzioni di bug
- Gli
WorkRequest.Builder
nell'artefattowork-runtime-ktx
ora utilizzano gliListenableWorker
. Correzioni b/117666259 - Assicurati che la prossima esecuzione per
PeriodicWork
sia futura. Correzioni b/118204399 - Rimuovi il potenziale I/O del disco quando utilizzi WorkManager all'avvio dell'app. Correzioni b/117796731
- Correzione di una race condition in
WorkConstraintsTracker
. Correzioni android-workmanager/issues/56
Modifiche alle API che causano interruzioni
WorkStatus
è stato rinominato inWorkInfo
. Tutte le varianti del metodogetStatus
corrispondenti sono state rinominate nelle variantigetWorkInfo
corrispondenti.ListenableWorker.onStopped()
non accetta più un argomento booleano che indica seWorkRequest
è stato annullato.WorkManager
non fa più questa distinzione.- Il pacchetto
androidx.work.test
è stato rinominato in pacchettoandroidx.work.testing
. - I setter su
Constraints
non fanno più parte dell'API pubblica. WorkerParameters.getTriggeredContentUris()
eWorkerParameters.getTriggeredContentAuthorities()
restituivano in precedenza array. Ora questi metodi restituiscono raccolte.ListenableWorker.onStartWork()
è stato rinominato inListenableWorker.startWork()
.- Il costruttore per
WorkStatus
non fa più parte dell'API pubblica. Configuration.getMaxJobSchedulerID()
eConfiguration.getMinJobSchedulerID()
vengono rinominati inConfiguration.getMinJobSchedulerId()
eConfiguration.getMaxJobSchedulerId()
rispettivamente.- Tutte le varianti dei metodi
enqueue
ecancel
suWorkManager
ora restituiscono un nuovo tipoOperation
. - Tutte le varianti di
enqueue
non accettano più varargs perWorkRequest
. - Il tentativo di
initialize
WorkManager
più di una volta per processo ora comporterà unIllegalStateException
.
Versione 1.0.0-alpha10
11 ottobre 2018
Questa release supporta il lavoro asincrono controllato dagli sviluppatori. In questa release sono presenti modifiche all'API che provocano errori. Consulta la sezione Modifiche all'API che provocano errori di seguito.
Prevediamo che WorkManager stia entrando nelle fasi finali del periodo alpha. Prevediamo che l'API sia stabile nella versione beta, quindi ti invitiamo a dedicare un po' di tempo a inviare il tuo feedback nel nostro strumento di monitoraggio dei problemi.
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 dell'API. NonBlockingWorker
è stato rinominato inListenableWorker
, che ora è una classe pubblica non nascosta e pronta per l'uso.ListenableWorker
fornisce l'accesso a un metodo astratto,ListenableFuture<Payload> onStartWork()
, chiamato sul thread principale. Spetta a te avviare ed elaborare il lavoro in modo asincrono. Al termine, devi aggiornareListenableFuture
in modo appropriato. Le implementazioni di riferimento diListenableFuture
sono fornite nel pacchettoFutures
inalpha02
(vedi la sezioneWorkManager
di seguito).Worker
estendeListenableWorker
e funziona ancora come prima, con un metodo astrattoResult doWork()
.- Alcuni metodi e membri sono stati spostati da
Worker
aListenableWorker
. - A breve forniremo implementazioni di riferimento per
ListenableWorker
che utilizzano le coroutine Kotlin (una volta rilasciate le versioni stabili) e RxJava2.
- L'interfaccia
WorkerFactory
e l'implementazione concretaDefaultWorkerFactory
sono state unite in una classe astratta denominataWorkerFactory
. L'implementazione garantisce che il comportamento predefinito basato sulla reflection venga chiamato come ultimo tentativo per qualsiasi istanzaWorkerFactory
creata dall'utente. Questa è una modifica che provoca un errore. - Sono stati rimossi
WorkManager.synchronous()
eWorkContinuation.synchronous()
e tutti i metodi correlati. È stato aggiuntoListenableFuture<Void>
come tipo restituito di molti metodi dell'API. Questa è una modifica che provoca un errore dell'API.- Ora puoi ottenere e osservare in modo sincrono utilizzando
ListenableFuture
. Ad esempio,WorkManager.enqueue()
restituivavoid
, mentre ora restituisceListenableFuture<Void>
. Puoi chiamareListenableFuture.addListener(Runnable, Executor)
oListenableFuture.get()
per eseguire il codice una volta completata l'operazione. - Tieni presente che questi
ListenableFuture
non indicano se l'operazione è riuscita o meno, ma solo che è stata completata. Per trovare queste informazioni, dovrai comunque concatenare i metodi WorkManager. - Ignoriamo le chiamate
cancel()
su questi oggetti, in quanto sono confuse e difficili da interpretare (stai annullando l'operazione o il lavoro risultante?). Ciò rientra nel contratto diFuture
. - Per mantenere la parità con i metodi sincroni
getStatus*
, abbiamo fornito variantiListenableFuture
e rinominato quelle esistenti che restituivanoLiveData
in modo che avessero esplicitamente "LiveData" come parte del nome (ad esempio,getStatusesByIdLiveData(UUID)
). Si tratta di una modifica che causa interruzioni dell'API.
- Ora puoi ottenere e osservare in modo sincrono utilizzando
Correzioni di bug
- È stato risolto il problema noto della versione alpha09 relativo ai file
androidx-annotations.pro
duplicati. Puoi rimuovere la soluzione alternativa dalle note di rilascio precedenti eliminandoexclude 'META-INF/proguard/androidx-annotations.pro'
dal file gradle. - Sono state aggiunte configurazioni Proguard per mantenere il nuovo costruttore
Worker
. b/116296569 - Correzione del potenziale
NullPointerException
in una condizione di competizione 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
Modifiche alle API che causano interruzioni
- 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
. - Rimossi
WorkManager.synchronous()
eWorkContinuation.synchronous()
. - I metodi
WorkManager.getStatus*()
ora restituisconoListenableFuture
.WorkManager.getStatus*LiveData()
restituisceLiveData
.
Versione 1.0.0-alpha09
19 settembre 2018
Problema noto
Se riscontri il seguente problema: "È stato trovato più di un file con il percorso indipendente dal sistema operativo "META-INF/proguard/androidx-annotations.pro"", inserisci quanto segue nel file gradle come soluzione alternativa temporanea mentre risolviamo il problema in alpha10:
Groovy
android { packagingOptions { exclude 'META-INF/proguard/androidx-annotations.pro' } }
Kotlin
android { packagingOptions { exclude("META-INF/proguard/androidx-annotations.pro") } }
Correzioni di bug
- È stata aggiunta un'altra correzione necessaria per l'errore "100 lavori". b/115560696
- Sono state aggiunte alcune correzioni per gli errori di vincolo di chiave esterna dovuti a race condition. b/114705286
- Chiamate delegate
ConstraintTrackingWorker.onStopped(boolean)
alWorker
sottostante. b/114125093 - Applica il ritardo di backoff minimo corretto per Firebase JobDispatcher. b/113304626
- Il threading migliorato garantisce l'accesso interno alla libreria.
- È stato corretto un potenziale problema di deduplica di
LiveData
internamente.
Modifiche alle API
- Ora puoi creare le tue istanze
Worker
in fase di runtime specificando unWorkerFactory
come parte diWorkManager.Configuration
. La factory di riserva èDefaultWorkerFactory
, che corrisponde al comportamento delle versioni precedenti di WorkManager.- I costruttori predefiniti per
Worker
eNonBlockingWorker
ora sono contrassegnati come ritirati. Utilizza il nuovo costruttore (Worker(Context, WorkerParameters)
) e chiamasuper(Context, WorkerParameters)
; le versioni future di WorkManager rimuoveranno il costruttore predefinito.
- I costruttori predefiniti per
- Abbiamo iniziato a utilizzare internamente il nuovo artefatto
ListenableFuture
(senza dipendenze da Guava). Introdurremo ListenableFuture nell'API nelle prossime release. Questa modifica supporterà la visualizzazione diNonBlockingWorker
. - Aggiungi la possibilità di attivare il lavoro a tempo in
TestDriver
tramiteTestDriver.setInitialDelayMet(UUID)
eTestDriver.setPeriodDelayMet(UUID)
. b/113360060
Modifiche che provocano un errore
- I costruttori predefiniti
Worker
eNonBlockingWorker
sono 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
- I componenti WorkManager etichettati in modo esplicito come non compatibili con l'avvio diretto, in modo che non vengano avviati durante l'avvio diretto. In futuro, forniremo una versione di WorkManager compatibile con l'avvio diretto. b/112665532
- È stato risolto un problema per cui il lavoro ripetuto non veniva eseguito. b/112604021
- È stato risolto il problema relativo all'esecuzione ripetuta di attività periodiche (correlato al problema precedente). b/112859683
- Vengono rispettate le norme di backoff quando il processo dell'app è già in esecuzione.
- Sono stati corretti i messaggi di eccezione in
Data
per indicare che il limite è di 10 KB. - Il valore massimo di
Configuration.setMaxSchedulerLimit(int)
è stato ridotto a 50 per tenere conto di una certa latenza nel completamento dell'elaborazione diJobScheduler
. b/112817355
Versione 1.0.0-alpha07
16 agosto 2018
Correzioni di bug
- È stata corretta una potenziale query SQL con limiti negativi che potrebbe restituire un numero illimitato di risultati.
- Il lavoro che ha terminato l'esecuzione ora annulla correttamente tutte le copie in attesa di questo lavoro in altri Schedulers. Ciò ha comportato il superamento del limite di
JobScheduler
job. b/111569265 - È stato corretto un
ConcurrentModificationException
inConstraintTracker
. b/112272753 - Sono state modificate le annotazioni del tipo restituito di
Data.getBooleanArray(String)
eData.getIntArray(String)
in@Nullable
anziché@NonNull
. b/112275229
Modifiche alle API
Worker
ora offre un nuovo corso,NonBlockingWorker
. Questa operazione non influisce sull'utilizzo attuale. In futuro,NonBlockingWorker
diventerà un'entità completamente supportata per le soluzioni di threading personalizzate.- Sono state modificate le annotazioni del tipo restituito di
Data.getBooleanArray(String)
eData.getIntArray(String)
in@Nullable
anziché@NonNull
. b/112275229 - Estensioni Kotlin: è stato ritirato
Map.toWorkData()
ed è stato aggiunto unworkDataOf(vararg Pair<String, Any?>)
di primo livello per una maggiore coerenza con le API esistenti.
Versione 1.0.0-alpha06
1 agosto 2018
Correzioni di bug
- Evita il blocco del database durante la pianificazione del lavoro. b/111801342
- Correzione di un bug che impedisce l'esecuzione di
PeriodicWork
in base alla pianificazione in modalità Doze. b/111469837 - Correzione di una condizione di competizione durante il monitoraggio dei vincoli che causa l'arresto anomalo di
WorkManager
. googlecodelabs/android-workmanager/issues/56 - Crea
WorkRequest
unici 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 è annotato con@NonNull
anziché@Nullable
. Se il singleton non viene inizializzato correttamente nei casi di inizializzazione manuale, il metodo genererà unIllegalStateException
. Si tratta di una modifica dell'API che causa interruzioni.- È stata aggiunta una nuova API,
Configuration.Builder.setMinimumLoggingLevel(int)
, che può controllare il livello di dettaglio di WorkManager. Per impostazione predefinita, WorkManager registra i logLog.INFO
e versioni successive. - Modifica della firma di
Data.getString()
in modo che non accetti più un valore predefinito (è implicitamentenull
). Si tratta di una modifica dell'API che causa interruzioni. - Alcuni metodi necessari solo per l'utilizzo interno sono stati contrassegnati come
@hide
. Sono inclusi il costruttoreConstraints
,Data.toByteArray()
eData.fromByteArray(byte[])
. Questa è una modifica che provoca un errore dell'API.
Correzioni di bug
- WorkManager non esegue più il lavoro durante i casi noti di backup automatico. Ciò potrebbe aver causato un arresto anomalo. b/110564377
- È stata corretta la doppia pianificazione delle
PeriodicWorkRequest
quando si utilizzaJobScheduler
. b/110798652 - È stato risolto un problema relativo all'esecuzione non corretta di
PeriodicWorkRequest
dopo la sospensione del dispositivo. b/111469837 - Risolto un problema relativo ai ritardi iniziali quando si utilizza Firebase JobDispatcher. b/111141023
- Sono stati corretti alcuni potenziali problemi di race condition e di sincronizzazione.
BroadcastReceiver
s che non erano più necessari sono stati liberati correttamente.- Prestazioni di riprogrammazione ottimizzate quando le app vengono riavviate dopo la chiusura forzata.
- Consente di chiamare
TestScheduler.setAllConstraintsMet(UUID)
prima o dopo l'accodamento diWorkRequest
specificato. b/111238024
Modifiche che provocano un errore
WorkManager.getInstance()
ora è annotato con@NonNull
anziché@Nullable
.- È stata modificata la firma di
Data.getString()
in modo che non accetti più un valore predefinito (è implicitamentenull
). - Alcuni metodi necessari solo per l'utilizzo interno sono stati contrassegnati come
@hide
. Sono inclusi il costruttoreConstraints
,Data.toByteArray()
eData.fromByteArray(byte[])
.
Versione 1.0.0-alpha04
26 giugno 2018
Correzioni di bug
- Ora le
PeriodicWorkRequest
vengono riprogrammate correttamente quando si utilizza l'implementazione basata suAlarmManager
. - È stato risolto un potenziale errore ANR durante la riprogrammazione di tutti i worker dopo un arresto forzato o un riavvio. b/110507716
- Sono state aggiunte annotazioni di nullabilità a varie API WorkManager. b/110344065
- Registra le eccezioni non rilevate che si verificano durante l'esecuzione del worker. b/109900862
- Sono state consentite migrazioni distruttive del database nel caso in cui tu decida di eseguire il rollback a una versione precedente di WorkManager. b/74633270
- È stato corretto un arresto anomalo della migrazione se vengono creati tag impliciti duplicati. Si tratta di un problema molto raro che si è verificato solo se hai utilizzato lo stesso formato di tag implicito.
Versione 1.0.0-alpha03
19 giugno 2018
Correzioni di bug
È stata corretta una condizione di competizione nell'implementazione basata su
AlarmManager
. b/80346526.È stato risolto il problema dei lavori duplicati quando si utilizza
JobScheduler
dopo il riavvio di un dispositivo.I job con trigger URI contenuto ora vengono mantenuti dopo i riavvii. b/80234744
Aggiornamenti della documentazione. b/109827628, b/109758949, b/80230748
È stato corretto un arresto anomalo durante il reinserimento in coda di un
WorkRequest
. b/109572353.Sono stati corretti gli avvisi del compilatore Kotlin quando viene utilizzata la dipendenza
work-runtime-ktx
.WorkManager ora utilizza la versione
1.1.1-rc1
diRoom
.
Modifiche alle API
- È stata aggiunta
getStatusesSync()
, la versione sincrona diWorkContinuation.getStatuses()
. Worker
è in grado di distinguere tra l'annullamento avviato dall'utente e l'interruzione temporanea richiesta dal sistema operativo.Worker.isStopped()
restituiscetrue
se è stato richiesto un arresto di qualsiasi tipo.Worker.isCancelled()
restituiscetrue
quando il lavoro è stato annullato esplicitamente. b/79632247- Aggiungi il supporto per JobParameters#getNetwork() nell'API 28. Questo valore viene esposto tramite
Worker.getNetwork()
. - È stato aggiunto
Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit)
per consentirti di applicare un limite al numero di job che possono essere inviati aJobScheduler
oAlarmManager
. In questo modo,WorkManager
non occuperà tutti gli slotJobScheduler
disponibili. - È stato aggiunto
Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId)
, che consente di definire un intervallo di ID job sicuro da utilizzare perWorkManager
. b/79996760JobScheduler
Worker.getRunAttemptCount()
restituisce il conteggio delle esecuzioni corrente per un determinatoWorker
. b/79716516WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork)
ti consente di mettere in codaPeriodicWorkRequest
unici. b/79600647WorkManager.cancelAllWork()
annulla tutti iWorker
. Le librerie che dipendono daWorkManager
possono eseguire query sull'ultima chiamata di questo metodo utilizzandoWorkManager.getLastCancelAllTimeMillis()
per un'ulteriore pulizia dello stato interno.- È stato aggiunto
WorkManager.pruneWork()
per rimuovere i lavori completati dal database interno. b/79950952, b/109710758
Modifiche al comportamento
- È stato aggiunto un tag implicito per tutti i
WorkRequest
, ovvero il nome di classe completo perWorker
. Ciò consente di rimuovere iWorkRequest
senzatag
o quandoid
non è disponibile. b/109572351
Modifiche che provocano un errore
Worker.WorkerResult
rinominato inWorker.Result
.Worker.onStopped
ora ha un parametro aggiuntivoisCancelled
impostato sutrue
quandoWorker
è stato annullato in modo esplicito.
Versione 1.0.0-alpha02
24 maggio 2018
Correzioni di bug
- È stato corretto un
NullPointerException
il giornoState.isFinished()
. b/79550068 - È stato risolto un problema che causava la riprogrammazione di
Worker
il giornoApplication.onCreate()
. b/79660657 - È stato risolto un problema per cui era possibile pianificare più lavoro di quanto consentito dal sistema operativo. b/79497378
- Lo svuotamento dei wakelock associati a
Worker
è stato spostato nel thread in background. - L'implementazione di
AlarmManager
ora esegue la pulizia correttamente al termine di tutto il lavoro in attesa. - Sono state corrette le query SQL di pulizia che interessavano le impostazioni internazionali non inglesi. b/80065360
- È stato aggiunto il supporto per
float
inData
. b/79443878 Data.Builder.putAll()
ora restituisce un'istanza diBuilder
. b/79699162- Altre javadoc e correzioni nella documentazione. b/79691663
Modifiche alle API
Worker
possono reagire all'arresto.Worker.isStopped()
può essere utilizzato per verificare se unWorker
è stato interrotto.Worker.onStopped()
può essere utilizzato per eseguire operazioni di pulizia leggere.- L'API
Worker.getTags()
restituisce unSet
di tag associati aWorker
. - Sono stati aggiunti overload
javax.time.Duration
per le API che accettano una combinazione di durata eTimeUnit
. È protetto da@RequiresApi(26)
. WorkManager
estensioni sono state spostate dal pacchettoandroidx.work.ktx
al pacchettoandroidx.work
. Le vecchie estensioni sono ritirate e verranno rimosse in una versione futura.Configuration.withExecutor()
è deprecato. Utilizza inveceConfiguration.setExecutor()
.
Versione 1.0.0-alpha01
8 maggio 2018
WorkManager semplifica la pianificazione e l'esecuzione di
operazioni in background garantite e sensibili ai vincoli. Questa release iniziale è 1.0.0-alpha01
.