WorkManager

L'API WorkManager semplifica la pianificazione di attività asincrone differibili che devono essere eseguite in modo affidabile. Queste API ti consentono di creare un'attività e di assegnarla a WorkManager per l'esecuzione quando i vincoli di lavoro sono soddisfatti.
Ultimo aggiornamento Release stabile Candidato per la release Versione beta Versione alpha
30 ottobre 2024 2.10.0 - - -

Dichiarazione delle dipendenze

Per aggiungere una dipendenza da WorkManager, devi aggiungere il repository Maven di Google al tuo progetto:

Aggiungi le dipendenze per gli elementi necessari nel file build.gradle per la tua app o il tuo modulo:

Alla moda

dependencies {
    def work_version = "2.9.1"

    // (Java only)
    implementation "androidx.work:work-runtime:$work_version"

    // Kotlin + coroutines
    implementation "androidx.work:work-runtime-ktx:$work_version"

    // optional - RxJava2 support
    implementation "androidx.work:work-rxjava2:$work_version"

    // optional - GCMNetworkManager support
    implementation "androidx.work:work-gcm:$work_version"

    // optional - Test helpers
    androidTestImplementation "androidx.work:work-testing:$work_version"

    // optional - Multiprocess support
    implementation "androidx.work:work-multiprocess:$work_version"
}

Kotlin

dependencies {
    val work_version = "2.9.1"

    // (Java only)
    implementation("androidx.work:work-runtime:$work_version")

    // Kotlin + coroutines
    implementation("androidx.work:work-runtime-ktx:$work_version")

    // optional - RxJava2 support
    implementation("androidx.work:work-rxjava2:$work_version")

    // optional - GCMNetworkManager support
    implementation("androidx.work:work-gcm:$work_version")

    // optional - Test helpers
    androidTestImplementation("androidx.work:work-testing:$work_version")

    // optional - Multiprocess support
    implementation("androidx.work:work-multiprocess:$work_version")
}

Per informazioni sull'utilizzo delle estensioni Kotlin, consulta la documentazione di ktx.

Per ulteriori informazioni sulle dipendenze, consulta Aggiungere dipendenze di compilazione.

Feedback

Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se riscontri nuovi problemi o hai idee per migliorare questa raccolta. Prima di crearne uno nuovo, dai un'occhiata ai problemi esistenti in questa raccolta. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.

Creare un nuovo problema

Per ulteriori informazioni, consulta la documentazione del Monitoraggio problemi.

Versione 2.10

Versione 2.10.0

30 ottobre 2024

androidx.work:work-*:2.10.0 viene rilasciato. La versione 2.10.0 contiene questi commit.

Modifiche significative dalla versione 2.9.1

  • Sono stati aggiunti tag di traccia ai job da WorkManager, il che rende "adb shell dumpsys jobscheduler" molto più facile da comprendere, poiché conterrà il nome del worker in esecuzione. Vengono aggiunte anche sezioni di traccia intorno alle aree chiave di WorkManager.
  • Configuration.workerCoroutineContext è stato aggiunto per il controllo del gestore in cui viene eseguito CoroutineWorker.
  • Gli sviluppatori possono specificare NetworkRequest come vincolo per un worker tramite il metodo Constraints.setRequiredNetworkRequest. In questo modo, puoi avere un controllo più granulare sulla rete su cui deve essere eseguito questo worker.
  • WorkManager 2.10.0 ora viene compilato 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 rilasciato. La versione 2.10.0-rc01 contiene questi commit.

Versione 2.10.0-beta01

2 ottobre 2024

androidx.work:work-*:2.10.0-beta01 viene rilasciato. La versione 2.10.0-beta01 contiene questi commit.

Versione 2.10.0-alpha04

18 settembre 2024

androidx.work:work-*:2.10.0-alpha04 viene rilasciato. La versione 2.10.0-alpha04 contiene questi commit.

Modifiche all'API

  • Aggiungi il motivo dell'interruzione STOP_REASON_FOREGROUND_SERVICE_TIMEOUT per quando un worker in primo piano viene interrotto a causa del timeout di esecuzione in base al tipo di servizio in primo piano. (Ibd0af)

Versione 2.10.0-alpha03

4 settembre 2024

androidx.work:work-*:2.10.0-alpha03 viene rilasciato. La versione 2.10.0-alpha03 contiene questi commit.

Nuove funzionalità

  • Sono stati aggiunti tag di traccia ai job da WorkManager, il che rende "adb shell dumpsys jobscheduler" molto più facile da comprendere, poiché conterrà il nome del worker in esecuzione. Vengono aggiunte anche sezioni di traccia intorno alle aree chiave di WorkManager.

Modifiche all'API

  • WorkManager 2.10.0 viene ora compilato con l'SDK 35.
  • Correggere il timeout dei thread in primo piano di tipo "servizio breve" e "sincronizzazione dei dati" che causano un ANR quando WorkManager non chiama stopSelf(). Questa correzione si applica solo ai dispositivi con API 34 e 35 in cui sono stati introdotti i tipi di servizi in primo piano. (ca06b2, b/364508145)
  • Nuove API WorkerParameters che consentono di cambiare il processo remoto a cui si associa Worker quando si utilizza un WorkerFactory. (Ibdc8a, Ie8a90, I7373f)

Correzioni di bug

  • È stato corretto un arresto anomalo causato dal tentativo di WorkManager di riavviare un worker a lungo termine (ovvero un worker in primo piano) quando il tipo di lavoro in primo piano aveva autorizzazioni di prerequisito di Android 14 revocate. (b/333957914)
  • È stato rimosso il riepilogo manuale dell'accesso alle nuove API di piattaforma, poiché questo avviene automaticamente tramite la definizione del modello API quando si utilizza R8 con AGP 7.3 o versioni successive (ad es. R8 versione 3.3) e per tutte le build quando si utilizza AGP 8.1 o versioni successive (ad es. D8 versione 8.1). Agli utenti che non utilizzano AGP è consigliato di 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 rilasciato. La versione 2.10.0-alpha02 contiene questi commit.

Modifiche all'API

  • È stata aggiunta la possibilità di emettere intervalli di traccia tramite un @RestrictTo Tracer configurabile in WorkManager. (I17d7f, b/260214125)
  • Configuration.workerCoroutineContext è stato aggiunto per il controllo del gestore in cui viene eseguito CoroutineWorker. Consente di evitare completamente l'utilizzo di Dispatchers.Default in WorkManager. (Icd1b7)
  • Aggiungi gestori delle eccezioni personalizzati per i worker (Ib1b74, b/261190695)
  • Ora OneTimeWorkRequest.Builder e PeriodicWorkRequest.Builder possono essere costruiti con KClass anziché Class: val request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build() (Ib55f6)
  • È stata eseguita la migrazione del corso WorkManager a Kotlin. Ora i metodi che restituiscono LiveData, ListenableFuture o Flow forniscono informazioni corrette sulla nullabilità. Potrebbero essere necessarie modifiche al codice sorgente dei clienti, se le ipotesi sulla nullità in quel codice non sono corrette. (If6757)

Versione 2.10.0-alpha01

24 gennaio 2024

androidx.work:work-*:2.10.0-alpha01 viene rilasciato. La versione 2.10.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Gli sviluppatori possono specificare NetworkRequest come vincolo per un worker tramite il metodo Constraints.setRequiredNetworkRequest. In questo modo, puoi avere un controllo più granulare sulla rete su cui deve essere eseguito questo worker.

Modifiche all'API

  • È stata aggiunta la possibilità di specificare NetworkRequest come vincolo. (Id98a1, b/280634452)

Versione 2.9

Versione 2.9.1

7 agosto 2024

androidx.work:work-*:2.9.1 viene rilasciato. La versione 2.9.1 contiene questi commit.

Correzioni di bug

Versione 2.9.0

29 novembre 2023

androidx.work:work-*:2.9.0 viene rilasciato. La versione 2.9.0 contiene questi commit.

Modifiche importanti dalla versione 2.8.0

  • Osservabilità tramite Flow. Anziché LiveData, ora l'avanzamento del lavoratore può essere osservato tramite WorkManager.getWorkInfosFlow e metodi simili di Flow.
  • Ora WorkManager fornisce un suggerimento sul motivo per cui un worker è stato interrotto in precedenza. È possibile eseguire query da un worker stesso tramite il metodo getStopReason() o da WorkInfo tramite getStopReason().
  • Programmazione precisa dei job periodici tramite setNextScheduleTimeOverride. Ciò consente il calcolo dinamico della pianificazione del lavoro periodico successiva, che può essere utilizzata per implementare funzionalità avanzate come i tempi di aggiornamento adattivi, il comportamento di ripetizione personalizzato o l'esecuzione di un job del feed di notizie prima che l'utente si svegli ogni mattina senza deriva. ExistingPeriodicWorkPolicy.UPDATE deve essere utilizzato con queste tecniche per evitare di annullare un worker in esecuzione mentre ne viene pianificato un altro.
  • Test di WorkManager con la produzione di threading corrispondente. ExecutorsMode.PRESERVE_EXECUTORS può essere utilizzato in initializeTestWorkManager per conservare gli esecutori impostati in Configuration e per utilizzare il thread principale reale.
  • Le API di coroutine come CoroutineWorker sono state spostate dall'elemento aggiuntivo work-runtime-ktx all'elemento principale work-runtime. work-runtime-ktx ora è vuoto.

Modifiche all'API

  • stopReason è stato aggiunto a WorkInfo. Rende stopReason disponibile dopo l'esecuzione del worker. Potrebbe essere utile per i report stopReason in modo utilizzabile, perché una volta interrotto un worker, un'app stessa potrebbe essere interrotta molto rapidamente. (I21386)
  • Consenti di impostare Clock tramite la configurazione e di utilizzarlo per definire la sequenza di esecuzione dei test dei worker. (Ic586e)
  • Al metodo ListenableWorker è stato aggiunto il metodo getStopReason() che fornisce un suggerimento sul motivo dell'arresto del worker. (I07060)
  • È stato aggiunto WorkManagerTestInitHelper#closeWorkDatabase() per evitare l'avviso di Closeguard sulle risorse con accesso non autorizzato. (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 per Kotlin sono ora disponibili nell'artifact principale di work-runtime. (I71a9a)
  • È stato aggiunto il metodo setNextScheduleTimeOverride, che consente di impostare con precisione le pianificazioni di lavoro periodiche (I3b4da)
  • È stato aggiunto getNextScheduleTimeMillis per ottenere informazioni sull'ora di esecuzione pianificata in WorkInfo. (I797e4)
  • Le informazioni sul ritardo iniziale e sulla periodicità vengono aggiunte a WorkInfo. (I52f2f)
  • È stato aggiunto il metodo di osservazione dei lavoratori tramite i flussi tramite i metodi getWorkInfosByTagFlow, getWorkInfoByIdFlow, getWorkInfosForUniqueWorkFlow, getWorkInfosFlow (If122a)
  • Sono state aggiunte le annotazioni @RequiresApi(...) mancanti ai costruttori e alle proprietà di Constraints. Ora sono in linea con le annotazioni corrispondenti sui setter in Constraints.Builder esistenti nelle versioni precedenti di WorkManager. (I6d7d2)
  • WorkManager ora ha un limite separato per i worker URI dei contenuti per assegnare loro slot garantiti in JobScheduler al fine di evitare aggiornamenti mancanti dei contenuti in caso di carico elevato. Il limite può essere configurato tramite Configuration.Builder.setContentUriTriggerWorkersLimit. (Ic128f)
  • I vincoli vengono aggiunti a WorkInfo. (I162c0)

Versione 2.9.0-rc01

18 ottobre 2023

androidx.work:work-*:2.9.0-rc01 viene rilasciato. La versione 2.9.0-rc01 contiene questi commit.

  • Nessuna modifica dall'ultima release beta

Versione 2.9.0-beta01

6 settembre 2023

androidx.work:work-*:2.9.0-beta01 viene rilasciato. La versione 2.9.0-beta01 contiene questi commit.

Modifiche all'API

Versione 2.9.0-alpha02

26 luglio 2023

androidx.work:work-*:2.9.0-alpha02 viene rilasciato. La versione 2.9.0-alpha02 contiene questi commit.

Nuove funzionalità

  • Ora WorkManager fornisce un suggerimento sul motivo per cui un worker è stato interrotto in precedenza. È possibile eseguire query da un worker stesso tramite il metodo getStopReason() o da WorkInfo tramite getStopReason().

Modifiche all'API

  • stopReason è stato aggiunto a WorkInfo. Rende disponibile stopReason dopo l'esecuzione del worker. Potrebbe essere utile per i report stopReason in modo utilizzabile, perché una volta interrotto un worker, un'app stessa potrebbe essere interrotta molto rapidamente. (I21386)
  • Consenti di impostare l'orologio tramite la configurazione e di utilizzarlo per definire la sequenza di esecuzione dei test dei worker. (Ic586e)
  • Al metodo getStopReason() è stato aggiunto ListenableWorker che fornisce un suggerimento sul motivo dell'interruzione del worker. (I07060)
  • È stato aggiunto WorkManagerTestInitHelper#closeWorkDatabase() per evitare l'avviso di Closeguard sulle risorse con accesso non autorizzato. (Ia8d49)

Correzioni di bug

  • È stata aggiunta la possibilità di bypassare overrideNextScheduleTime utilizzando TestDriver e sono stati risolti i problemi di testabilità. (Ic2905)

Versione 2.9.0-alpha01

7 giugno 2023

androidx.work:work-*:2.9.0-alpha01 viene rilasciato. La versione 2.9.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Osservabilità tramite Flow. Anziché LiveData, ora l'avanzamento del lavoratore può essere osservato tramite WorkManager.getWorkInfosFlow e metodi simili di Flow.
  • Programmazione precisa dei job periodici tramite setNextScheduleTimeOverride. Ciò consente il calcolo dinamico della pianificazione del lavoro periodico successiva, che può essere utilizzata per implementare funzionalità avanzate come i tempi di aggiornamento adattivi, il comportamento di ripetizione personalizzato o l'esecuzione di un job del feed di notizie prima che l'utente si svegli ogni mattina senza deriva. ExistingPeriodicWorkPolicy.UPDATE deve essere utilizzato con queste tecniche per evitare di annullare un worker in esecuzione mentre ne viene pianificato un altro.
  • WorkManager sta testando la produzione con la corrispondenza in threading. ExecutorsMode.PRESERVE_EXECUTORS può essere utilizzato per conservare gli esecutori impostati in Configuration e per utilizzare il thread principale reale.
  • Le API di coroutine come CoroutineWorker sono state spostate dall'elemento aggiuntivo work-runtime-ktx all'elemento principale work-runtime. work-runtime-ktx è ora vuoto.

Modifiche all'API

  • 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 per Kotlin sono ora disponibili nell'artifact work-runtime principale. (I71a9a)
  • È stato aggiunto il metodo setNextScheduleTimeOverride, che consente di impostare con precisione le pianificazioni di lavoro periodiche (I3b4da)
  • getEarliestRunTimeMillis rinominato in getNextScheduleTimeMillis. (I2bd7a)
  • Le informazioni sulla prossima esecuzione pianificata vengono aggiunte a WorkInfo. (I797e4)
  • Le informazioni sul ritardo iniziale e sulla periodicità vengono aggiunte a WorkInfo. (I52f2f)
  • È stato aggiunto il metodo di osservazione dei lavoratori tramite i flussi tramite i metodi getWorkInfosByTagFlow, getWorkInfoByIdFlow, getWorkInfosForUniqueWorkFlow, getWorkInfosFlow (If122a)
  • Sono state aggiunte le annotazioni @RequiresApi(...) mancanti ai costruttori e alle proprietà di Constraints. Ora sono in linea con le annotazioni corrispondenti sui setter in Constraints.Builder esistenti nelle versioni precedenti di WorkManager. (I6d7d2)
  • WorkManager ora ha un limite separato per i worker URI dei contenuti per assegnare loro slot garantiti in JobScheduler al fine di evitare aggiornamenti mancanti dei contenuti in caso di carico elevato. Il limite può essere configurato tramite Configuration.Builder.setContentUriTriggerWorkersLimit. (Ic128f)
  • I vincoli vengono aggiunti a WorkInfo. (I162c0)

Versione 2.8

Versione 2.8.1

22 marzo 2023

androidx.work:work-*:2.8.1 viene rilasciato. La versione 2.8.1 contiene questi commit.

Correzioni di bug

  • È stato corretto l'ANR in RescheduleReceiver che in precedenza non gestiva correttamente due trasmissioni simultanee. (b/236906724)

Versione 2.8.0

8 febbraio 2023

androidx.work:work-*:2.8.0 viene rilasciato. La versione 2.8.0 contiene questi commit.

Modifiche importanti dalla versione 2.7.0

Nuove funzionalità

Modifiche all'API

  • WorkManager.updateWork è stato aggiunto per aggiornare il lavoro preservandone l'ora di messa in coda e la catena originali.(I9a248, b/219446409)
  • Membri aggiunti: ExistingPeriodicWorkPolicy.UPDATE Questo criterio consente di aggiornare un'opera periodica in base al nome. È simile al comando REPLACE esistente, ma è meno invasivo: non annulla un worker se è in esecuzione e conserva l'ora di messa in coda. Il ritardo iniziale e il periodo vengono calcolati dall'ora di messa in coda originale anziché dall'ora di aggiornamento. REPLACE è stato ritirato per evitare confusione tra REPLACE e UPDATE, che hanno nomi molto simili. Se vuoi mantenere la semantica precedente di REPLACE, puoi utilizzare CANCEL_AND_REENQUEUE, appena aggiunto, che è identico a REPLACE. (I985ed, b/219446409)
  • È stata aggiunta la possibilità di intercettare le eccezioni di pianificazione fornendo Consumer<Throwable> tramite setSchedulingExceptionHandler)
  • È stata aggiunta la possibilità di fornire Consumer<Throwable> tramite setInitializationExceptionHandler per determinare se si sono verificati problemi durante il tentativo di inizializzare WorkManager.
  • Gli aiuti in linea per OneTimeWorkRequest e PeriodicWorkRequest sono stati spostati da androidx.work:work-runtime-ktx a androidx.work:work-runtime (I0010f, b/209145335)
  • Sono stati aggiunti i metodi di assistenza WorkQuery.fromIds, WorkQuery.fromStates, WorkQuery.fromUniqueWorkNames, WorkQuery.fromTags per creare direttamente WorkQuery. (b/199919736) (If48f2, b/199919736)
  • getForegroundInfo aggiunto a Worker. (Ic1ead)
  • RxWorker sia per RxJava 2 che per RxJava 3 ora ha setForeground che restituisce Completable che può essere utilizzato al posto di setForegroundInfoAsync che restituisce ListenableFuture
  • RxWorker sia per RxJava 2 che per RxJava 3 ha getForegroundInfo che restituisce Single che può essere utilizzato al posto di getForegroundInfoAsync che restituisce ListenableFuture. (b/203851459)
  • Ora i vincoli possono essere costruiti direttamente anziché utilizzare Constraints.Builder, il che è pratico per gli utenti di Kotlin. (Idc390, b/137568653)
  • È stata aggiunta la possibilità di verificare se WorkManager è stato inizializzato. Inoltre, è stata aggiunta una nuova API getConfiguration() per consentire agli sviluppatori di librerie di recuperare la configurazione con cui è stato inizializzato WorkManager. (I6eff3, b/212300336)

Correzioni di bug

  • È stato risolto un problema con lo schedulatore avido che impediva l'esecuzione immediata dei worker in caso di carico. (I9686b, b/248111307)
  • È stato aggiunto @RequiresPermission alle API che richiedono la concessione dell'autorizzazione POST_NOTIFICATIONS nell'SDK 33 e versioni successive. (Ie542e, b/238790278)
  • Propaga le cancellazioni in CoroutineScope a ListenableFuture quando utilizzi suspendCancellableCoroutine.

Versione 2.8.0-rc01

7 dicembre 2022

androidx.work:work-*:2.8.0-rc01 viene rilasciato. La versione 2.8.0-rc01 contiene questi commit.

Nuove funzionalità

  • Nessuna nuova funzionalità in questa release. Si tratta principalmente di un aggiornamento della versione

Versione 2.8.0-beta02

9 novembre 2022

androidx.work:work-*:2.8.0-beta02 viene rilasciato. La versione 2.8.0-beta02 contiene questi commit.

Correzioni di bug

  • È stato corretto il metodo equals in WorkInfo, che in precedenza non teneva conto delle informazioni sulla nuova generazione. (4977cc)

Versione 2.8.0-beta01

5 ottobre 2022

androidx.work:work-*:2.8.0-beta01 viene rilasciato. La versione 2.8.0-beta01 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema con lo schedulatore avido 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 rilasciato. La versione 2.8.0-alpha04 contiene questi commit.

Modifiche all'API

  • Sono stati aggiunti WorkerInfo.getGeneration() e WorkerParameters.getGeneration() che restituiscono la generazione di un worker. Un worker ha più generazioni se è stato aggiornato tramite WorkManager.updateWork o WorkManager.enqueueUniquePeriodicWork utilizzando ExistingPeriodicWorkPolicy.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 è stato eseguito un aggiornamento durante l'esecuzione del worker. (I665c5, b/219446409) (I128a9, b/219446409)
  • È stato aggiunto InitializationExceptionHandler, un gestore delle eccezioni che può essere utilizzato per determinare se si sono verificati problemi durante il tentativo di inizializzare WorkManager. (I061de)

Versione 2.8.0-alpha03

10 agosto 2022

androidx.work:work-*:2.8.0-alpha03 viene rilasciato. La versione 2.8.0-alpha03 contiene questi commit.

Nuove funzionalità

  • È stata aggiunta la possibilità di aggiornare WorkRequests in modo non invasivo, preservando l'ora di messa in coda originale, la catena e così via. Per maggiori dettagli, consulta WorkManager.updateWork e ExistingPeriodicWorkPolicy.UPDATE.

Modifiche all'API

  • WorkManager.updateWork è stato aggiunto per aggiornare il lavoro preservandone l'ora di messa in coda e la catena originali.(I9a248, b/219446409)
  • Membri aggiunti: ExistingPeriodicWorkPolicy.UPDATE Questo criterio consente di aggiornare un lavoro periodico in base al nome. È simile al comando REPLACE esistente, ma è meno invasivo: non annulla un worker se è in esecuzione e conserva l'ora di messa in coda. Il ritardo iniziale e il periodo vengono calcolati dall'ora di messa in coda originale anziché dall'ora di aggiornamento. REPLACE è stato ritirato per ridurre la confusione tra REPLACE e UPDATE, che hanno nomi molto simili. Se vuoi mantenere la semantica precedente di REPLACE, puoi utilizzare CANCEL_AND_REENQUEUE, appena aggiunto, che è identico a REPLACE. (I985ed, b/219446409)
  • Aggiungi la possibilità di intercettare le eccezioni di pianificazione definendo un SchedulingExceptionHandler. (I033eb)
  • Gli aiuti in linea per OneTimeWorkRequest e PeriodicWorkRequest sono stati spostati da androidx.work:work-runtime-ktx a androidx.work:work-runtime (I0010f, b/209145335)

Correzioni di bug

  • È stato aggiunto @RequiresPermission alle API che richiedono la concessione dell'autorizzazione POST_NOTIFICATIONS nell'SDK 33 e versioni successive. (Ie542e, b/238790278)

Versione 2.8.0-alpha02

6 aprile 2022

androidx.work:work-*:2.8.0-alpha02 viene rilasciato. La versione 2.8.0-alpha02 contiene questi commit.

Modifiche all'API

  • Ora i vincoli possono essere costruiti direttamente anziché utilizzare Builder, il che è pratico per gli utenti di Kotlin. (Idc390, b/137568653)
  • È stata aggiunta la possibilità di verificare se WorkManager è stato inizializzato. Inoltre, è stata aggiunta una nuova API getConfiguration() per consentire agli sviluppatori di librerie di recuperare la configurazione con cui è stato inizializzato WorkManager. (I6eff3, b/212300336)

Versione 2.8.0-alpha01

12 gennaio 2022

androidx.work:work-*:2.8.0-alpha01 viene rilasciato. La versione 2.8.0-alpha01 contiene questi commit.

Modifiche all'API

  • Sono stati aggiunti i metodi di assistenza WorkQuery.fromStates, WorkQuery.fromUniqueWorkNames, WorkQuery.fromTags per creare direttamente WorkQuery. (If48f2, b/199919736)
  • Aggiunge metodi sperimentali BuildCompat per gli SDK futuri (Iafd82, b/207528937)
  • Aggiungi getForegroundInfo a Worker. (Ic1ead)
  • Sono stati aggiunti metodi di assistenza WorkQuery.fromIds per creare WorkQuery direttamente dagli ID. (Ie5bdf, b/199919736)
  • RxWorker ora ha setForeground che restituisce Completable e può essere utilizzato al posto di setForegroundInfoAsync che restituisce ListenableFuture. (I85156)
  • RxWorker per RxJava 2 ora ha getForegroundInfo che restituisce Single che può essere utilizzato al posto di getForegroundInfoAsync che restituisce ListenableFuture. (I21c91, b/203851459)
  • RxWorker per RxJava 3 ora ha getForegroundInfo che restituisce Single che può essere utilizzato al posto di getForegroundInfoAsync che restituisce ListenableFuture. (I1ca8a)
  • RxWorker ora ha setForeground che restituisce Completable e può essere utilizzato al posto di setForegroundInfoAsync che restituisce ListenableFuture. (I992a3, b/203851459)

Correzioni di bug

  • Propaga le cancellazioni in CoroutineScope a ListenableFuture quando utilizzi suspendCancellableCoroutine. (I77e63)

Versione 2.7

Versione 2.7.1

17 novembre 2021

androidx.work:work-*:2.7.1 viene rilasciato. La versione 2.7.1 contiene questi commit.

Correzioni di bug

  • Le cancellazioni in CoroutineScopevengono propagate a ListenableFuture quando si utilizza suspendCancellableCoroutine. (I77e63)
  • Viene lanciata immediatamente un'eccezione quando le richieste di lavoro in ritardo sono contrassegnate come expedite. bef1762

Versione 2.7.0

13 ottobre 2021

androidx.work:work-*:2.7.0 viene rilasciato. La versione 2.7.0 contiene questi commit.

Modifiche importanti dalla versione 2.6.0

  • WorkManager introduce una nuova API WorkRequest.Builder.setExpedited(...) per aiutare con le restrizioni dei servizi in primo piano in Android 12.

  • Quando utilizzi setExpedited(...), WorkManager esegue il riassemblaggio dei job in JobScheduler a partire da Android 12, garantendo al contempo la compatibilità con le versioni precedenti di Android tramite la delega a un servizio in primo piano.

Versione 2.7.0-rc01

29 settembre 2021

androidx.work:work-*:2.7.0-rc01 viene rilasciato. La versione 2.7.0-rc01 contiene questi commit.

Questa versione è identica a androidx.work:work-*:2.7.0-beta01.

Versione 2.7.0-beta01

1° settembre 2021

androidx.work:work-*:2.7.0-beta01 viene rilasciato. La versione 2.7.0-beta01 contiene questi commit.

Nuove funzionalità

  • Riduci le contese SQLite multi-processo durante l'inizializzazione di WorkManager.

Modifiche all'API

  • Rimuovi le API @ExperimentalExpeditedWork poiché le API di piattaforma sottostanti per Android 12 (S) sono stabili. (aosp/1792806)

Correzioni di bug

  • Fornire un messaggio di errore migliore per gli operatori con priorità che non implementano getForegroundInfoAsync(). (aosp/1809376)

Versione 2.7.0-alpha05

21 luglio 2021

androidx.work:work-*:2.7.0-alpha05 viene rilasciato. La versione 2.7.0-alpha05 contiene questi commit.

Questa release include anche correzioni di bug della release WorkManager 2.6.0-beta02.

Versione 2.7.0-alpha04

2 giugno 2021

androidx.work:work-*:2.7.0-alpha04 viene rilasciato.

Questa release contiene anche le modifiche della release 2.6.0-beta01.

Modifiche all'API

  • ListenableWorker.setForegroundAsync() non è più deprecato.
  • Ti consigliamo di utilizzare l'API WorkRequest.Builder.setExpedited(...), se possibile. Per supportare meglio le situazioni in cui l'app non è soggetta a restrizioni dei servizi in primo piano, gli sviluppatori possono utilizzare l'API ListenableWorker.setForegroundAsync().
  • Se viene chiamato ListenableWorker.setForegroundAsync(), quando l'app è soggetta a restrizioni dei servizi in primo piano, viene generata l'eccezione ForegroundServiceStartNotAllowedException.

Correzioni di bug

  • Quando i job con priorità vengono riprogrammati, non sono più considerati con priorità. Diventano job regolari.

Versione 2.7.0-alpha03

21 aprile 2021

androidx.work:work-*:2.7.0-alpha03 viene rilasciato. La versione 2.7.0-alpha03 contiene questi commit.

Nuove funzionalità

Modifiche all'API

Versione 2.7.0-alpha02

10 marzo 2021

androidx.work:work-*:2.7.0-alpha02 viene rilasciato. La versione 2.7.0-alpha02 contiene questi commit.

Correzioni di bug

  • Rendi esplicita la mutabilità di PendingIntent per correggere un arresto anomalo quando il target è Android 12. (b/180884673)

Versione 2.7.0-alpha01

18 febbraio 2021

androidx.work:work-*:2.7.0-alpha01 viene rilasciato. La versione 2.7.0-alpha01 contiene questi commit.

Nuove funzionalità

  • WorkManager introduce una nuova APIWorkRequest.Builder.setExpedited(...) per tenere conto delle limitazioni dei servizi in primo piano in Android 12.

    Le applicazioni non possono più avviare un servizio in primo piano quando sono in background. Pertanto, per supportare meglio i lavori a lungo termine che in precedenza erano legati al ciclo di vita di un servizio in primo piano, le applicazioni possono contrassegnare i WorkRequest come espressi.

    Questa API sostituisce le API setForegroundAsync(...) / setForeground(...), ora obsolete.

    Quando utilizzi setExpedited(...), WorkManager delega i job accelerati in JobScheduler a partire da Android 12, garantendo al contempo la compatibilità con le versioni precedenti di Android tramite la delega ai servizi in primo piano.

Modifiche all'API

  • Aggiunta del supporto per i WorkRequest rapidi.

Versione 2.6.0

Versione 2.6.0

1° settembre 2021

androidx.work:work-*:2.6.0 viene rilasciato. La versione 2.6.0 contiene questi commit.

Modifiche importanti dalla versione 2.5.0

  • Ora WorkManager utilizza androidx.startup per inizializzarsi. Se in passato hai utilizzato tools:node="remove", il ContentProvider utilizzato per inizializzare WorkManager, devi eseguire la procedura riportata di seguito.

    <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities=\"${applicationId}.androidx-startup"
        android:exported="false"
        tools:node=\"merge">
        <!-- If you are using androidx.startup to initialize other components -->
        <meta-data
            android:name="androidx.work.WorkManagerInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
     </provider>
    
    <!-- If you want to disable android.startup completely. -->
     <provider
                android:name="androidx.startup.InitializationProvider"
                android:authorities="${applicationId}.androidx-startup"
                tools:node="remove" />
    
  • È stato aggiunto il supporto per i worker che possono essere eseguiti in qualsiasi processo. (Iaf200)

  • È stato aggiunto un RemoteCoroutineWorker, che è un'implementazione di RemoteListenableWorker che può associarsi a un processo remoto. (I30578)

Versione 2.6.0-rc01

4 agosto 2021

androidx.work:work-*:2.6.0-rc01 viene rilasciato. La versione 2.6.0-rc01 contiene questi commit.

Questa versione è identica a androidx.work:work-*:2.6.0-beta02.

Versione 2.6.0-beta02

21 luglio 2021

androidx.work:work-*:2.6.0-beta02 viene rilasciato. La versione 2.6.0-beta02 contiene questi commit.

Correzioni di bug

  • RemoteWorkManager ora si scollega correttamente da RemoteWorkManagerService, il che consente a RemoteWorkManagerService di eseguire la pulizia correttamente. aosp/1730694
  • RemoteListenableWorker ora si scollega correttamente da RemoteWorkerService, il che consente a RemoteWorkerService di eseguire correttamente la pulizia. aosp/1743817
  • ForceStopRunnable 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 rilasciato. La versione 2.6.0-beta01 contiene questi commit.

Questa release contiene alcuni piccoli miglioramenti alla documentazione. La release è in gran parte identica a 2.6.0-alpha02.

Versione 2.6.0-alpha02

21 aprile 2021

androidx.work:work-*:2.6.0-alpha02 viene rilasciato. La versione 2.6.0-alpha02 contiene questi commit.

Nuove funzionalità

  • Aggiunge il supporto per i worker che possono essere eseguiti in qualsiasi processo. (Iaf200)

  • È stato aggiunto un RemoteCoroutineWorker, che è un'implementazione di RemoteListenableWorker che può associarsi a un processo remoto. (I30578)

Modifiche all'API

  • È stato aggiunto il supporto per il vincolo di rete TEMPORARILY_UNMETERED. (I08d5e)
  • Supporto dei worker multiprocesso per setProgressAsync(). (Ib6d08)
  • Rendi pubblico WorkManagerInitializer in modo che altri androidx.startup.Initializer possano utilizzarlo come dipendenze. (I5ab11)

Versione 2.6.0-alpha01

24 marzo 2021

androidx.work:work-*:2.6.0-alpha01 viene rilasciato. La versione 2.6.0-alpha01 contiene questi commit.

Nuove funzionalità

  • WorkManager ora utilizza androidx.startup per inizializzare WorkManager. In precedenza, questa operazione veniva eseguita da androidx.work.impl.WorkManagerInitializer. (aosp/1608813)

    Se in passato hai utilizzato tools:node="remove", il valore ContentProvider utilizzato per inizializzare il ciclo di vita del processo, devi eseguire la procedura riportata di seguito.

     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities=\"${applicationId}.androidx-startup"
        android:exported="false"
        tools:node=\"merge">
        <!-- If you are using androidx.startup to initialize other components -->
        <meta-data
            android:name="androidx.work.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 all'API

  • Aggiungi un'API Result.getOutputData() che restituisce il outputData di ListenableWorker. (Ie51e3)

Correzioni di bug

  • Aggiunta una soluzione alternativa per un bug OEM che causa l'emissione di un SecurityException quando si utilizzano le API AlarmManager. (aosp/1587518)

Versione 2.5.0

Versione 2.5.0

27 gennaio 2021

androidx.work:work-*:2.5.0 viene rilasciato. La versione 2.5.0 contiene questi commit.

Modifiche principali dalla versione 2.4.0

  • Un nuovo artefatto :work:work-multiprocess per le app che utilizzano più processi. Ciò comporta un miglioramento delle prestazioni grazie all'unificazione della 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, devi utilizzare anche RemoteWorkManager per gestire i tuoi WorkRequest. RemoteWorkManager contatta sempre il processo designato. Anche lo scheduler in-process viene eseguito nel processo designato.
  • A volte, ActivityManager non riesce a creare l'istanza JobService per avviare un job. Ciò causa l'eliminazione silenziosa del job sottostante a causa di un bug della piattaforma. WorkManager ora garantisce che esistano job di supporto per ogni singolo WorkRequest quando viene inizializzato un Application tramite la riconciliazione dei job. In questo modo, l'affidabilità dell'esecuzione dei job viene notevolmente migliorata. (b/172475041, aosp/1489577)
  • WorkManager limita la crescita del database riducendo la durata del buffer in cui vengono monitorati i WorkRequest al termine di un WorkRequest. La durata era di 7 giorni prima. È stato ridotto a 1 giorni + la durata di keepResultsForAtLeast. (aosp/1419708)
  • TestListenableWorkerBuilder ora supporta la classe reificata che estende ListenableWorker per semplificare i test. (aosp/1443299, b/169787349)
  • L'strumento di ispezione WorkManager è ora disponibile quando utilizzi Android Studio Arctic Fox.

Versione 2.5.0-rc01

13 gennaio 2021

androidx.work:work-*:2.5.0-rc01 viene rilasciato. La versione 2.5.0-rc01 contiene questi commit.

Correzioni di bug

  • È stato corretto un bug per cui getWorkInfosLiveData non veniva invalidato correttamente dopo l'aggiornamento delle entità quando si utilizzava l'API basata su WorkQuery. (aosp/1540566, b/173769028)
  • È stato risolto un bug per cui le transazioni del database non venivano contrassegnate come riuscite in alcuni rari casi. Ciò causa problemi su alcuni dispositivi Motorola. (aosp/1535368, b/175944460)
  • È stato corretto un bug che ignorava i NoSuchElementException durante il tentativo di annullare l'associazione da un processo non attivo. (aosp/1530589)
  • Migliora ConstraintTrackingWorker in modo da interrompere un ListenableWorker solo se non è già stato interrotto. (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 rilasciato. La versione 2.5.0-beta02 contiene questi commit.

Correzioni di bug

  • È stato corretto un bug in androidx.work:work-multiprocess per cui WorkManager bloccava inavvertitamente il thread chiamante durante il tentativo di eseguire il binding al processo designato. (aosp/1475538)
  • È stato corretto un bug per cui i PeriodicWorkRequest non venivano riconciliati correttamente. (b/172475041, aosp/1489577)
  • È stata aggiunta una soluzione alternativa per un bug della piattaforma durante l'interruzione del servizio in primo piano quando si utilizzano le API setForeground*. (b/170924044, aosp/1489901)

Versione 2.5.0-beta01

28 ottobre 2020

androidx.work:work-*:2.5.0-beta01 viene rilasciato. La versione 2.5.0-beta01 contiene questi commit.

Nuove funzionalità

  • WorkManager riduce automaticamente il numero di WorkRequest che possono essere rilevati dal programmatore in-process. Le richieste vengono comunque eseguite in ordine FIFO. (aosp/1455228)
  • WorkManager tenta di eseguire il recupero quando il data store dell'applicazione è in uno stato non valido. (aosp/1463103)

Correzioni di bug

  • Quando le ListenableWorker vengono interrotte, contrassegnale immediatamente come ENQUEUED in modo che possano essere riprogrammate in un secondo momento. (aosp/1455618, b/170273988)

Versione 2.5.0-alpha03

14 ottobre 2020

androidx.work:work-*:2.5.0-alpha03 viene rilasciato. La versione 2.5.0-alpha03 contiene questi commit.

Modifiche all'API

  • TestListenableWorkerBuilder e TestWorkerBuilder non utilizzano tipi non elaborati. (I883ad, b/169787349)

Correzioni di bug

  • Utilizza ApplicationInfo per determinare il nome del processo dell'app predefinito. (b/168716641, aosp/1429950)
  • Correggi le regole di visibilità per RemoteWorkManager e RemoteWorkContinuation. Queste API non sono più contrassegnate come @Restricted. (aosp/1432091)
  • Correggi le regole di ProGuard per :work:work-multiprocess. (aosp/1432091)
  • Migliora i cicli di vita delle notifiche per i processi di lunga durata associati a un servizio in primo piano. (b/168502234, aosp/1431331)

Versione 2.5.0-alpha02

16 settembre 2020

androidx.work:work-*:2.5.0-alpha02 viene rilasciato. La versione 2.5.0-alpha02 contiene questi commit.

Nuove funzionalità

  • Aggiungi un'API a WorkQuery per poter utilizzare i id per eseguire query sui WorkInfo. (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:
    • In genere, WorkManager deve essere inizializzato in ogni processo dell'app. Questo non è un buon risultato perché aumenta la contesa SQLite, che a sua volta causa altri problemi. WorkManager ora dispone di nuove API che possono essere utilizzate per designare un processo dell'app principale utilizzando Configuration#setDefaultProcessName(processName). processName è un nome di processo completo che ha il seguente aspetto: packageName:processName (ad es. com.example:remote).
    • Un insieme di nuove API: RemoteWorkManager e RemoteWorkContinuation per enqueue, cancel e query richieste di lavoro. Queste API non includono le varianti LiveData per evitare conflitti SQLite tra più processi. Tutte le chiamate a enqueue, cancel e query vengono inoltrate a un processo dell'app primary utilizzando AIDL e restituiscono un ListenableFuture fluido. (aosp/1392657, aosp/1411210, aosp/1412215, aosp/1417713)

Modifiche all'API

  • Ora WorkManager elimina in modo più aggressivo i WorkRequest completati che non hanno dipendenze incomplete. La durata del buffer è passata da 7 giorni a 1 giorni. (aosp/1419708)

Correzioni di bug

  • Ora WorkManager riconcilia i job in modo proattivo, in modo che i job WorkRequest e JobScheduler siano sincronizzati quando viene inizializzato WorkManager. (aosp/1412794, b/166292069)

Versione 2.5.0-alpha01

19 agosto 2020

androidx.work:work-*:2.5.0-alpha01 viene rilasciato. La versione 2.5.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Modifiche alle API interne che ci consentono di fornire strumenti migliori con WorkManager in futuro. Continua a seguirci per altri aggiornamenti.

Correzioni di bug

  • Gestire i SecurityException durante il monitoraggio dello stato della rete su alcuni dispositivi. (aosp/1396969)

Contributo esterno

  • Correzione della documentazione per ArrayCreatingInputMerger da parte di Zac Sweers (github/43).

Versione 2.4.0

Versione 2.4.0

22 luglio 2020

androidx.work:work-*:2.4.0 viene rilasciato. La versione 2.4.0 contiene questi commit.

Modifiche principali dalla versione 2.3.0

  • Il programmatore in-process di WorkManager è ora più efficiente. In precedenza, Scheduler in fase di elaborazione prendeva in considerazione solo l'esecuzione di attività che non erano in ritardo e i cui vincoli erano soddisfatti. Ora il programmatore in-process monitora i WorkRequest che potrebbero essere eseguiti in futuro, tra cui PeriodicWorkRequests. Inoltre, Scheduler in-process non rispetta i limiti di pianificazione (ma è comunque limitato alle dimensioni del Executor utilizzato da WorkManager). Ciò significa che ora l'applicazione può eseguire molte più richieste di lavoro quando è in primo piano. Per gestire l'esecuzione di attività in background ritardate, WorkManager introduce anche un nuovo RunnableScheduler configurabile. (aosp/1185778)
  • WorkManager ora supporta RxJava 3. Per utilizzare RxJava 3, devi includere la seguente dipendenza: implementation "androidx.work:work-rxjava3:2.4.0". (aosp/1277904)
  • È stata aggiunta la possibilità di eseguire query sui WorkInfo utilizzando un WorkQuery. Questa operazione è utile quando gli sviluppatori vogliono eseguire query sui WorkInfo in base a una combinazione di più attributi. Per ulteriori informazioni, consulta WorkQuery.Builder.fromStates(...), WorkQuery.Builder. fromTags(...) o WorkQuery.Builder.fromUniqueWorkNames(...). (aosp/1253230, b/143847546)
  • Aggiungi la possibilità di richiedere informazioni di diagnostica da WorkManager utilizzando:

    adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
    

    Fornisce molte informazioni utili, tra cui:

    • WorkRequest completate nelle ultime 24 ore.
    • WorkRequest attualmente in esecuzione.
    • WorkRequest pianificate. (aosp/1235501)
  • Aggiungi ExistingWorkPolicy.APPEND_OR_REPLACE, che è simile a APPEND, ma sostituisce una catena con prerequisiti annullati o non superati. (b/134613984, aosp/1199640)

  • Fornisci la possibilità di aggiungere un RunnableScheduler personalizzato per monitorare le richieste di lavoro da eseguire in futuro. Viene utilizzato dal programma in-process. (aosp/1203944)

  • È stato aggiunto il supporto per l'aggiunta dinamica di fabbriche a cui delegare, quando si utilizza un DelegatingWorkerFactory. (b/156289105, aosp/1309745)

  • Allinea il monitoraggio dei vincoli BATTERY_NOT_LOW alla piattaforma. (aosp/1312583)

  • Il programma di pianificazione in-process ora utilizza API migliori per determinare il nome del processo. Questo è utile per supportare meglio le app che utilizzano più processi. (aosp/1324732)

  • Nuove regole Lint che richiedono:

    • Utilizzo del foregroundServiceType corretto quando si utilizzano le API setForegroundAsync(). (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 lint che garantisce che le implementazioni di ListenableWorker siano ora public quando si utilizza WorkerFactory predefinito. (aosp/1291262)
  • Le chiamate a setForegroundAsync() che non vengono completate prima del completamento di un ListenableWorker verranno ora segnalate tramite un IllegalStateException sul ListenableFuture restituito. (aosp/1262743)

  • È stato corretto un bug per cui il ForegroundService non viene interrotto dopo l'interruzione di un Worker in primo piano. (b/155579898, aosp/1302153)

  • Correzione di un bug in cui WorkManager tenta di eseguire più istanze di un Worker associato a un servizio in primo piano (b/156310133, aosp/1309853)

Versione 2.4.0-rc01

24 giugno 2020

androidx.work:work-*:2.4.0-rc01 viene rilasciato. La versione 2.4.0-rc01 contiene questi commit.

Correzioni di bug

  • Il programma di pianificazione in-process ora utilizza API migliori per determinare il nome del processo. Questo è 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 vengono rilasciati. La versione 2.4.0-beta01 contiene questi commit.

Correzioni di bug

  • È stato corretto un bug per cui il ForegroundService non viene interrotto dopo l'interruzione di un Worker in primo piano. (b/155579898, aosp/1302153)
  • Correzione di un bug in cui WorkManager tenta di eseguire più istanze di un Worker associato a un servizio in primo piano (b/156310133, aosp/1309853)
  • È stato aggiunto il supporto per l'aggiunta dinamica di fabbriche a cui delegare, quando si utilizza un DelegatingWorkerFactory. (b/156289105, aosp/1309745)
  • Allinea il monitoraggio dei vincoli BATTERY_NOT_LOW alla piattaforma. (aosp/1312583)

Versione 2.4.0-alpha03

29 aprile 2020

androidx.work:work-*:2.4.0-alpha03 viene rilasciato. La versione 2.4.0-alpha03 contiene questi commit.

Nuove funzionalità

  • WorkManager ora supporta RxJava 3. Per utilizzare RxJava 3, devi includere la seguente dipendenza: implementation "androidx.work:work-rxjava3:2.4.0-alpha03". (aosp/1277904)
  • È stata aggiunta una nuova regola lint che garantisce che le implementazioni di ListenableWorker siano ora public quando si utilizza WorkerFactory predefinito. (aosp/1291262)

Modifiche all'API

  • La chiamata a setProgressAsync() al termine dell'esecuzione di un ListenableWorker ora segnalerà un Exception tramite ListenableFuture. (aosp/1285494)
  • WorkQuery.Builder è ora contrassegnato come final. (aosp/1275037)
  • I metodi di fabbrica WorkQuery.Builder withStates, withTags e withUniqueWorkNames sono stati rinominati rispettivamente in fromStates, fromTags e fromUniqueWorkNames. (aosp/1280287)

Correzioni di bug

  • Ignora i valori SecurityException quando monitori lo stato della rete di un dispositivo. (b/153246136, aosp/1280813)

Versione 2.4.0-alpha02

1° aprile 2020

androidx.work:work-*:2.4.0-alpha02 viene rilasciato. La versione 2.4.0-alpha02 contiene questi commit.

Nuove funzionalità

  • È stata aggiunta una nuova regola Lint che avvisa quando WorkRequest richiede sia Constraints.setRequiresCharging(...) che Constraints.setRequiresDeviceIdle(...). Alcuni dispositivi non sono mai in carica e inattivi contemporaneamente. Pertanto, queste richieste verranno eseguite meno di frequente del previsto. (aosp/1253840)

Modifiche all'API

  • È stata aggiunta la possibilità di eseguire query sui WorkInfo utilizzando un WorkQuery. Questo è utile quando gli sviluppatori vogliono eseguire query sui WorkInfo in base a una combinazione di più attributi. Per ulteriori informazioni, consulta WorkQuery.Builder withStates(...), WorkQuery.Builder withTags(...) o WorkQuery.Builder withUniqueWorkNames(...). (aosp/1253230, b/143847546)

  • Le chiamate a setForegroundAsync() che non vengono completate prima del completamento di un ListenableWorker verranno ora segnalate tramite un IllegalStateException nel ListenableFuture restituito. (aosp/1262743)

Correzioni di bug

  • È stata corretta la regola lint che controlla la presenza di durate degli intervalli non valide per i valori PeriodicWorkRequest. (aosp/1254846, b/152606442)

Versione 2.4.0-alpha01

4 marzo 2020

androidx.work:work-*:2.4.0-alpha01 viene rilasciato. La versione 2.4.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Lo scheduler in-process di WorkManager è ora più efficiente. In precedenza, lo scheduler in-process prendeva in considerazione solo l'esecuzione di attività non in ritardo e i cui vincoli erano soddisfatti. Ora il programmatore in-process monitora le WorkRequest che potrebbero essere eseguite in futuro, incluse le PeriodicWorkRequest. Inoltre, lo scheduler in-process non rispetta i limiti di pianificazione (ma è comunque limitato alle dimensioni del Executor utilizzato da WorkManager). Ciò significa che ora l'applicazione può eseguire molti più WorkRequest quando è in primo piano. (aosp/1185778)

  • È stata aggiunta la possibilità di richiedere informazioni di diagnostica da WorkManager utilizzando adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>". Fornisce molte informazioni utili, tra cui:

    • WorkRequest completate nelle ultime 24 ore.
    • WorkRequest attualmente in esecuzione.
    • WorkRequest pianificate. (aosp/1235501)
  • Nuove regole Lint che richiedono:

    • Utilizzo del foregroundServiceType corretto quando si utilizzano le API setForegroundAsync(). (b/147873061, aosp/1215915)
    • Specifica gli ID JobScheduler che WorkManager deve utilizzare quando utilizza direttamente le API JobService. (aosp/1223567)

Modifiche all'API

  • Aggiungi ExistingWorkPolicy.APPEND_OR_REPLACE, che è simile a APPEND, ma sostituisce una catena con prerequisiti annullati o non superati. (b/134613984, aosp/1199640)

  • Fornire la possibilità di aggiungere un RunnableScheduler personalizzato per monitorare i WorkRequest da eseguire in futuro. Viene utilizzato dal programma in esecuzione. (aosp/1203944)

Correzioni di bug

  • È stato ritirato setProgress() in RxWorker perché in precedenza restituiva un Single<Void>, un tipo impossibile. È stata aggiunta una nuova API setCompletableProgress() che restituisce un Completable e nuove regole Lint che aiutano a eseguire la migrazione alle nuove API. (b/150080946, aosp/1242665)

Versione 2.3.4

Versione 2.3.4

18 marzo 2020

androidx.work:work-*:2.3.4 viene rilasciato. La versione 2.3.4 contiene questi commit.

Correzioni di bug

  • È stato corretto un bug che causava l'esecuzione di più istanze di un Worker a tempo di esecuzione lungo dopo aver superato la finestra di esecuzione di 10 minuti. (aosp/1247484, b/150553353)
  • Correzione del lint di WorkManager IssueRegistry. Grazie a @ZacSweers di Slack per il contributo. (aosp/1217923)

Versione 2.3.3

Versione 2.3.3

4 marzo 2020

androidx.work:work-*:2.3.3 viene rilasciato. La versione 2.3.3 contiene questi commit.

Correzioni di bug

  • È stato corretto un bug per cui, se un Worker veniva interrotto, non veniva riprogrammato correttamente. (b/150325687, aosp/1246571)

Versione 2.3.2

Versione 2.3.2

19 febbraio 2020

androidx.work:work-*:2.3.2 sono state rilasciate. La versione 2.3.2 contiene questi commit.

Correzioni di bug

  • Risolto un problema per cui, in rari casi, WorkManager superava il limite di 100 job in JobScheduler. (aosp/1226859, b/149092520)
  • Correzione di una condizione di gara in ConstraintControllers. (aosp/1220100)
  • È stato migliorato il ciclo di vita del servizio in primo piano per i worker a lungo termine. (aosp/1226295)
  • È stata migliorata la gestione dell'annullamento delle notifiche per i worker a lungo termine 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 rilasciato. La versione 2.3.1 contiene questi commit.

Correzioni di bug

  • Gestire meglio il ciclo di vita dei Notification per i Worker a lungo termine che vengono eseguiti quando è attivo un Service in primo piano. (aosp/1218539, b/147249312)
  • WorkManager ora dipende da androidx.sqlite:sqlite-framework:2.1.0 stabile. (aosp/1217729)
  • Sono state aggiunte regole di lint per garantire che un foregroundServiceType sia specificato nel AndroidManifest.xml quando si utilizzano foregroundServiceType in ForegroundInfo. (aosp/1214207, b/147873061)

Versione 2.3.0

Versione 2.3.0

22 gennaio 2020

androidx.work:work-*:2.3.0 viene rilasciato senza modifiche dal giorno 2.3.0-rc01. La versione 2.3.0 contiene questi commit.

Modifiche importanti dalla versione 2.2.0

  • Supporto per attività importanti o che richiedono molto tempo tramite ListenableWorker#setForegroundAsync().
  • Supporto per l'avanzamento dei lavoratori tramite ListenableWorker#setProgressAsync().
  • WorkManager ora include regole di lint aggiuntive all'interno della libreria, che consentono di rilevare i bug in anticipo.

Versione 2.3.0-rc01

8 gennaio 2020

androidx.work:work-*:2.3.0-rc01 viene rilasciato. La versione 2.3.0-rc01 contiene questi commit.

Questa release è identica a 2.3.0-beta02

Correzioni di bug

  • L'artefatto work-testing ora definisce una dipendenza api da work-runtime-ktx. (aosp/1194410)

Versione 2.3.0-beta02

18 dicembre 2019

androidx.work:work-*:2.3.0-beta02 viene rilasciato. La versione 2.3.0-beta02 contiene questi commit.

Nuove funzionalità

  • È stato aggiunto un messaggio di errore migliore per le eccezioni SQLite non recuperabili. (aosp/1185777)
  • È stata aggiunta una regola lint che garantisce che il fornitore di contenuti androidx.work.impl.WorkManagerInitializer venga rimosso da AndroidManifest.xml quando si utilizza l'inizializzazione on demand. (aosp/1167007)
  • È stato aggiunto un avviso lint quando viene utilizzato enqueue() per un PeriodicWorkRequest anziché enqueueUniquePeriodicWork(). (aosp/1166032)

Modifiche all'API

  • ForegroundInfo ora richiede di specificare il notificationId da utilizzare quando si utilizza ListenableWorker.setForegroundAsync(). Si tratta di una modifica che provoca un errore. In questo modo puoi eseguire in parallelo più Worker a esecuzione prolungata. WorkManager gestisce inoltre meglio la durata dei Notification forniti. (b/145473554, aosp/1181208, asop/1181216, asop/1183577)

Correzioni di bug

  • Risolto un bug nell'implementazione di AlarmManager per cui le sveglie non venivano eliminate correttamente. (aosp/1156444)
  • È stato corretto un bug per cui un elenco vuoto di WorkRequest causava la creazione di una catena WorkContinuation 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 rilasciato. La versione 2.3.0-beta01 contiene questi commit.

Nuove funzionalità

  • È stata aggiunta una nuova regola lint che impedisce errori dello sviluppatore dovuti a un'implementazione errata di androidx.work.Configuration.Provider 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 rilasciato. La versione 2.3.0-alpha03 contiene questi commit.

Nuove funzionalità

  • È stata aggiunta l'API WorkManager.createCancelPendingIntent() che semplifica l'annullamento dei WorkRequest senza dover registrare un altro componente in AndroidManifest.xml. Questa API semplifica notevolmente l'annullamento dei WorkRequest da Notification. Prevediamo che questa funzionalità verrà accoppiata alle nuove API in primo piano nella versione 2.3.0.
  • WorkManager ora dipende dalla versione stabile androidx.room:*:2.2.0.

Modifiche all'API

  • Il nome ForegroundInfo.getNotificationType() è stato rinominato in ForegroundInfo.getForegroundServiceType() per maggiore coerenza con le API di piattaforma sottostanti. (b/142729893, aosp/1143316)

Correzioni di bug

  • È stato corretto un bug causato da una chiamata non necessaria a setTransactionSuccessful() al di fuori di una transazione. Questo accade in caso di migrazioni rare. (b/142580433, aosp/1141737)

Versione 2.3.0-alpha02

9 ottobre 2019

androidx.work:work-*:2.3.0-alpha02 viene rilasciato. La versione 2.3.0-alpha02 contiene questi commit.

Nuove funzionalità

  • WorkManager ora supporta l'esecuzione di attività importanti o che richiedono molto tempo che devono essere mantenute attive dal sistema operativo. Per ulteriori informazioni, consulta ListenableWorker#setForegroundAsync() (o CoroutineWorker#setForeground() per Kotlin). (aosp/1133636)

Modifiche all'API

  • L'API containsKey in Data viene rinominata in hasKeyWithValueOfType. Anche il metodo di estensione corrispondente nella libreria ktx è 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)
  • Ora WorkManager rimuove le informazioni sui progressi quando un worker viene interrotto o raggiunge il suo stato finale. (aosp/1114572)
  • Data ora ha una rappresentazione toString()molto più utile. (b/140945323)
  • Data ora ha un metodo equals() migliore. Supporta anche deepEquals per i tipi Array. (b/140922528)
  • Ora WorkManager archivia il database interno e i file delle preferenze in una directory senza backup. (b/114808216)

Versione 2.3.0-alpha01

22 agosto 2019

androidx.work:work-*:2.3.September 5, 20190-alpha01 viene rilasciato. I commit inclusi in questa versione sono disponibili qui.

Nuove funzionalità

  • Ora i ListenableWorker possono impostare l'avanzamento tramite l'API setProgressAsync(). È stata aggiunta anche un'API setProgress suspend corrispondente in CoroutineWorker e un setProgress in RxWorker che restituisce un Single<Void>. Con queste nuove API, i lavoratori possono trasmettere informazioni sugli avanzamenti tramite WorkInfo, che ha un'API getProgress corrispondente. (b/79481554)
  • Data ha un'API containsKey() che può essere utilizzata per convalidare che i dati di input di Worker abbiano chiavi con il tipo previsto. (b/117136838)
  • Ora Data può essere serializzato utilizzando Data.toByteArray() e Data.fromByteArray(). Tieni presente che non ci sono garanzie di versionamento con Data, quindi non devi mantenerlo o utilizzarlo per l'IPC tra le applicazioni. Possono essere utilizzati in sicurezza solo tra più processi della stessa applicazione.
  • È stata aggiunta la possibilità di specificare un InputMergerFactory tramite Configuration.setInputMergerFactory. (b/133273159)

Modifiche all'API

  • WorkManager genera un'istanza di IllegalStateException se un WorkerFactory restituisce un'istanza di ListenableWorker che è stata invocata in precedenza. (b/139554406)
  • Aggiornamenti della documentazione relativi all'annullamento di ListenableFuture e al callback di onStopped() in ListenableWorker. (b/138413671)

Correzioni di bug

  • Lo scheduler in-process ora ignora i WorkRequest con la limitazione idle. Ora queste richieste vengono rilevate da JobScheduler solo quando il dispositivo è effettivamente idle. (aosp/1089779)
  • TestScheduler ora utilizza correttamente Executor specificato per l'executor delle attività interno nei test. (aosp/1090749)

Versione 2.2.0

Versione 2.2.0

15 agosto 2019

androidx.work:work-*:2.2.0 viene rilasciato. I commit inclusi in questa versione sono disponibili qui.

Questa release è identica a androidx.work:work-*:2.2.0-rc01.

Modifiche importanti nella versione 2.2.0 rispetto alla versione 2.1.0

androidx.work:work-gcm:2.2.0 è un nuovo artefatto Maven che supporta l'utilizzo di GCMNetworkManager come programmatore quando Google Play Services è disponibile per i livelli API <= 22. Si tratta di una dipendenza facoltativa che consente un'elaborazione in background più affidabile e performante nelle versioni precedenti dell'API. Se la tua app utilizza Google Play Services, aggiungi questa dipendenza al file gradle per ottenere automaticamente il supporto di GCMNetworkManager. Se Play Services non è disponibile, WorkManager continuerà a utilizzare AlarmManager sui dispositivi meno recenti.

Versione 2.2.0-rc01

30 luglio 2019

androidx.work:work-*:2.2.0-rc01 viene rilasciato. I commit inclusi in questa versione sono disponibili qui.

Correzioni di bug

  • È stato corretto un bug nell'implementazione di 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 problema NullPointerException quando si utilizzano le API JobScheduler su alcuni dispositivi. (aosp/1091020) (b/138364061), (b/138441699)

Versione 2.2.0-beta02

19 luglio 2019

androidx.work:work-*:2.2.0-beta02 viene rilasciato. I commit inclusi in questa versione sono disponibili qui.

Correzioni di bug

  • È stata rimossa la dipendenza da jacoco non intenzionale introdotta in 2.2.0-beta01.

Versione 2.2.0-beta01

17 luglio 2019

androidx.work:work-*:2.2.0-beta01 viene rilasciato. I commit inclusi in questa versione sono disponibili qui.

Nuove funzionalità

  • androidx.work:work-gcm:2.2.0-beta01 è un nuovo artefatto Maven che supporta l'utilizzo di GCMNetworkManager come programmatore quando Google Play Services è disponibile per i livelli API <= 22. Si tratta di una dipendenza facoltativa che consente un'elaborazione in background più affidabile e performante nelle versioni precedenti dell'API. Se la tua app utilizza Google Play Services, aggiungi questa dipendenza al file gradle per ottenere automaticamente il supporto di GCMNetworkManager. Se Play Services non è disponibile, WorkManager continuerà a utilizzare AlarmManager sui dispositivi meno recenti.

Correzioni di bug

  • Correzione del problema relativo a IllegalArgumentException durante il monitoraggio dello stato della rete sui tablet Nvidia Shield K1. (aosp/1010188)

Versione 2.1.0

Versione 2.1.0

11 luglio 2019

androidx.work:work-*:2.1.0 viene rilasciato. Questa release è identica a androidx.work:work-*:2.1.0-rc01.

Modifiche importanti dalla versione 2.0.1

  • work-runtime-ktx ora richiede Java 8. Se riscontri problemi, puoi aggiungere quanto segue al tuo build.gradle: kotlinOptions { jvmTarget = "1.8" }
  • È stata aggiunta l'inizializzazione on demand per WorkManager, che creerà WorkManager solo quando viene fatto riferimento. b/127497100 Per configurare il progetto per l'inizializzazione on demand:
    1. Disattiva l'inizializzatore automatico.
    2. Implementa Configuration.Provider nell'oggetto Application personalizzato.
    3. Cambia tutti i riferimenti a WorkManager.getInstance() in WorkManager.getInstance(Context). Nell'ambito di questa modifica, abbiamo ritirato WorkManager.getInstance(). È sempre più sicuro chiamare la nuova sostituzione WorkManager.getInstance(Context), anche se non esegui l'inizializzazione on demand.
  • PeriodicWorkRequest ora supporta i ritardi iniziali. Puoi utilizzare il metodo setInitialDelay su PeriodicWorkRequest.Builder per impostare un ritardo iniziale. b/111404867
  • È stata aggiunta la possibilità di delegare a uno o più WorkerFactory registrati utilizzando DelegatingWorkerFactory. b/131435993
  • È stata aggiunta la possibilità di personalizzare il Executor utilizzato da WorkManager per tutta la sua contabilità interna tramite Configuration.Builder.setTaskExecutor.
  • È stata aggiunta la possibilità di creare classi Worker e ListenableWorker testabili a livello di unità utilizzando TestWorkerBuilder e TestListenableWorkerBuilder nell'artifact work-testing.
    • Tieni presente che work-testing ora importa Kotlin come dipendenza e include diverse estensioni Kotlin per impostazione predefinita.
  • È stato aggiunto il conteggio dei tentativi di esecuzione a WorkInfo. b/127290461
  • Ora i tipi Data possono memorizzare e recuperare byte e array di byte. Ciò NON modifica le dimensioni massime degli oggetti Data.
  • Ora WorkManager dipende da Room 2.1.0, il che dovrebbe risolvere alcuni problemi relativi al database.

Versione 2.1.0-rc01

27 giugno 2019

androidx.work:work-*:2.1.0-rc01 viene rilasciato. I commit inclusi in questa versione sono disponibili qui.

Correzioni di bug

  • È stato risolto un bug che causava l'arresto anomalo di un'applicazione durante l'esecuzione di job con JobScheduler mentre era in corso un backup b/135858602.

Versione 2.1.0-beta02

20 giugno 2019

androidx.work:work-*:2.1.0-beta02 viene rilasciato. I commit inclusi in questa versione sono disponibili qui.

Correzioni di bug

  • TestListenableWorkerBuilder ora utilizza WorkerFactory corretto quando crea istanze di ListenableWorker. b/135275844
  • È stato corretto un bug che causava scostamenti nelle finestre di esecuzione per i WorkRequest a causa dell'interruzione del processo. b/135272196

Versione 2.1.0-beta01

13 giugno 2019

androidx.work:work-*:2.1.0-beta01 viene rilasciato. I commit inclusi in questa versione sono disponibili qui.

Correzioni di bug

  • Ora WorkManager dipende da Room 2.1.0, il che dovrebbe risolvere alcuni problemi relativi al database.
  • È stata rimossa parte dell'I/O del disco di avvio nel thread principale.
  • È stato corretto un potenziale deadlock nel monitoraggio dei vincoli. b/134361006
  • Annullamento preventivo dei job non validi attribuiti a WorkManager. b/134058261
  • Sono state aggiunte alcune chiamate difensive alle API JobScheduler per i dispositivi con comportamenti errati.

Versione 2.1.0-alpha03

5 giugno 2019

androidx.work:*:2.1.0-alpha03 viene rilasciato.

Correzioni di bug

  • Documentazione migliorata per i PeriodicWorkRequest.
  • WorkManagerTestInitHelper ora utilizza l'executor in background corretto per i test.
  • Correzioni dei problemi di SQLite relativi al trattamento di transazioni di grandi dimensioni su alcuni dispositivi. (b/130182503)
  • Le dipendenze di WorkManager ora sono più granulari. (b/133169148).
  • Sfrutta una soluzione alternativa per i bug specifici dell'OEM nell'implementazione di JobScheduler durante la pianificazione dei job utilizzando WorkManager.
  • Miglioramenti allo scheduler basato su AlarmManager relativi 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 WorkManager 2.1.0-alpha02. Questa versione contiene diverse nuove API.

Modifiche all'API

  • PeriodicWorkRequest ora supporta i ritardi iniziali. Puoi utilizzare il metodo setInitialDelay su PeriodicWorkRequest.Builder per impostare un ritardo iniziale. b/111404867

  • È stata aggiunta la possibilità di delegare a uno o più WorkerFactory registrati utilizzando DelegatingWorkerFactory. b/131435993

  • È stata aggiunta la possibilità di personalizzare il Executor utilizzato da WorkManager per tutta la sua contabilità interna tramite Configuration.Builder.setTaskExecutor.

  • Documentazione migliorata su WorkRequest.keepResultsForAtLeast (b/130638001), initialization on-demand e PeriodicWorkRequest.Builder (b/131711394).

Versione 2.1.0-alpha01

24 aprile 2019

È stata rilasciata la versione WorkManager 2.1.0-alpha01. Questa versione contiene diverse nuove API. Tieni presente che, a partire da questa versione, alcune nuove funzionalità non verranno riportate alla release 1.x. Ti consigliamo di passare alla versione 2.x.

Modifiche all'API

  • È stata aggiunta l'inizializzazione on demand per WorkManager, che creerà WorkManager solo quando viene fatto riferimento. b/127497100 Per configurare il progetto per l'inizializzazione on demand:
    1. Disattiva l'inizializzatore automatico.
    2. Implementa Configuration.Provider nell'oggetto Application personalizzato.
    3. Cambia tutti i riferimenti a WorkManager.getInstance() in WorkManager.getInstance(Context). Nell'ambito di questa modifica, abbiamo ritirato WorkManager.getInstance(). È sempre più sicuro chiamare la nuova sostituzione WorkManager.getInstance(Context), anche se non esegui l'inizializzazione on demand.
  • È stata aggiunta la possibilità di creare classi Worker e ListenableWorker testabili a livello di unità utilizzando TestWorkerBuilder e TestListenableWorkerBuilder nell'artifact work-testing.
    • Tieni presente che work-testing ora importa Kotlin come dipendenza, ma include anche diverse estensioni Kotlin per impostazione predefinita.
  • È stato aggiunto il conteggio dei tentativi di esecuzione a WorkInfo. b/127290461
  • Ora i tipi Data possono memorizzare e recuperare byte e array di byte. Ciò NON modifica le dimensioni massime degli oggetti Data.
  • CoroutineWorker.coroutineContext obsoleto. Questo campo è stato erroneamente definito come CoroutineDispatcher. Non dovresti più averne bisogno perché puoi accedere autonomamente al coroutineContext desiderato nel corpo della funzione di sospensione.
  • RxWorker.createWork() e RxWorker.getBackgroundScheduler() ora sono annotati con i tipi di ritorno @NonNull.

Versione 2.0.1

Versione 2.0.1

9 aprile 2019

È stata rilasciata la versione 2.0.1 di WorkManager. Questa release è identica a 2.0.1-rc01.

Versione 2.0.1-rc01

3 aprile 2019

È stata rilasciata la versione WorkManager 2.0.1-rc01. Questa versione contiene alcune correzioni di bug. Per gli utenti della versione 1.x precedente, alcune di queste modifiche sono presenti 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 con il monitoraggio dei vincoli che non veniva ripulito nelle API pre-JobScheduler. b/129226383
  • È stato corretto un problema StackOverflowError relativo al trattamento di lunghe catene di lavoro. b/129091233
  • Documentazione aggiornata per i PeriodicWorkRequest per indicare che il tempo flessibile non è supportato nell'API 23.
  • Sono stati corretti alcuni link non funzionanti nella documentazione di Kotlin.

Versione 2.0.0

Versione 2.0.0

20 marzo 2019

È stata rilasciata la versione 2.0.0 di WorkManager. Questa versione è identica a 2.0.0-rc01 ed è la versione AndroidX di 1.0.0 stabile con le dipendenze AndroidX. Ti consigliamo di scegliere come target questa versione anziché le versioni precedenti 1.x. 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 WorkManager 2.0.0-rc01. Questa versione è identica alla versione stabile 1.0.0, ma ha dipendenze AndroidX. Una volta raggiunta la versione stabile 2.0.0, dovresti includerla e le versioni precedenti 1.x riceveranno solo alcune correzioni di bug critiche. Tutte le attività di sviluppo attive avranno come target la versione 2.x.

Dipendenze precedenti ad AndroidX

Per informazioni sull'utilizzo delle estensioni Kotlin, consulta la documentazione di KTX.
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 al 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 WorkManager 1.0.1-rc01. Questa versione contiene alcune correzioni di bug.

Correzioni di bug

  • I test Robolectric ora funzionano correttamente con WorkManager. b/122553577
  • È stato corretto un arresto anomalo in un caso limite con il monitoraggio dei vincoli che non veniva ripulito nelle API pre-JobScheduler. b/129226383
  • È stato corretto un problema StackOverflowError relativo al trattamento di lunghe catene di lavoro. b/129091233

Versione 1.0.0

Versione 1.0.0

5 marzo 2019

Questa è la release stabile 1.0.0 di WorkManager. Questa versione di WorkManager è identica alla 1.0.0-rc02.

Versione 1.0.0-rc02

21 febbraio 2019

Questa è la seconda release candidate per la release stabile 1.0.0 di WorkManager. Questa release contiene due correzioni di bug.

Correzioni di bug

  • Ora i Worker vengono pianificati correttamente dopo un arresto anomalo dell'applicazione. b/124546316

  • I Worker che generano un Exception non selezionato sono ora contrassegnati correttamente come FAILED e non arrestano più in modo anomalo il processo dell'app.

Versione 1.0.0-rc01

14 febbraio 2019

Si tratta di una release candidate per la release stabile 1.0.0 di WorkManager. Questa release contiene una correzione di bug.

Correzioni di bug

  • L'implementazione basata su AlarmManager ora rispetta correttamente le finestre flex per PeriodicWorkRequests. b/124274584

Versione 1.0.0-beta05

6 febbraio 2019

Questa release contiene alcune correzioni di bug.

Correzioni di bug

  • È stato corretto un caso in cui veniva utilizzato JobScheduler.getPendingJob(...) nell'API 23. b/123893059
  • È stato corretto un NullPointerException sui dispositivi con Android 5.1 (livello API 22) o versioni precedenti. b/123835104

Versione 1.0.0-beta04

4 febbraio 2019

Questa release contiene alcune correzioni di bug.

Correzioni di bug

  • Programmazione migliorata di PeriodicWork per l'implementazione basata su AlarmManager.
  • È stato corretto un caso in cui WorkManager non riusciva a monitorare correttamente le limitazioni quando veniva utilizzata l'implementazione basata su AlarmManager. b/123379508
  • È stato corretto un caso in cui WorkManager non riusciva a riprovare a eseguire il lavoro al termine del processo quando si utilizzava l'implementazione basata su AlarmManager. b/123329850
  • È stato corretto un caso che causava una perdita di wakelock da parte di WorkManager quando si utilizzava l'implementazione basata su AlarmManager.

Versione 1.0.0-beta03

25 gennaio 2019

Questa release contiene alcune correzioni di bug.

Correzioni di bug

  • Abbiamo introdotto una regressione 1.0.0-beta02 che causava l'interruzione dell'esecuzione del lavoro in alcune situazioni. b/123211993
  • È stato risolto un caso in cui il lavoro non rispettava correttamente la temporizzazione del backoff. b/122881597
  • È stato corretto un ConcurrentModificationException sui dispositivi con Android 5.1 (API or) o versioni precedenti. Questa è la continuazione della correzione in 1.0.0-beta02. b/121345393
  • È stato aggiunto exported=false per alcuni componenti del 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 su 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 sono soddisfatti sui dispositivi con Android 5.1 (livello API 22) o versioni precedenti. b/122578012
  • È stata ottimizzata la gestione del completamento dei lavori per velocizzarla in alcuni casi limite. b/122358129
  • È stata aggiunta una modifica per risolvere potenziali condizioni di gara tra più istanze di LiveData utilizzate da WorkManager.
  • È stato eseguito il passaggio all'utilizzo della dipendenza Room 1.1.1 anziché 1.1.1-rc01. Queste versioni sono identiche. b/122578011

Versione 1.0.0-beta01

19 dicembre 2018

Questa release non contiene modifiche all'API. In futuro, l'API di WorkManager dovrebbe rimanere stabile fino alla versione successiva, 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 del lavoro 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 modifica minore all'API che sarà utile per alcuni utenti di Kotlin.

Modifiche all'API

  • androidx.work.Result è stato spostato come classe interna di ListenableWorker. In questo modo si evitano conflitti di refactoring con la classe di primo livello Result di Kotlin. Si tratta di una modifica dell'API che comporta una interruzione del servizio. b/120564418

Modifiche alle API che comportano interruzione del servizio

  • androidx.work.Result è stato spostato come classe interna di ListenableWorker.

Versione 1.0.0-alpha12

5 dicembre 2018

Questa release contiene alcune modifiche alle API che causano interruzioni; consulta la sezione Modifiche alle API che causano interruzioni di seguito. È probabile che questa versione venga rilasciata come prima versione beta. alpha12 contiene anche aggiornamenti dettagliati della documentazione.

Modifiche all'API

  • Un nuovo elemento, work-rxjava2, introduce RxWorker. Questo è un ListenableWorker che si aspetta un Single<Payload>.
  • Il supporto di Firebase JobDispatcher è stato rimosso a causa della sua imminente ritiro. Ciò significa che l'elemento work-firebase non verrà più aggiornato quando passeremo alla versione beta. Stiamo valutando la possibilità di aggiungere un'alternativa in futuro.
  • Campo Payload unito a Result. Result ora è una "classe sigillata" con tre implementazioni concrete, che puoi ottenere tramite Result.success() (o Result.success(Data)), Result.failure() (o Result.failure(Data)) e Result.retry(). Ora i tuoi ListenableFuture risultano Result anziché Payload. Worker non hanno metodi getter e setter per l'output Data. Si tratta di una modifica che provoca un errore.
  • Sono stati aggiunti Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit) e Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit) e le relative varianti per supportare meglio gli URI dei contenuti con attivazione lenta. b/119919774
  • È stata aggiunta la variante WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration). Questo metodo richiede l'API 26.
  • Sono stati aggiunti i metodi di estensione Kotlin Operation.await() e ListenableFuture.await().
  • Operation.getException() rinominato in Operation.getThrowable(). Si tratta di una modifica che provoca un errore.
  • La classe ContentUriTriggers e i metodi che fanno riferimento non sono più disponibili per l'utilizzo pubblico. Si tratta di una modifica che provoca un errore.
  • È stato rimosso il resto dei metodi con parametri varargs in WorkManager, WorkContinuation e OneTimeWorkRequest per semplificare l'API. Per risolvere eventuali problemi di compilazione, puoi racchiudere i parametri varargs esistenti con Arrays.asList(...). Sono comunque incluse le versioni con un solo argomento di ciascun metodo. Si tratta di una modifica che provoca un errore.
  • WorkContinuation.combine(OneTimeWorkRequest, *) varianti rimosse. L'API era confusa; i metodi combine esistenti sono più comprensibili. Si tratta di una modifica che provoca un errore.

Correzioni di bug

  • Le implementazioni precedenti a Marshmallow sono ora più affidabili nel recupero dal decesso del processo di un'attività già in esecuzione.
  • LiveData osservato tramite observeForever viene monitorato tramite WorkManager. Si tratta di un backport di una correzione della libreria Room. b/74477406
  • Data.Builder.build() ora genera un'eccezione se l'oggetto serializzato supera le dimensioni massime. In precedenza, questo accadeva solo in un thread in background in cui non era possibile gestirlo correttamente.
  • Distingue ulteriormente il lavoro interrotto da quello annullato; getWorkInfoById() restituirà un WorkInfo con il CANCELLED State durante ListenableWorker.onStopped().
  • Tratta i null Result come errori in ListenableWorker. b/120362353
  • Correzione speculativa per i tablet Shield con API 24 che a volte generavano un errore IllegalArgumentException. b/119484416

Modifiche alle API che comportano interruzione del servizio

  • Il supporto di Firebase JobDispatcher è stato rimosso a causa della sua imminente ritiro. Ciò significa che l'elemento work-firebase non verrà più aggiornato quando passeremo alla versione beta. Stiamo valutando la possibilità di aggiungere un'alternativa in futuro.
  • Campo Payload unito a Result. Result ora è una "classe sigillata" con tre implementazioni concrete, che puoi ottenere tramite Result.success() (o Result.success(Data)), Result.failure() (o Result.failure(Data)) e Result.retry(). Ora i tuoi ListenableFuture risultano Result anziché Payload. Worker non hanno metodi getter e setter per l'output Data.
  • Sono stati aggiunti i metodi di estensione Kotlin Operation.await() e ListenableFuture.await().
  • Operation.getException() rinominato in Operation.getThrowable().
  • La classe ContentUriTriggers e i metodi che fanno riferimento non sono più disponibili per l'utilizzo pubblico.
  • È stato rimosso il resto dei metodi con parametri varargs in WorkManager, WorkContinuation e OneTimeWorkRequest per semplificare l'API. Per risolvere eventuali problemi di compilazione, puoi racchiudere i parametri varargs esistenti con Arrays.asList(...). Sono comunque incluse le versioni con un solo argomento di ciascun metodo.
  • WorkContinuation.combine(OneTimeWorkRequest, *) varianti rimosse. L'API era confusa; i metodi combine esistenti sono più comprensibili.

Versione 1.0.0-alpha11

8 novembre 2018

Questa release contiene molte modifiche che diventeranno API stabili a partire dal giorno beta. In questa release sono presenti modifiche alle API che causano interruzioni; consulta la sezione Modifiche alle API che causano interruzioni di seguito.

Modifiche all'API

  • work-runtime-ktx introduce un nuovo CoroutineWorker.
  • WorkStatus è stato rinominato in WorkInfo. Tutte le varianti del metodo getStatus corrispondenti sono state rinominate in varianti getWorkInfo corrispondenti. Si tratta di una modifica che provoca un errore.
  • ListenableWorker.onStopped() non accetta più un argomento booleano che indica se WorkRequest è stato annullato. WorkManager non fa più questa distinzione. Si tratta di una modifica che provoca un errore.
  • Il pacchetto androidx.work.test è stato rinominato in androidx.work.testing. Si tratta di una modifica che provoca un errore.
  • I setter su Constraints non fanno più parte dell'API pubblica. Si tratta di una modifica che provoca un errore.
  • WorkerParameters.getTriggeredContentUris() e WorkerParameters.getTriggeredContentAuthorities() array restituiti in precedenza. Ora questi metodi restituiscono Collections. Si tratta di una modifica che provoca un errore.
  • Il nuovo nome di ListenableWorker.onStartWork() è ListenableWorker.startWork(). Si tratta di una modifica che provoca un errore.
  • Il costruttore di WorkStatus non fa più parte dell'API pubblica. Si tratta di una modifica che provoca un errore.
  • Configuration.getMaxJobSchedulerID() e Configuration.getMinJobSchedulerID() vengono rinominati rispettivamente in Configuration.getMinJobSchedulerId() e Configuration.getMaxJobSchedulerId(). Si tratta di una modifica che provoca un errore.
  • Sono state aggiunte molte annotazioni @NonNull all'API pubblica per migliorare l'ergonomia dell'API.
  • Aggiungi l'API WorkManager.enqueueUniqueWork() per mettere in coda OneTimeWorkRequest univoci senza dover creare un WorkContinuation.
  • Tutte le varianti dei metodi enqueue e cancel in WorkManager ora restituiscono un nuovo tipo Operation. Si tratta di una modifica che provoca un errore.
  • Tutte le varianti di enqueue non accettano più parametri varargs per i WorkRequest. Si tratta di una modifica che provoca un errore. Utilizza invece le raccolte. Puoi utilizzare Arrays.asList() per modificare il codice esistente. Lo abbiamo fatto per ridurre il numero di metodi e API.
  • Il tentativo di initialize WorkManager più di una volta per processo ora comporterà un IllegalStateException. Si tratta di una modifica che provoca un errore.

Correzioni di bug

  • I WorkRequest.Builder nell'elemento work-runtime-ktx ora utilizzano i ListenableWorker. Correzioni b/117666259
  • Assicurati che la prossima ora di esecuzione di PeriodicWork sia nel futuro. Correzioni b/118204399
  • Rimuovi le potenziali operazioni di I/O disco quando utilizzi WorkManager all'avvio dell'app. Correzioni b/117796731
  • Correggi una condizione di gara in WorkConstraintsTracker. Correzioni android-workmanager/issues/56

Modifiche alle API che comportano interruzione del servizio

  • WorkStatus è stato rinominato in WorkInfo. Tutte le varianti del metodo getStatus corrispondenti sono state rinominate in varianti getWorkInfo corrispondenti.
  • ListenableWorker.onStopped() non accetta più un argomento booleano che indica se WorkRequest è stato annullato. WorkManager non fa più questa distinzione.
  • Il pacchetto androidx.work.test è stato rinominato in androidx.work.testing.
  • I setter su Constraints non fanno più parte dell'API pubblica.
  • WorkerParameters.getTriggeredContentUris() e WorkerParameters.getTriggeredContentAuthorities() array restituiti in precedenza. Ora questi metodi restituiscono Collections.
  • Il nuovo nome di ListenableWorker.onStartWork() è ListenableWorker.startWork().
  • Il costruttore di WorkStatus non fa più parte dell'API pubblica.
  • Configuration.getMaxJobSchedulerID() e Configuration.getMinJobSchedulerID() vengono rinominati rispettivamente in Configuration.getMinJobSchedulerId() e Configuration.getMaxJobSchedulerId().
  • Tutte le varianti dei metodi enqueue e cancel in WorkManager ora restituiscono un nuovo tipo Operation.
  • Tutte le varianti di enqueue non accettano più parametri varargs per i WorkRequest.
  • Il tentativo di initialize WorkManager più di una volta per processo ora comporterà un IllegalStateException.

Versione 1.0.0-alpha10

11 ottobre 2018

Questa release supporta il lavoro asincrono controllato dallo sviluppatore. Questa release contiene modifiche alle API che comportano interruzioni; consulta la sezione Modifiche alle API che comportano interruzioni di seguito.

Prevediamo che WorkManager entrerà nelle fasi finali del periodo alpha. Ci aspettiamo che l'API sia stabile in versione beta, quindi ti invitiamo a inviare il tuo feedback nel nostro tracker dei problemi.

Modifiche all'API

  • Sono stati rimossi tutti i metodi e le classi deprecated precedenti, in particolare il costruttore Worker predefinito. Si tratta di una modifica dell'API che comporta un errore.
  • NonBlockingWorker è stato rinominato in ListenableWorker, che ora è un corso pubblico non nascosto e pronto per l'utilizzo.
    • ListenableWorker fornisce l'accesso a un metodo astratto, ListenableFuture<Payload> onStartWork(), che viene chiamato nel thread principale. Sta a te avviare ed elaborare il lavoro in modo asincrono. Al termine, devi aggiornare ListenableFuture di conseguenza. Le implementazioni di riferimento dei ListenableFuture sono fornite nel pacchetto Futures in alpha02 (vedi sotto la sezione WorkManager).
    • Worker estende ListenableWorker e funziona come prima, con un metodo Result doWork() astratto.
    • Ho rimescolato alcuni metodi e membri da Worker a ListenableWorker.
    • A breve forniremo implementazioni di riferimento per i ListenableWorker che utilizzano le coroutine Kotlin (una volta rilasciate le versioni stabili) e RxJava2.
  • L'interfaccia WorkerFactory e l'implementazione concreta DefaultWorkerFactory sono state unite in una classe astratta denominata WorkerFactory. L'implementazione garantisce che il comportamento predefinito basato sulla riflessione venga chiamato come ultima risorsa per tutte le istanze WorkerFactory create dall'utente. Si tratta di una modifica che provoca un errore.
  • Sono stati rimossi WorkManager.synchronous() e WorkContinuation.synchronous() e tutti i metodi correlati. È stato aggiunto ListenableFuture<Void> come tipo di ritorno di molti metodi nell'API. Si tratta di una modifica dell'API che comporta un errore.
    • Ora puoi ottenere e osservare in modo sincrono utilizzando i ListenableFuture. Ad esempio, WorkManager.enqueue() restituisce void; ora restituisce ListenableFuture<Void>. Puoi chiamare ListenableFuture.addListener(Runnable, Executor) o ListenableFuture.get() per eseguire il codice al termine dell'operazione.
    • Tieni presente che questi ListenableFuture non ti dicono se l'operazione è riuscita o meno, ma solo che è stata completata. Dovrai comunque concatenare i metodi WorkManager per scoprire queste informazioni.
    • Ignoriamo le chiamate cancel() su questi oggetti perché sono confuse e difficili da comprendere (annulli l'operazione o il lavoro risultante?). Questo è previsto dal contratto di Future.
    • Per mantenere la parità con i metodi getStatus* sincroni, abbiamo fornito varianti di ListenableFuture e abbiamo rinominato quelle esistenti che restituivano LiveData in modo che includessero esplicitamente "LiveData" nel nome (ad esempio getStatusesByIdLiveData(UUID)). Si tratta di una modifica dell'API che comporta una rottura.

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 eliminando exclude 'META-INF/proguard/androidx-annotations.pro' dal file gradle.
  • Sono state aggiunte configurazioni ProGuard per mantenere il nuovo costruttore Worker. b/116296569
  • Correzione di un potenziale NullPointerException in una condizione di gara in cui il lavoro è stato REPLACE. b/116253486 e b/116677275
  • WorkContinuation.combine() ora accetta uno o più WorkContinuation anziché due o più. b/117266752

Modifiche alle API che comportano interruzione del servizio

  • Sono stati rimossi tutti i metodi e le classi deprecated precedenti, in particolare il costruttore Worker predefinito.
  • L'interfaccia WorkerFactory e l'implementazione concreta DefaultWorkerFactory sono state unite in una classe astratta denominata WorkerFactory.
  • WorkManager.synchronous() e WorkContinuation.synchronous() sono stati rimossi.
  • I metodi WorkManager.getStatus*() ora restituiscono ListenableFuture. WorkManager.getStatus*LiveData() restituisce LiveData.

Versione 1.0.0-alpha09

19 settembre 2018

Problema noto

Se riscontri il seguente problema: "Sono stati trovati più file con il percorso indipendente dal sistema operativo "META-INF/proguard/androidx-annotations.pro"", inserisci quanto segue nel file gradle come soluzione temporanea mentre risolviamo il problema in alpha10:

Groovy

android {
    packagingOptions {
        exclude 'META-INF/proguard/androidx-annotations.pro'
    }
}

Kotlin

android {
    packagingOptions {
        exclude("META-INF/proguard/androidx-annotations.pro")
    }
}

Correzioni di bug

  • È stata aggiunta un'altra correzione necessaria per l'errore "100 job". b/115560696
  • Sono state aggiunte alcune correzioni per gli errori di vincolo delle chiavi esterne dovuti a condizioni di gara. b/114705286
  • ConstraintTrackingWorker.onStopped(boolean) delegato chiama Worker sottostante. b/114125093
  • Applica il ritardo di backoff minimo corretto per Firebase JobDispatcher. b/113304626
  • La gestione migliorata dei thread garantisce la sicurezza interna della raccolta.
  • Correggere un potenziale problema con l'eliminazione delle duplicazioni di LiveData internamente.

Modifiche all'API

  • Ora puoi creare le tue istanze Worker in fase di esecuzione specificando un WorkerFactory all'interno del WorkManager.Configuration. La fabbrica di riserva è DefaultWorkerFactory, che corrisponde al comportamento delle versioni precedenti di WorkManager.
    • I costruttori predefiniti per Worker e NonBlockingWorker sono ora contrassegnati come deprecati. Utilizza il nuovo costruttore (Worker(Context, WorkerParameters)) e chiama super(Context, WorkerParameters); le versioni future di WorkManager rimuoveranno il costruttore predefinito.
  • Abbiamo iniziato a utilizzare internamente il nuovo artefatto ListenableFuture (senza dipendenze da Guava). Nelle release future introdurremo ListenableFutures nell'API. Questa modifica supporterà l'eventuale annullamento dell'oscuramento di NonBlockingWorker.
  • Aggiunta della possibilità di attivare il lavoro a tempo in TestDriver tramite TestDriver.setInitialDelayMet(UUID) e TestDriver.setPeriodDelayMet(UUID). b/113360060

Modifiche che provocano un errore

  • I costruttori predefiniti Worker e NonBlockingWorker sono stati ritirati. Esegui la migrazione al nuovo costruttore il prima possibile. Nelle versioni future il costruttore predefinito verrà rimosso.

Versione 1.0.0-alpha08

27 agosto 2018

Correzioni di bug

  • Componenti WorkManager etichettati esplicitamente come non a conoscenza del boot diretto in modo che non vengano avviati durante il boot diretto. In futuro, forniremo una versione di WorkManager che supporta il riavvio diretto. b/112665532
  • È stato risolto un problema per cui il lavoro di ripetizione non veniva eseguito. b/112604021
  • È stato corretto il problema relativo all'esecuzione ripetuta del lavoro periodico (correlato al problema precedente). b/112859683
  • I criteri di backoff vengono rispettati quando il processo dell'app è già in esecuzione.
  • Messaggi di eccezione corretti in Data per indicare che il limite è 10 KB.
  • Il valore massimo di Configuration.setMaxSchedulerLimit(int) è stato ridotto a 50 per tenere conto di una certa latenza nel completamento dell'elaborazione di JobScheduler. b/112817355

Versione 1.0.0-alpha07

16 agosto 2018

Correzioni di bug

  • È stata corretta una potenziale query SQL con limiti negativi che poteva restituire un numero illimitato di risultati.
  • Il lavoro di cui è stata completata l'esecuzione ora annulla correttamente tutte le copie in attesa in altri pianificatori. Ciò ha comportato il superamento del limite di JobScheduler job. b/111569265
  • È stato corretto un ConcurrentModificationException in ConstraintTracker. b/112272753
  • Le annotazioni del tipo di ritorno di Data.getBooleanArray(String) e Data.getIntArray(String) sono state modificate in @Nullable anziché in @NonNull. b/112275229

Modifiche all'API

  • Worker ora estende un nuovo corso, NonBlockingWorker. Ciò non influisce sull'utilizzo corrente. In futuro, NonBlockingWorker diventerà un'entità completamente supportata per le soluzioni di threading personalizzate.
  • Le annotazioni del tipo di ritorno di Data.getBooleanArray(String) e Data.getIntArray(String) sono state modificate in @Nullable anziché in @NonNull. b/112275229
  • Estensioni Kotlin: è stata ritirata la funzionalità Map.toWorkData() ed è stato aggiunto un workDataOf(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

  • Impedire il blocco di un database durante la pianificazione del lavoro. b/111801342
  • È stato corretto un bug che causava l'interruzione dell'esecuzione di PeriodicWork secondo la pianificazione in modalità Sospensione. b/111469837
  • Correzione di una condizione di gara durante il monitoraggio dei vincoli che causa l'arresto anomalo di WorkManager. googlecodelabs/android-workmanager/issues/56
  • Crea WorkRequest univoci quando utilizzi WorkRequest.Builder#build(). b/111408337
  • Attiva l'uso di RescheduleReceiver solo quando sono presenti WorkRequest che lo richiedono. b/111765853

Versione 1.0.0-alpha05

24 luglio 2018

Modifiche all'API

  • WorkManager.getInstance() ora è annotato con @NonNull anziché @Nullable. Se invece il singleton non viene inizializzato correttamente in caso di inizializzazione manuale, il metodo lancerà un IllegalStateException. Si tratta di una modifica dell'API che comporta una interruzione del servizio.
  • È stata aggiunta una nuova API, Configuration.Builder.setMinimumLoggingLevel(int), che può controllare la verbosità di WorkManager. Per impostazione predefinita, WorkManager registra Log.INFO e versioni successive.
  • È stata modificata la firma di Data.getString() in modo che non accetti più un valore predefinito (è implicitamente null). Si tratta di una modifica dell'API che comporta una rottura.
  • Alcuni metodi necessari solo per l'utilizzo interno sono contrassegnati come @hide. Sono inclusi il costruttore Constraints, Data.toByteArray() e Data.fromByteArray(byte[]). Si tratta di una modifica dell'API che comporta un errore.

Correzioni di bug

  • WorkManager non esegue più il lavoro nei casi noti di backup automatico. Ciò potrebbe aver causato un arresto anomalo. b/110564377
  • È stato corretto il problema di doppia pianificazione dei PeriodicWorkRequest quando si utilizza JobScheduler. b/110798652
  • È stato risolto un problema relativo all'esecuzione non corretta dei comandi 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 concorrenza e di tempistica.
  • Sono stati liberati correttamente i BroadcastReceiver non più necessari.
  • Rendimento ottimizzato della riprogrammazione al riavvio delle app dopo la chiusura forzata.
  • Consente di chiamare TestScheduler.setAllConstraintsMet(UUID) prima o dopo l'inserimento in coda del WorkRequest specificato. b/111238024

Modifiche che provocano un errore

  • WorkManager.getInstance() ora è annotato con @NonNull anziché @Nullable.
  • È stata modificata la firma di Data.getString() in modo che non assuma più un valore predefinito (è implicitamente null).
  • Alcuni metodi necessari solo per l'utilizzo interno sono contrassegnati come @hide. Sono inclusi il costruttore Constraints, Data.toByteArray() e Data.fromByteArray(byte[]).

Versione 1.0.0-alpha04

26 giugno 2018

Correzioni di bug

  • Ora i PeriodicWorkRequest vengono riprogrammati correttamente quando si utilizza l'implementazione basata su AlarmManager.
  • È stato corretto un potenziale ANR durante la riprogrammazione di tutti i worker dopo un arresto forzato o un riavvio. b/110507716
  • Sono state aggiunte annotazioni di nullità a varie API WorkManager. b/110344065
  • Registra le eccezioni non rilevate che si verificano durante l'esecuzione del worker. b/109900862
  • Sono state consentite migrazioni distruttive del database nel caso in cui tu decida di eseguire il rollback a una versione precedente di WorkManager. b/74633270
  • È stato corretto un arresto anomalo della migrazione in caso di creazione di tag impliciti duplicati. Si tratta di un problema molto raro che si verifica solo se hai utilizzato lo stesso formato del tag implicito.

Versione 1.0.0-alpha03

19 giugno 2018

Correzioni di bug

  • È stata corretta una condizione di gara nell'implementazione basata su AlarmManager. b/80346526.

  • È stato corretto il problema dei job duplicati quando si utilizza JobScheduler dopo il riavvio del dispositivo.

  • I job con attivatori URI contenuto ora rimangono invariati dopo i riavvii. b/80234744

  • Aggiornamenti della documentazione. b/109827628, b/109758949, b/80230748

  • È stato corretto un arresto anomalo durante la riassegnazione di una WorkRequest. b/109572353.

  • Sono stati corretti gli avvisi del compilatore Kotlin quando si utilizza la dipendenza work-runtime-ktx.

  • WorkManager ora utilizza la versione Room 1.1.1-rc1.

Modifiche all'API

  • È stata aggiunta getStatusesSync(), la versione sincrona di WorkContinuation.getStatuses().
  • Worker è in grado di distinguere l'annullamento avviato dall'utente dall'interruzione temporanea richiesta dal sistema operativo. Worker.isStopped() restituisce true se è stato richiesto un qualsiasi tipo di arresto. Worker.isCancelled() restituisce true quando il lavoro è stato annullato esplicitamente. b/79632247
  • È stato aggiunto il supporto per JobParameters#getNetwork() nell'API 28. Questo viene visualizzato tramite Worker.getNetwork().
  • È stato aggiunto Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit) per consentirti di impostare il numero di job che possono essere inviati a JobScheduler o AlarmManager. In questo modo, WorkManager non occuperà tutti gli slot JobScheduler disponibili.
  • È stato aggiunto Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId) che consente di definire un intervallo di ID job JobScheduler sicuri per l'utilizzo di WorkManager. b/79996760
  • Worker.getRunAttemptCount() restituisce il conteggio corrente delle esecuzioni per un determinato Worker. b/79716516
  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork) ti consente di mettere in coda PeriodicWorkRequest univoci. b/79600647
  • WorkManager.cancelAllWork() annulla tutti i Worker. Le librerie che dipendono da WorkManager possono eseguire query sull'ultima chiamata di questo metodo utilizzando WorkManager.getLastCancelAllTimeMillis() per una pulizia aggiuntiva dello stato interno.
  • È stato aggiunto WorkManager.pruneWork() per rimuovere i job completati dal database interno. b/79950952, b/109710758

Modifiche al comportamento

  • È stato aggiunto un tag implicito per tutti i WorkRequest, ovvero il nome di classe completo del Worker. In questo modo, puoi rimuovere i WorkRequest senza tag o quando il id non è disponibile. b/109572351

Modifiche che provocano un errore

  • Worker.WorkerResult rinominato in Worker.Result.
  • Worker.onStopped ora ha un parametro isCancelled aggiuntivo impostato su true quando Worker è stato annullato esplicitamente.

Versione 1.0.0-alpha02

24 maggio 2018

Correzioni di bug

  • È stato corretto un problema relativo a NullPointerException in data State.isFinished(). b/79550068
  • È stato risolto un problema che causava la riprogrammazione dei Worker in data Application.onCreate(). b/79660657
  • È stato risolto un problema che consentiva di pianificare più lavoro di quanto consentito dal sistema operativo. b/79497378
  • La pulizia dei wakelock associati ai Worker è stata spostata nel thread in background.
  • L'implementazione di AlarmManager ora esegue correttamente la pulizia al termine di tutti i lavori in attesa.
  • Sono state corrette le query SQL di pulizia che interessavano le lingue diverse dall'inglese. b/80065360
  • È stato aggiunto il supporto per i float in Data. b/79443878
  • Data.Builder.putAll() ora restituisce un'istanza di Builder. b/79699162
  • Altre javadoc e correzioni nella documentazione. b/79691663

Modifiche all'API

  • Worker può reagire all'interruzione. Worker.isStopped() può essere utilizzato per verificare se un Worker è stato interrotto. Worker.onStopped() può essere utilizzato per eseguire operazioni di pulizia leggere.
  • L'API Worker.getTags() restituisce un Set di tag associati al Worker.
  • Sono stati aggiunti sovraccarichi di javax.time.Duration per le API che accettano una combinazione di durata e TimeUnit. È sorvegliato da @RequiresApi(26).
  • Le estensioni WorkManager sono state spostate dal pacchetto androidx.work.ktx al pacchetto androidx.work. Le vecchie estensioni sono deprecate e verranno rimosse in una versione futura.
  • Configuration.withExecutor() è deprecato. Utilizza invece Configuration.setExecutor().

Versione 1.0.0-alpha01

8 maggio 2018

WorkManager semplifica la pianificazione e l'esecuzione di operazioni in background garantite e consapevoli dei vincoli. Questa release iniziale è 1.0.0-alpha01.