Responsabile lavoro

L'API WorkManager semplifica la pianificazione di attività asincrone differibili e asincrone che devono essere eseguite in modo affidabile. Queste API consentono di creare un'attività e passarla a WorkManager affinché venga eseguita quando vengono soddisfatti i vincoli di lavoro.
Aggiornamento più recente Release stabile Candidato per la release Versione beta Release alpha
24 gennaio 2024 2.9.0 - - 2.10.0-alpha01

Dichiarazione delle dipendenze

Per aggiungere una dipendenza a WorkManager, devi aggiungere il Repository Maven di Google al tuo progetto:

Aggiungi le dipendenze per gli artefatti necessari nel file build.gradle per l'app o il modulo:

Trendy

dependencies {
    def work_version = "2.9.0"

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

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

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

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

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

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

Kotlin

dependencies {
    val work_version = "2.9.0"

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

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

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

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

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

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

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

Per ulteriori informazioni sulle dipendenze, consulta Aggiungere dipendenze build.

Feedback

Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se rilevi nuovi problemi o hai idee per migliorare la libreria. Dai un'occhiata ai problemi esistenti in questa libreria prima di crearne una nuova. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.

Crea un nuovo problema

Per ulteriori informazioni, consulta la documentazione di Issue Tracker.

Versione 2.10

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. Ciò consente un controllo più granulare sulla rete che questo worker deve eseguire.

Modifiche alle API

  • Aggiunta della possibilità di specificare NetworkRequest come vincolo. (Id98a1, b/280634452)

Versione 2.9

Versione 2.9.0

29 novembre 2023

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

Modifiche importanti dalla versione 2.8.0

  • Osservabilità tramite Flow s. Al posto di LiveData, i progressi del worker ora possono essere osservati tramite Flow tramite WorkManager.getWorkInfosFlow e metodi simili.
  • Ora WorkManager fornisce un suggerimento sul motivo per cui un worker è stato precedentemente arrestato. Può essere interrogata da un worker tramite il metodo getStopReason() o da WorkInfo tramite getStopReason().
  • Pianificazione precisa dei worker periodici tramite setNextScheduleTimeOverride. Ciò consente il calcolo dinamico del successivo piano di lavoro periodico, che può essere utilizzato per implementare funzionalità avanzate come tempi di aggiornamento adattivi, comportamento personalizzato per i nuovi tentativi o possibilità di eseguire un worker del feed di notizie prima che l'utente si svegli ogni mattina senza cambiamenti. È consigliabile utilizzare ExistingPeriodicWorkPolicy.UPDATE con queste tecniche per evitare di annullare un worker attualmente in esecuzione durante la pianificazione di quello successivo.
  • Test di WorkManager con i thread corrispondenti alla produzione. ExecutorsMode.PRESERVE_EXECUTORS può essere utilizzato in initializeTestWorkManager per preservare gli esecutori impostati in Configuration e utilizzare il thread principale reale.
  • Le API di Coroutines come CoroutineWorker sono state spostate dall'artefatto aggiuntivo work-runtime-ktx all'esecuzione dell'artefatto principale. Il valore di work-runtime-ktx è ora vuoto.

Modifiche alle API

  • stopReason è stato aggiunto a WorkInfo. Rende stopReason disponibile dopo l'esecuzione del worker. Potrebbe essere utile per generare report stopReason in modo fruibile, perché una volta che un lavoratore si arresta, un'app stessa potrebbe cadere molto rapidamente. (I21386)
  • Consenti l'impostazione di Clock tramite configurazione e l'utilizzo della sequenza di esecuzione dei test dei worker. (Ic586e)
  • Il metodo getStopReason() è stato aggiunto a ListenableWorker per fornire un suggerimento sul motivo per cui il worker è stato arrestato. (I07060)
  • È stato aggiunto WorkManagerTestInitHelper#closeWorkDatabase() per evitare l'avviso di Closeguard sulla perdita di risorse. (Ia8d49).
  • Al momento il costruttore di WorkInfo è pubblico, il che può essere utile per i test. (Ia00b6, b/209145335).
  • Ora work-runtime-ktx è vuoto, CoroutineWorker e altre utilità specifiche di Kotlin sono ora disponibili nell'artefatto principale di runtime. (I71a9a)
  • Aggiunto il metodo setNextScheduleTimeOverride, che consente di impostare in modo accurato gli orari di lavoro periodici (I3b4da)
  • È stato aggiunto getNextScheduleTimeMillis per ottenere le informazioni sulla durata pianificata dell'aggiunta a WorkInfo. (I797e4).
  • Le informazioni su ritardo iniziale e periodicità vengono aggiunte a WorkInfo. (I52f2f)
  • Metodo aggiunto per osservare i worker tramite Flows tramite i metodi getWorkInfosByTagFlow, getWorkInfoByIdFlow, getWorkInfosForUniqueWorkFlow, getWorkInfosFlow (If122a)
  • Sono state aggiunte le annotazioni @RequiresApi(...) mancanti ai costruttori e alle proprietà di Constraints. Ora sono allineati con le annotazioni corrispondenti sui setter in Constraints.Builder esistenti nelle prime versioni di WorkManager. (I6d7d2).
  • WorkManager ora ha un limite separato per i worker dell'URI di contenuti per concedere loro slot garantiti in JobScheduler al fine di evitare aggiornamenti dei contenuti mancanti quando il 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 alle 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 precedentemente arrestato. Può essere interrogata da un worker tramite il metodo getStopReason() o da WorkInfo tramite getStopReason().

Modifiche alle API

  • stopReason è stato aggiunto a WorkInfo. Rende disponibile stopReason dopo l'esecuzione del worker. Potrebbe essere utile per generare report stopReason in modo fruibile, perché una volta arrestato un worker, un'app stessa potrebbe cessare molto rapidamente. (I21386)
  • Consenti l'impostazione dell'orologio tramite configurazione e l'utilizzo della sequenza di esecuzione dei test dei worker. (Ic586e)
  • Il metodo getStopReason() è stato aggiunto a ListenableWorker per fornire un suggerimento sul motivo per cui il worker è stato arrestato. (I07060)
  • È stato aggiunto WorkManagerTestInitHelper#closeWorkDatabase() per evitare l'avviso di Closeguard sulla perdita di risorse. (Ia8d49).

Correzioni di bug

  • Aggiunta la possibilità di bypassare overrideNextScheduleTime utilizzando TestDriver e risolto i problemi relativi alla testbilità. (Ic2905)

Versione 2.9.0-alpha01

7 giugno 2023

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

Nuove funzionalità

  • Osservabilità tramite Flow s. Al posto di LiveData, i progressi del worker ora possono essere osservati tramite Flow tramite WorkManager.getWorkInfosFlow e metodi simili.
  • Pianificazione precisa dei worker periodici tramite setNextScheduleTimeOverride. Ciò consente il calcolo dinamico del successivo piano di lavoro periodico, che può essere utilizzato per implementare funzionalità avanzate come tempi di aggiornamento adattivi, comportamento personalizzato per i nuovi tentativi o possibilità di eseguire un worker del feed di notizie prima che l'utente si svegli ogni mattina senza cambiamenti. È consigliabile utilizzare ExistingPeriodicWorkPolicy.UPDATE con queste tecniche per evitare di annullare un worker attualmente in esecuzione durante la pianificazione di quello successivo.
  • Test di WorkManager con thread corrispondenti alla produzione. ExecutorsMode.PRESERVE_EXECUTORS può essere utilizzato per preservare gli esecutori impostati in Configuration e utilizzare il thread principale reale.
  • Le API delle coroutine come CoroutineWorker sono state spostate dall'artefatto aggiuntivo work-runtime-ktx all'artefatto principale work-runtime. Ora il campo work-runtime-ktx è vuoto.

Modifiche alle API

  • Il costruttore di WorkInfo ora è pubblico. Questo può essere utile per i test. (Ia00b6, b/209145335).
  • work-runtime-ktx ora è vuoto, CoroutineWorker e altre utilità specifiche di kotlin sono ora disponibili nell'artefatto work-runtime principale. (I71a9a)
  • Aggiunto il metodo setNextScheduleTimeOverride, che consente di impostare in modo accurato gli orari di lavoro periodici (I3b4da)
  • Rinominato getEarliestRunTimeMillis in getNextScheduleTimeMillis. (I2bd7a).
  • Le informazioni sulla prossima esecuzione pianificata vengono aggiunte a WorkInfo. (I797e4).
  • Le informazioni su ritardo iniziale e periodicità vengono aggiunte a WorkInfo. (I52f2f)
  • Metodo aggiunto per osservare i worker tramite Flows tramite i metodi getWorkInfosByTagFlow, getWorkInfoByIdFlow, getWorkInfosForUniqueWorkFlow, getWorkInfosFlow (If122a)
  • Sono state aggiunte le annotazioni @RequiresApi(...) mancanti ai costruttori e alle proprietà di Vincoli. Ora sono allineati con le annotazioni corrispondenti sui setter in Constraints.Builder esistenti nelle prime versioni di WorkManager. (I6d7d2).
  • WorkManager ora ha un limite separato per i worker dell'URI di contenuti per concedere loro slot garantiti in JobScheduler al fine di evitare aggiornamenti dei contenuti mancanti quando il 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'errore ANR in RescheduleReceiver, che in precedenza non gestiva correttamente due trasmissioni simultanee. (b/236906724)

Versione 2.8.0

8 febbraio 2023

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

Modifiche importanti dalla versione 2.7.0

Nuove funzionalità

Modifiche alle API

  • WorkManager.updateWork è stato aggiunto per aggiornare il lavoro mantenendo il tempo di coda e il concatenamento originali.(I9a248, b/219446409)
  • Membri aggiunti: ExistingPeriodicWorkPolicy.UPDATE Queste norme consentono di aggiornare un lavoro periodico in base al nome. È simile al REPLACE esistente, ma è meno invadente: non annulla un worker se è attualmente in esecuzione e conserva il tempo di coda: il ritardo iniziale e il periodo vengono calcolati in base al tempo di coda originale e non all'ora di aggiornamento. L'API REPLACE è stata ritirata per ridurre la confusione tra REPLACE e UPDATE, con nomi molto simili. Se vuoi ancora mantenere la semantica precedente di REPLACE, puoi utilizzare il nuovo CANCEL_AND_REENQUEUE, che è identico a REPLACE. (I985ed, b/219446409)
  • È stata aggiunta la possibilità di intercettare le eccezioni di pianificazione che forniscono Consumer<Throwable> tramite setSchedulingExceptionHandler)
  • È stata aggiunta la possibilità di fornire Consumer<Throwable> tramite setInitializationExceptionHandler per determinare se si sono verificati problemi durante il tentativo di inizializzare WorkManager.
  • Gli helper in linea per OneTimeWorkRequest e PeriodicWorkRequest sono stati spostati da androidx.work:work-runtime-ktx a androidx.work:work-runtime (I0010f, b/209145335)
  • Sono stati aggiunti i metodi helper WorkQuery.fromIds, WorkQuery.fromStates, WorkQuery.fromUniqueWorkNames e WorkQuery.fromTags per creare direttamente WorkQuery. (b/199919736) (If48f2, b/199919736)
  • Elemento getForegroundInfo aggiunto alla raccolta Worker. (Ic1ead)
  • RxWorker ora per RxJava 2 e RxJava 3 ha restituito setForeground il valore 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 creati direttamente anziché utilizzare Constraints.Builder, il che è una soluzione comoda per gli utenti di Kotlin. (Idc390, b/137568653)
  • È stata aggiunta la possibilità di controllare se WorkManager è stato inizializzato. È stata inoltre aggiunta una nuova API getConfiguration() per consentire agli sviluppatori delle librerie di recuperare la configurazione con cui è stato inizializzato WorkManager. (I6eff3, b/212300336).

Correzioni di bug

  • Risolto il problema dello scheduler greedy che impediva l'esecuzione immediata dei worker se sotto carico. (I9686b, b/248111307)
  • È stato aggiunto l'elemento @RequiresPermission alle API che richiedono la concessione dell'autorizzazione POST_NOTIFICATIONS su SDK 33 e versioni successive. (Ie542e, b/238790278).
  • Propaga gli annullamenti nel CoroutineScope in 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 picco di versione

Versione 2.8.0-beta02

9 novembre 2022

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

Correzioni di bug

  • Risolto il metodo equals in WorkInfo, che in precedenza non prendeva in considerazione le informazioni della nuova generazione. (4977cc)

Versione 2.8.0-beta01

5 ottobre 2022

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

Correzioni di bug

  • Risolto il problema dello scheduler greedy che impediva l'esecuzione immediata dei worker se sotto carico. (I9686b, b/248111307)

Versione 2.8.0-alpha04

7 settembre 2022

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

Modifiche alle API

  • Sono stati aggiunti WorkerInfo.getGeneration() 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. Nota che se il worker è attualmente in esecuzione, con questo metodo è possibile restituire una generazione più recente da quella del worker attualmente in esecuzione se si è verificato un aggiornamento durante l'esecuzione del worker. (I665c5, b/219446409) (I128a9, b/219446409)
  • È stato aggiunto InitializationExceptionHandler, un gestore delle eccezioni che può essere utilizzato per determinare se si sono verificati problemi durante il tentativo di inizializzazione di 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 il tempo di coda originale, concatenamento e così via. Consulta WorkManager.updateWork e ExistingPeriodicWorkPolicy.UPDATE per maggiori dettagli.

Modifiche alle API

  • WorkManager.updateWork è stato aggiunto per aggiornare il lavoro mantenendo il tempo di coda e il concatenamento originali.(I9a248, b/219446409)
  • Membri aggiunti: ExistingPeriodicWorkPolicy.UPDATE Questa norma consente di aggiornare un lavoro periodico in base al nome. È simile al REPLACE esistente, ma è meno invadente: non annulla un worker se è attualmente in esecuzione e conserva il tempo di coda: il ritardo iniziale e il periodo vengono calcolati in base al tempo di coda originale e non all'ora di aggiornamento. L'istruzione REPLACE è stata ritirata per ridurre la confusione tra nomi molto simili REPLACE e UPDATE. Se vuoi ancora mantenere la semantica precedente di REPLACE, puoi utilizzare il nuovo CANCEL_AND_REENQUEUE, che è identico a REPLACE. (I985ed, b/219446409)
  • Aggiungi la possibilità di intercettare le eccezioni di pianificazione definendo un SchedulingExceptionHandler. (I033eb)
  • Gli helper 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 su SDK 33 e versioni successive. (Ie542e, b/238790278).

Versione 2.8.0-alpha02

6 aprile 2022

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

Modifiche alle API

  • Ora i vincoli possono essere creati direttamente anziché utilizzare Builder, che è una soluzione comoda per gli utenti di Kotlin. (Idc390, b/137568653)
  • È stata aggiunta la possibilità di controllare se WorkManager è stato inizializzato. È stata inoltre aggiunta una nuova API getConfiguration() per consentire agli sviluppatori delle 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 alle API

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

Correzioni di bug

  • Propaga gli annullamenti nel CoroutineScope in 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

  • Gli annullamenti in CoroutineScope vengono propagati alle ListenableFuture quando si utilizza suspendCancellableCoroutine. (I77e63).
  • Viene generata un'eccezione immediatamente quando le richieste di lavoro in ritardo vengono contrassegnate come accelerate. bef1762

Versione 2.7.0

13 ottobre 2021

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

Modifiche importanti dalla versione 2.6.0

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

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

Versione 2.7.0-rc01

29 settembre 2021

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

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

Versione 2.7.0-beta01

1° settembre 2021

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

Nuove funzionalità

  • Riduci la contesa SQLite multi-processo durante l'inizializzazione di WorkManager.

Modifiche alle API

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

Correzioni di bug

  • Fornisci un messaggio di errore migliore per i worker accelerati che non implementano getForegroundInfoAsync(). (aosp/1809376)

Versione 2.7.0-alpha05

21 luglio 2021

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

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

Versione 2.7.0-alpha04

2 giugno 2021

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

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

Modifiche alle API

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

Correzioni di bug

  • Quando i lavori rapidi vengono ripianificati, non vengono più accelerati. Diventano un lavoro normale.

Versione 2.7.0-alpha03

21 aprile 2021

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

Nuove funzionalità

Modifiche alle 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 scegli come target Android 12. (b/180884673)

Versione 2.7.0-alpha01

18 febbraio 2021

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

Nuove funzionalità

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

    Le applicazioni non possono più avviare un servizio in primo piano quando sono in background. Di conseguenza, per supportare meglio il lavoro a lunga esecuzione precedentemente associato al ciclo di vita di un servizio in primo piano, le applicazioni possono contrassegnare i WorkRequest come accelerati.

    Questa API sostituisce le API setForegroundAsync(...) / setForeground(...), che ora sono ritirate.

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

Modifiche alle API

  • Aggiungi il supporto per WorkRequest accelerati.

Versione 2.6.0

Versione 2.6.0

1° settembre 2021

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

Modifiche importanti dalla versione 2.5.0

  • WorkManager ora utilizza androidx.startup per inizializzare WorkManager. Se in passato hai utilizzato tools:node="remove" ContentProvider per inizializzare WorkManager, devi effettuare le seguenti operazioni:

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

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

Versione 2.6.0-rc01

4 agosto 2021

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

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

Versione 2.6.0-beta02

21 luglio 2021

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

Correzioni di bug

  • Ora RemoteWorkManager si svincola correttamente da RemoteWorkManagerService, in modo che RemoteWorkManagerService possa eseguire correttamente la pulizia. aosp/1730694
  • RemoteListenableWorker ora svincola correttamente da RemoteWorkerService, il che consente a RemoteWorkerService di eseguire correttamente la pulizia. aosp/1743817
  • Ora ForceStopRunnable viene eseguito solo nel processo dell'app principale. Questa è un'ottimizzazione ed evita i conflitti di risorse per le app che utilizzano più processi. aosp/1749180, aosp/1761729

Versione 2.6.0-beta01

2 giugno 2021

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

Questa release contiene alcuni miglioramenti minori alla documentazione. La release è sostanzialmente identica alla versione 2.6.0-alpha02.

Versione 2.6.0-alpha02

21 aprile 2021

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

Nuove funzionalità

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

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

Modifiche alle API

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

Versione 2.6.0-alpha01

24 marzo 2021

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

Nuove funzionalità

  • WorkManager ora 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" ContentProvider per inizializzare il ciclo di vita del processo, devi effettuare le seguenti operazioni:

     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities=\"${applicationId}.androidx-startup"
        android:exported="false"
        tools:node=\"merge">
        <!-- If you are using androidx.startup to initialize other components -->
        <meta-data
            android:name="androidx.work.impl.WorkManagerInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
     </provider>
    

    (oppure)

     <!-- If you want to disable android.startup completely. -->
     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities="${applicationId}.androidx-startup"
        tools:node="remove">
     </provider>
    

Modifiche alle API

  • Aggiungi un'API Result.getOutputData() che restituisca il codice outputData di AscoltaableWorker. (Ie51e3).

Correzioni di bug

  • Aggiungi una soluzione alternativa per un bug OEM che causa la generazione di un SecurityException quando si utilizzano le 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.

Importanti modifiche dalla versione 2.4.0

  • Un nuovo artefatto :work:work-multiprocess per le app che utilizzano più processi. Questo introduce miglioramenti delle prestazioni unificando la pianificazione delle richieste di lavoro a un singolo processo.
    • Per utilizzare work-multiprocess, definisci una dipendenza su: implementation "androidx.work:work-multiprocess:2.5.0"
    • Specifica un processo principale utilizzando Configuration.Builder.setDefaultProcessName(String).
    • Quando utilizzi work-multiprocess, vuoi utilizzare anche RemoteWorkManager per gestire i tuoi WorkRequest. RemoteWorkManager contatta sempre il processo designato. Lo scheduler in-processo viene eseguito anche nel processo designato.
  • A volte ActivityManager non può creare un'istanza dell'istanza JobService per avviare un job. Questo fa sì che il job sottostante venga automaticamente eliminato a causa di un bug della piattaforma. WorkManager ora assicura che siano presenti job di supporto per ogni WorkRequest quando Application viene inizializzato dalla riconciliazione dei job. Ciò migliora notevolmente l'affidabilità dell'esecuzione del job. (b/172475041, aosp/1489577)
  • WorkManager limita la crescita del database riducendo la durata del buffer durante il quale i WorkRequest vengono monitorati dopo il completamento di un WorkRequest. La durata era di 7 giorni prima. È stato ridotto a 1 giorno + durata di keepResultsForAtLeast. (aosp/1419708)
  • TestListenableWorkerBuilder ora supporta la classe riificata che estende ListenableWorker per semplificare i test. (aosp/1443299, b/169787349)
  • La funzionalità di ispezione WorkManager è ora disponibile quando si utilizza Android Studio Arctic Fox.

Versione 2.5.0-rc01

13 gennaio 2021

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

Correzioni di bug

  • Risolto un bug per cui getWorkInfosLiveData non veniva invalidato correttamente dopo l'aggiornamento delle entità durante l'utilizzo dell'API basata su WorkQuery. (aosp/1540566, b/173769028)
  • Risolto un bug per cui le transazioni del database non venivano contrassegnate come riuscite in alcuni rari casi. Questo causa problemi su alcuni dispositivi Motorola. (aosp/1535368, b/175944460)
  • È stato corretto un bug che consentiva di ignorare NoSuchElementException durante il tentativo di svincolo da un processo non più associato. (aosp/1530589)
  • Migliora ConstraintTrackingWorker per interrompere una ListenableWorker solo se non è già stata arrestata. (aosp/1496844, b/172946965)
  • Aggiorna le librerie androidx.work per avere come target Java 8 (Ibd2f2)

Versione 2.5.0-beta02

2 dicembre 2020

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

Correzioni di bug

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

Versione 2.5.0-beta01

28 ottobre 2020

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

Nuove funzionalità

  • WorkManager limita automaticamente il numero di WorkRequest che possono essere recuperati dallo scheduler in-process. Le richieste vengono ancora eseguite in ordine FIFO. (aosp/1455228)
  • WorkManager tenta di eseguire il ripristino quando il datastore dell'applicazione è in uno stato non valido. (aosp/1463103).

Correzioni di bug

  • Quando ListenableWorker vengono interrotti, contrassegnali immediatamente come ENQUEUED per poterli riprogrammare in un secondo momento. (aosp/1455618, b/170273988)

Versione 2.5.0-alpha03

14 ottobre 2020

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

Modifiche alle API

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

Correzioni di bug

  • Usa ApplicationInfo per determinare il nome del processo dell'app predefinita. (b/168716641, aosp/1429950)
  • Correggi le regole di visibilità per RemoteWorkManager 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 lavori a lunga esecuzione associati a un servizio in primo piano. (b/168502234, aosp/1431331)

Versione 2.5.0-alpha02

16 settembre 2020

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

Nuove funzionalità

  • Aggiungi un'API a WorkQuery per poter usare i id per eseguire query sui WorkInfo. (aosp/1412372, b/157335295)
  • WorkManager supporta meglio le app che utilizzano più processi con un nuovo elemento (androidx.work:work-multiprocess:*). Questo nuovo elemento aiuta a risolvere alcuni problemi riscontrati dalle app di grandi dimensioni, tra cui:
    • In genere, WorkManager deve essere inizializzato in ogni processo dell'app. Questo non è un vantaggio, perché c'è un aumento della contesa SQLite che a sua volta causa altri problemi. WorkManager ora dispone di nuove API che possono essere utilizzate per designare un processo dell'app principale utilizzando Configuration#setDefaultProcessName(processName). processName è un nome di processo completo che ha il seguente aspetto: packageName:processName (ad es. com.example:remote).
    • Un insieme di nuove API: RemoteWorkManager e RemoteWorkContinuation per enqueue, cancel e query richieste di lavoro. Queste API non includono LiveData varianti per evitare contese SQLite su più processi. Tutte le chiamate a enqueue, cancel e query vengono inoltrate al processo dell'app primary tramite AIDL e permettono di recuperare lingua ListenableFuture fluente. (aosp/1392657, aosp/1411210, aosp/1412215, aosp/1417713)

Modifiche alle API

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

Correzioni di bug

  • WorkManager ora riconcilia i lavori 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 consentiranno di fornire strumenti migliori con WorkManager in futuro. Continua a seguirci per altri aggiornamenti.

Correzioni di bug

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

Contributi esterni

Versione 2.4.0

Versione 2.4.0

22 luglio 2020

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

Importanti modifiche dalla versione 2.3.0

  • Lo scheduler in-process di WorkManagers ora è più efficace. In precedenza, l'oggetto Scheduler in-processo considerava solo l'esecuzione di lavori che non sono stati ritardati e i cui vincoli erano soddisfatti. Ora lo scheduler in-processo monitora i WorkRequest che potrebbero essere eseguiti in futuro, incluse le richieste PeriodicWorkRequest. Inoltre, l'elemento Scheduler in elaborazione non rispetta i limiti di pianificazione (ma è comunque limitato alle dimensioni dell'elemento Executor utilizzato da WorkManager). Ciò significa che l'applicazione ora può eseguire molte più richieste di lavoro quando è in primo piano. Per gestire l'esecuzione delle operazioni ritardate in primo piano, WorkManager introduce anche un nuovo elemento RunnableScheduler configurabile. (aosp/1185778)
  • WorkManager ora supporta RxJava 3. Per utilizzare RxJava 3, devi includere la dipendenza seguente: implementation "androidx.work:work-rxjava3:2.4.0". (aosp/1277904)
  • È stata aggiunta la possibilità di eseguire query per WorkInfo utilizzando un WorkQuery. Questo è utile quando gli sviluppatori vogliono eseguire query su WorkInfo in base a una combinazione di più attributi. Per ulteriori informazioni, vedi WorkQuery.Builder.fromStates(...), WorkQuery.Builder. fromTags(...) o WorkQuery.Builder.fromUniqueWorkNames(...). (aosp/1253230, b/143847546)
  • Aggiungi la possibilità di richiedere informazioni diagnostiche a WorkManager utilizzando:

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

    Questo fornisce molte informazioni utili, tra cui:

    • Richieste di lavoro completate nelle ultime 24 ore.
    • Richieste di lavoro attualmente IN ESECUZIONE.
    • Richieste di lavoro pianificate. (aosp/1235501)
  • Aggiungi ExistingWorkPolicy.APPEND_OR_REPLACE, che è simile a APPEND, ma sostituisce una catena che ha prerequisiti annullati o non superati. (b/134613984, aosp/1199640)

  • Puoi aggiungere un elemento RunnableScheduler personalizzato per monitorare le richieste di lavoro da eseguire in futuro. Viene utilizzato dallo scheduler in-process. (aosp/1203944).

  • Aggiungi il supporto per l'aggiunta dinamica di fabbriche a cui delegare, quando utilizzi un DelegatingWorkerFactory. (b/156289105, aosp/1309745)

  • Allinea il monitoraggio dei vincoli BATTERY_NOT_LOW in modo più preciso alla piattaforma. (aosp/1312583)

  • Lo scheduler in-process ora utilizza API migliori per determinare il nome del processo. Questa funzionalità è utile per supportare meglio le app che utilizzano processi multipli. (aosp/1324732)

  • Nuove regole lint che applicano:

    • Uso del foregroundServiceType corretto quando si utilizzano le API setForegroundAsync(). (b/147873061, aosp/1215915)
    • Specificare gli ID JobScheduler che WorkManager deve utilizzare quando si utilizzano direttamente le API JobService. aosp/1223567
    • È stata aggiunta una nuova regola lint che garantisce che le ListenableWorkerimplementazioni siano ora public quando si utilizza il valore predefinito WorkerFactory. (aosp/1291262)
  • Le chiamate al numero setForegroundAsync() che non vengono completate prima del completamento di una ListenableWorker verranno ora segnalate tramite IllegalStateException sul ListenableFuture restituito. (aosp/1262743)

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

  • Correggi un bug per 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

  • Lo scheduler in-process ora utilizza API migliori per determinare il nome del processo. Questa funzionalità è utile per supportare meglio le app che utilizzano processi multipli. (aosp/1324732)

Versione 2.4.0-beta01

20 maggio 2020

Vengono rilasciate le versioni androidx.work:work-gcm:2.4.0-beta01, androidx.work:work-runtime:2.4.0-beta01, androidx.work:work-runtime-ktx:2.4.0-beta01, androidx.work:work-rxjava2:2.4.0-beta01 e androidx.work:work-testing:2.4.0-beta01. La versione 2.4.0-beta01 contiene questi commit.

Correzioni di bug

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

Versione 2.4.0-alpha03

29 aprile 2020

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

Nuove funzionalità

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

Modifiche alle API

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

Correzioni di bug

  • Ignora SecurityException durante il monitoraggio dello stato della rete di un dispositivo. (b/153246136, aosp/1280813)

Versione 2.4.0-alpha02

1° aprile 2020

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

Nuove funzionalità

  • È stata aggiunta una nuova regola lint che avvisa quando WorkRequest richiede sia Constraints.setRequiresCharging(...) sia Constraints.setRequiresDeviceIdle(...). Alcuni dispositivi non si ricaricano mai e sono inattivi contemporaneamente. Di conseguenza, queste richieste vengono eseguite con minore frequenza del previsto. (aosp/1253840)

Modifiche alle API

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

  • Le chiamate al numero setForegroundAsync() che non vengono completate prima del completamento di una ListenableWorker verranno ora segnalate tramite IllegalStateException sul ListenableFuture restituito. (aosp/1262743)

Correzioni di bug

  • È stata corretta la regola lint che verifica la presenza di durate dell'intervallo non valide per PeriodicWorkRequest s. (aosp/1254846, b/152606442)

Versione 2.4.0-alpha01

4 marzo 2020

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

Nuove funzionalità

  • Lo scheduler in-process di WorkManagers ora è più efficace. In precedenza, lo scheduler in-process considerava solo l'esecuzione di lavori non ritardati e i cui vincoli erano soddisfatti. Ora, lo scheduler in-processo monitora i WorkRequest che potrebbero essere eseguiti in futuro, inclusi i PeriodicWorkRequest. Inoltre, lo scheduler in-process non rispetta i limiti di pianificazione (ma è comunque limitato alle dimensioni dell'elemento Executor utilizzato da WorkManager). Ciò significa che l'applicazione ora può eseguire molti più WorkRequest quando è in primo piano. (aosp/1185778)

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

    • Richieste di lavoro completate nelle ultime 24 ore.
    • Richieste di lavoro attualmente IN ESECUZIONE.
    • Richieste di lavoro pianificate. (aosp/1235501)
  • Nuove regole lint che applicano:

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

Modifiche alle API

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

  • Puoi aggiungere un RunnableScheduler personalizzato per monitorare le WorkRequest da eseguire in futuro. Viene utilizzato dallo scheduler in-process. (aosp/1203944).

Correzioni di bug

  • Deprecato setProgress() in RxWorker perché in precedenza ha restituito un tipo Single<Void>, che non è possibile. È stata aggiunta una nuova API setCompletableProgress() che restituisce invece Completable e sono state aggiunte nuove regole Lint che consentono di eseguire la migrazione alle nuove API. (b/150080946, aosp/1242665)

Versione 2.3.4

Versione 2.3.4

18 marzo 2020

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

Correzioni di bug

  • Risolto un bug che causava l'esecuzione di più istanze di Worker a lunga esecuzione dopo il superamento della finestra di esecuzione di 10 minuti. (aosp/1247484, b/150553353)
  • Correzione del lint IssueRegistry di WorkManager. Grazie a @ZacSweers di Slack per il contributo. (aosp/1217923)

Versione 2.3.3

Versione 2.3.3

4 marzo 2020

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

Correzioni di bug

  • Risolto il bug per cui, se un evento Worker veniva interrotto, non veniva riprogrammato correttamente. (b/150325687, aosp/1246571)

Versione 2.3.2

Versione 2.3.2

19 febbraio 2020

androidx.work:work-*:2.3.2 vengono rilasciati. La versione 2.3.2 contiene questi commit.

Correzioni di bug

  • Risolvi un problema per cui WorkManager supera il limite di 100 job in JobScheduler in rari casi. (aosp/1226859, b/149092520)
  • Correzione di una condizione di gara in ConstraintControllers. (aosp/1220100).
  • Miglioramento del ciclo di vita del servizio in primo piano per la gestione per i worker a lunga esecuzione. (aosp/1226295)
  • È stata migliorata la gestione della cancellazione delle notifiche per i worker a lunga esecuzione al momento dell'annullamento. (aosp/1228346).

Versione 2.3.1

Versione 2.3.1

5 febbraio 2020

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

Correzioni di bug

  • Gestisci meglio il ciclo di vita dei Notification per le Worker a lunga esecuzione che vengono eseguite quando è attivo un Service in primo piano. (aosp/1218539, b/147249312)
  • WorkManager ora dipende dalla versione stabile di androidx.sqlite:sqlite-framework:2.1.0. (aosp/1217729)
  • Sono state aggiunte regole lint per garantire che un foregroundServiceType sia specificato in AndroidManifest.xml quando si utilizzano i 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 lavori a lunga esecuzione o importanti tramite ListenableWorker#setForegroundAsync().
  • Supporto dell'avanzamento dei worker tramite ListenableWorker#setProgressAsync().
  • WorkManager ora include ulteriori regole di lint all'interno della libreria, consentendo di rilevare tempestivamente i bug.

Versione 2.3.0-rc01

8 gennaio 2020

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

Questa release è identica a 2.3.0-beta02

Correzioni di bug

  • L'artefatto work-testing ora definisce una dipendenza api su 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 enqueue() viene utilizzato per PeriodicWorkRequest anziché enqueueUniquePeriodicWork(). (aosp/1166032).

Modifiche alle API

  • ForegroundInfo ora richiede di specificare il notificationId da utilizzare quando si usa ListenableWorker.setForegroundAsync(). Si tratta di una modifica che provoca un errore. Ciò ti consente di eseguire più Worker a lunga esecuzione in parallelo. WorkManager gestisce anche meglio la durata dei Notification forniti. (b/145473554, aosp/1181208, asop/1181216, asop/1183577)

Correzioni di bug

  • Risolto un bug nell'implementazione di AlarmManager che causava la mancata pulizia degli allarmi. (aosp/1156444)
  • Risolto un bug per cui un elenco vuoto di WorkRequest causava la creazione di una catena WorkContinuation errata. (b/142835274, aosp/1157051)

Modifiche delle dipendenze

  • WorkManager ora utilizza la stanza 2.2.2.

Versione 2.3.0-beta01

20 novembre 2019

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

Nuove funzionalità

  • È stata aggiunta una nuova regola lint che impedisce gli errori degli sviluppatori dovuti a un'implementazione errata di androidx.work.Configuration.Provider quando viene utilizzata l'inizializzazione on demand. aosp/1164559

Versione 2.3.0-alpha03

23 ottobre 2019

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

Nuove funzionalità

  • È stata aggiunta l'API WorkManager.createCancelPendingIntent() che semplifica l'annullamento di WorkRequest senza dover registrare un altro componente in AndroidManifest.xml. Questa API semplifica l'annullamento di WorkRequest da Notification. Ci aspettiamo che venga abbinato alle nuove API in primo piano nella versione 2.3.0.
  • WorkManager ora dipende dalla versione stabile di androidx.room:*:2.2.0.

Modifiche alle API

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

Correzioni di bug

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

Versione 2.3.0-alpha02

9 ottobre 2019

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

Nuove funzionalità

  • WorkManager ora supporta l'esecuzione di operazioni a lunga esecuzione o operazioni importanti che devono essere mantenute attive dal sistema operativo. Per ulteriori informazioni, visita il sito ListenableWorker#setForegroundAsync() (o CoroutineWorker#setForeground() per Kotlin). (aosp/1133636).

Modifiche alle API

  • L'API containsKey in Data è stata rinominata in hasKeyWithValueOfType. Anche il metodo di estensione corrispondente nella libreria ktx è stato rinominato. (b/141916545)

Correzioni di bug

  • Le pianificazioni di WorkManager funzionano in modo corretto quando il numero di limiti di pianificazione di WorkRequest approcci è in coda. (aosp/1105766).
  • WorkManager chiama ListenableWorker#onStopped() solo se il lavoro non è già stato completato. (b/140055777)
  • Ora WorkManager rimuove le informazioni sull'avanzamento quando un worker viene interrotto o raggiunge lo stato di terminale. (aosp/1114572)
  • Data ora ha una rappresentazione toString()molto più utile. (b/140945323)
  • Data ora ha un metodo equals() migliore. Supporta anche deepEquals per i tipi di Array. (b/140922528)
  • WorkManager ora archivia il suo database interno e i file delle preferenze in una directory senza backup. (b/114808216)

Versione 2.3.0-alpha01

22 agosto 2019

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

Nuove funzionalità

  • Gli ListenableWorker possono ora impostare l'avanzamento tramite l'API setProgressAsync(). Sono state aggiunte anche un'API suspend-ing setProgress corrispondente in CoroutineWorker e un'API setProgress in RxWorker che restituisce Single<Void>. Con queste nuove API, i worker possono comunicare informazioni sull'avanzamento tramite WorkInfo, che ha un'API getProgress corrispondente. (b/79481554)
  • Data ha un'API containsKey() che può essere usata per convalidare che i dati di input in Worker contengano chiavi con il tipo previsto. (b/117136838)
  • Ora è possibile serializzare Data utilizzando Data.toByteArray() e Data.fromByteArray(). Tieni presente che non esistono garanzie di controllo delle versioni con Data, quindi non devi mantenerlo o utilizzarlo per IPC tra applicazioni. Possono essere utilizzati solo tra più processi della stessa applicazione.
  • È stata aggiunta la possibilità di specificare un InputMergerFactory tramite Configuration.setInputMergerFactory. (b/133273159)

Modifiche alle API

  • WorkManager genererà un'istanza di IllegalStateException se un WorkerFactory restituisce un'istanza di ListenableWorker che è stata richiamata in precedenza. (b/139554406)
  • La documentazione viene aggiornata sull'annullamento di ListenableFuture e sul callback onStopped() in ListenableWorker. (b/138413671)

Correzioni di bug

  • Lo scheduler in-process ora ignora i WorkRequest con il vincolo idle. Queste richieste vengono ora prese in considerazione da JobScheduler solo quando il dispositivo è effettivamente idle. (aosp/1089779)
  • TestScheduler ora utilizza correttamente il valore Executor specificato per l'esecutore delle attività interno nei test. (aosp/1090749)

Versione 2.2.0

Versione 2.2.0

15 agosto 2019

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

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

Modifiche importanti dalla versione 2.2.0 alla versione 2.1.0

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

Versione 2.2.0-rc01

30 luglio 2019

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

Correzioni di bug

  • Risolto un bug nell'implementazione di AlarmManager che causava l'arresto prematura del servizio e, in rari casi, causava un RejectedExecutionException. (aosp/1092374) (b/138238197).
  • È stata aggiunta una soluzione alternativa per un NullPointerException quando si utilizzano le 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 Jacoco involontaria introdotta in 2.2.0-beta01.

Versione 2.2.0-beta01

17 luglio 2019

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

Nuove funzionalità

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

Correzioni di bug

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

Versione 2.1.0

Versione 2.1.0

11 luglio 2019

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

Modifiche importanti dalla versione 2.0.1

  • work-runtime-ktx ora richiede Java 8. Se riscontri problemi, puoi aggiungere quanto segue a build.gradle: kotlinOptions { jvmTarget = "1.8" }
  • Aggiunta l'inizializzazione on demand per WorkManager, che creerà WorkManager solo se vi viene fatto riferimento. b/127497100 Per configurare il progetto per l'inizializzazione on demand:
    1. Disattiva l'inizializzazione automatica.
    2. Implementa Configuration.Provider sull'oggetto Application personalizzato.
    3. Modifica tutti i riferimenti di WorkManager.getInstance() in WorkManager.getInstance(Context). Nell'ambito di questa modifica, abbiamo ritirato WorkManager.getInstance(). È sempre più sicuro chiamare la nuova sostituzione di WorkManager.getInstance(Context), anche se non esegui l'inizializzazione on demand.
  • Gli PeriodicWorkRequest ora supportano i ritardi iniziali. Puoi utilizzare il metodo setInitialDelay su PeriodicWorkRequest.Builder per impostare un ritardo iniziale. b/111404867
  • È stata aggiunta la possibilità di delegare uno o più WorkerFactory registrati utilizzando DelegatingWorkerFactory. B/131435993
  • È stata aggiunta la possibilità di personalizzare l'oggetto Executor utilizzato da WorkManager per tutti i documenti contabili interni tramite Configuration.Builder.setTaskExecutor.
  • È stata aggiunta la possibilità di creare classi Worker e ListenableWorker testabili delle unità utilizzando TestWorkerBuilder e TestListenableWorkerBuilder nell'elemento work-testing.
    • Tieni presente che work-testing ora recupera Kotlin come dipendenza e include diverse estensioni Kotlin per impostazione predefinita.
  • Conteggio dei tentativi di esecuzione aggiunto a WorkInfo. B/127290461
  • I tipi Data ora possono archiviare e recuperare array di byte e byte. Questa operazione NON modifica la dimensione massima degli oggetti Data.
  • WorkManager ora dipende da Room 2.1.0, che dovrebbe risolvere alcuni problemi relativi al database.

Versione 2.1.0-rc01

27 giugno 2019

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

Correzioni di bug

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

Versione 2.1.0-beta02

20 giugno 2019

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

Correzioni di bug

  • TestListenableWorkerBuilder ora utilizza il valore WorkerFactory corretto durante la creazione delle istanze di ListenableWorker. B/135275844
  • Risolto un bug che causava deviazioni nelle finestre di esecuzione per WorkRequest a causa della morte del processo. b/135272196

Versione 2.1.0-beta01

13 giugno 2019

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

Correzioni di bug

  • WorkManager ora dipende da Room 2.1.0, che dovrebbe risolvere alcuni problemi relativi al database.
  • Sono stati rimossi alcuni I/O del disco di avvio nel thread principale.
  • Risolto un potenziale deadlock nel monitoraggio dei vincoli. b/134361006
  • Sono stati annullati preventivamente i job non validi attribuiti a WorkManager. b/134058261
  • Sono state aggiunte alcune chiamate difensive alle API JobScheduler per il comportamento anomalo dei dispositivi.

Versione 2.1.0-alpha03

5 giugno 2019

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

Correzioni di bug

  • Documentazione migliorata per PeriodicWorkRequest.
  • WorkManagerTestInitHelper ora utilizza l'esecutore in background corretto per i test.
  • Correzioni dei problemi di SQLite nella gestione di transazioni di grandi dimensioni su alcuni dispositivi. (b/130182503)
  • Le dipendenze di WorkManager sono ora più granulari. (b/133169148).
  • Soluzione alternativa ai bug specifici dell'OEM nell'implementazione di JobScheduler durante la pianificazione dei job con WorkManager.
  • Miglioramenti dello scheduler basato su AlarmManager relativi alle durate dei servizi che in precedenza hanno causato arresti anomali rari. (b/133313734)

Versione 2.1.0-alpha02

16 maggio 2019

Rilascio WorkManager 2.1.0-alpha02. Questa versione contiene diverse nuove API.

Modifiche alle API

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

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

  • È stata aggiunta la possibilità di personalizzare l'oggetto Executor utilizzato da WorkManager per tutti i documenti contabili interni tramite Configuration.Builder.setTaskExecutor.

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

Versione 2.1.0-alpha01

24 aprile 2019

Rilascio WorkManager 2.1.0-alpha01. Questa versione contiene diverse nuove API. Tieni presente che, a partire da questa versione, non verrà eseguito il backporting di nuove funzionalità nella release 1.x. Ti consigliamo di passare al formato 2.x.

Modifiche alle API

  • Aggiunta l'inizializzazione on demand per WorkManager, che creerà WorkManager solo se vi viene fatto riferimento. b/127497100 Per configurare il progetto per l'inizializzazione on demand:
    1. Disattiva l'inizializzazione automatica.
    2. Implementa Configuration.Provider sull'oggetto Application personalizzato.
    3. Modifica tutti i riferimenti di WorkManager.getInstance() in WorkManager.getInstance(Context). Nell'ambito di questa modifica, abbiamo ritirato WorkManager.getInstance(). È sempre più sicuro chiamare la nuova sostituzione di WorkManager.getInstance(Context), anche se non esegui l'inizializzazione on demand.
  • È stata aggiunta la possibilità di creare classi Worker e ListenableWorker testabili delle unità utilizzando TestWorkerBuilder e TestListenableWorkerBuilder nell'elemento work-testing.
    • Tieni presente che work-testing ora recupera Kotlin come dipendenza, ma include anche diverse estensioni Kotlin per impostazione predefinita.
  • Conteggio dei tentativi di esecuzione aggiunto a WorkInfo. B/127290461
  • I tipi Data ora possono archiviare e recuperare array di byte e byte. Questa operazione NON modifica la dimensione massima degli oggetti Data.
  • Deprecato CoroutineWorker.coroutineContext. Questo campo è stato digitato erroneamente come CoroutineDispatcher; non ti serve più perché puoi accedere direttamente al coroutineContext desiderato nel corpo della funzione di sospensione.
  • RxWorker.createWork() e RxWorker.getBackgroundScheduler() sono ora annotati con i tipi restituiti @NonNull.

Versione 2.0.1

Versione 2.0.1

9 aprile 2019

WorkManager 2.0.1 è rilasciato. Questa release è identica a 2.0.1-rc01.

Versione 2.0.1-rc01

3 aprile 2019

Rilascio WorkManager 2.0.1-rc01. Questa versione contiene alcune correzioni di bug. Per gli utenti della versione legacy 1.x, alcune di queste modifiche vengono visualizzate anche in 1.0.1-rc01.

Correzioni di bug

  • I test Robolectric ora funzionano correttamente con WorkManager. b/122553577
  • Risolto il problema di arresto anomalo di un caso perimetrale con il monitoraggio dei vincoli che non viene pulito nelle API pre-JobScheduler. b/129226383
  • È stato corretto un StackOverflowError che riguardava lunghe catene di lavoro. b/129091233
  • È stata aggiornata la documentazione per i PeriodicWorkRequest per indicare che il tempo flessibile non è supportato sull'API 23.
  • Sono stati corretti alcuni link inaccessibili nella documentazione di Kotlin.

Versione 2.0.0

Versione 2.0.0

20 marzo 2019

WorkManager 2.0.0 viene rilasciato. Questa versione è identica alla versione 2.0.0-rc01 ed è la versione AndroidX 1.0.0 stabile con le dipendenze AndroidX. Consigliamo di scegliere come target questa versione anziché le versioni precedenti 1.x. Tutti gli sviluppatori attivi avranno come target le versioni 2.x e 1.x, riceveranno correzioni di bug critiche solo per un periodo di tempo limitato.

Versione 2.0.0-rc01

7 marzo 2019

Viene rilasciato WorkManager 2.0.0-rc01. Questa versione è identica alla versione stabile 1.0.0, ma ha dipendenze AndroidX. Quando raggiunge la versione stabile 2.0.0, devi includere questa versione e le versioni 1.x legacy riceveranno solo alcune correzioni di bug critiche. Tutto lo sviluppo attivo avrà come target 2.x.

Dipendenze pre-AndroidX

Per informazioni sull'utilizzo delle estensioni Kotlin, consulta la documentazione di KTX.
Documentazione di riferimento: Java

trendy

dependencies {
    def work_version = "1.0.1"

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

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

    // optional - RxJava2 support
    implementation "android.arch.work:work-rxjava2:$work_version"
    // optional - Test helpers
    androidTestImplementation "android.arch.work:work-testing:$work_version"
}

Kotlin

dependencies {
    val work_version = "1.0.1"

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

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

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

    // optional - Test helpers
    androidTestImplementation("android.arch.work:work-testing:$work_version")
}

Versione 1.0.1

Versione 1.0.1

9 aprile 2019

WorkManager 1.0.1 viene rilasciato. Questa release è identica a 1.0.1-rc01.

Tieni presente che consigliamo vivamente agli utenti di eseguire l'aggiornamento a WorkManager 2.x, poiché in futuro verranno apportati pochissimi aggiornamenti al ramo 1.x. Inoltre, non saranno rilasciate nuove API per la libreria 1.x.

Versione 1.0.1-rc01

2 aprile 2019

Viene rilasciato WorkManager 1.0.1-rc01. Questa versione contiene alcune correzioni di bug.

Correzioni di bug

  • I test Robolectric ora funzionano correttamente con WorkManager. b/122553577
  • Risolto il problema di arresto anomalo di un caso perimetrale con il monitoraggio dei vincoli che non viene pulito nelle API pre-JobScheduler. b/129226383
  • È stato corretto un StackOverflowError che riguardava lunghe catene di lavoro. b/129091233

Versione 1.0.0

Versione 1.0.0

5 marzo 2019

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

Versione 1.0.0-rc02

21 febbraio 2019

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

Correzioni di bug

  • Ora gli elementi Worker sono pianificati correttamente dopo un arresto anomalo dell'applicazione. b/124546316

  • Gli elementi Worker che generano una Exception deselezionata sono ora contrassegnati correttamente come FAILED e non hanno più l'arresto anomalo del processo dell'app.

Versione 1.0.0-rc01

14 febbraio 2019

Questa è una release candidata per la release stabile 1.0.0 di WorkManager. Questa release contiene una correzione di bug.

Correzioni di bug

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

Versione 1.0.0-beta05

6 febbraio 2019

Questa release contiene alcune correzioni di bug.

Correzioni di bug

  • Risolto il caso in cui JobScheduler.getPendingJob(...) veniva utilizzato nell'API 23. b/123893059
  • Risolto il NullPointerException sui dispositivi con Android 5.1 (livello API 22) o precedente. b/123835104

Versione 1.0.0-beta04

4 febbraio 2019

Questa release contiene alcune correzioni di bug.

Correzioni di bug

  • Migliore pianificazione di PeriodicWork per l'implementazione basata su AlarmManager.
  • Risolto il caso in cui WorkManager non riusciva a monitorare correttamente i vincoli quando si utilizzava l'implementazione basata su AlarmManager. b/123379508
  • Risolto il caso in cui WorkManager non riusciva a riprovare in caso di decesso del processo quando si utilizzava l'implementazione basata su AlarmManager. b/123329850
  • Risolto un caso che causava la perdita di wakelock in WorkManager durante l'utilizzo dell'implementazione basata su AlarmManager.

Versione 1.0.0-beta03

25 gennaio 2019

Questa release contiene alcune correzioni di bug.

Correzioni di bug

  • Abbiamo introdotto una regressione 1.0.0-beta02 che causava la mancata esecuzione del lavoro in alcune situazioni. b/123211993
  • Risolto il problema per cui il lavoro non rispettava correttamente la tempistica di backoff. b/122881597
  • È stato risolto il problema ConcurrentModificationException sui dispositivi con Android 5.1 (API o versioni precedenti). Questa è una continuazione della correzione in 1.0.0-beta02. B/121345393
  • È stato aggiunto exported=false per alcuni componenti del file manifest privi di questa annotazione.
  • Sono incluse informazioni su come WorkManager interagisce con il sistema operativo nella documentazione a livello di pacchetto.

Versione 1.0.0-beta02

15 gennaio 2019

Questa release contiene alcune correzioni di bug.

Correzioni di bug

  • Risolto il caso limite per cui il lavoro periodico poteva essere eseguito più di una volta per intervallo su dispositivi con Android 6.0 (livello API 23). b/121998363
  • Risolto il problema ConcurrentModificationException sui dispositivi con Android 5.1 (livello API 22) o versioni precedenti. b/121345393
  • Correzione dell'esecuzione errata del lavoro quando i vincoli non vengono soddisfatti sui dispositivi con Android 5.1 (livello API 22) o versioni precedenti. b/122578012
  • Gestione del completamento del lavoro ottimizzata in alcuni casi limite. b/122358129
  • È stata aggiunta una modifica per risolvere le potenziali racecondition tra più istanze di LiveData utilizzate da WorkManager.
  • Spostata per utilizzare la dipendenza Room 1.1.1 anziché 1.1.1-rc01; queste versioni sono identiche. b/122578011

Versione 1.0.0-beta01

19 dicembre 2018

Questa release non contiene modifiche all'API. In futuro, WorkManager rimarrà stabile nell'API fino alla versione successiva, a meno che non ci siano problemi critici. Questa release contiene alcune correzioni di bug.

Correzioni di bug

  • I figli che in precedenza avevano annullato il lavoro principale non potranno più essere eseguiti. b/120811767
  • Classi di logging inizializzate correttamente (principalmente visualizzate durante i test).

Versione 1.0.0-alpha13

12 dicembre 2018

Questa release contiene una piccola modifica all'API che sarà utile per alcuni utenti Kotlin.

Modifiche alle API

  • androidx.work.Result è stato spostato in una classe interna di ListenableWorker. In questo modo, si evitano conflitti di refactoring con la classe Result di primo livello di Kotlin. Questa è una modifica che provoca un errore di API. b/120564418

Interruzione delle modifiche all'API

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

Versione 1.0.0-alpha12

5 dicembre 2018

Questa release contiene alcune modifiche che interessano l'API; consulta la sezione Interruzione delle modifiche all'API di seguito. È probabile che questa versione venga rilasciata come prima versione beta. alpha12 contiene anche numerosi aggiornamenti alla documentazione.

Modifiche alle API

  • Un nuovo artefatto, work-rxjava2, introduce RxWorker. Questo è un ListenableWorker che prevede Single<Payload>.
  • Il supporto per Firebase JobDispatcher è stato rimosso a causa del suo imminente ritiro. Ciò significa che l'elemento work-firebase non verrà più aggiornato mentre ci avviciniamo alla versione beta. Cercheremo di aggiungere un'alternativa in futuro.
  • Combinazione di Payload in Result. Result è ora una "classe sicura" con tre implementazioni concrete, che puoi ottenere tramite Result.success() (o Result.success(Data)), Result.failure() (o Result.failure(Data)) e Result.retry(). I tuoi ListenableFuture ora restituiscono Result anziché Payload. Gli elementi 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 varianti per supportare meglio gli URI di contenuti con attivazione lenta. b/119919774
  • WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration) variante aggiunta. Questo metodo richiede l'API 26.
  • Aggiunti metodi di estensione Kotlin Operation.await() e ListenableFuture.await().
  • Rinominato Operation.getException() in Operation.getThrowable(). Si tratta di una modifica che provoca un errore.
  • La classe ContentUriTriggers e i metodi che la fanno riferimento non sono più disponibili per l'uso pubblico. Si tratta di una modifica che provoca un errore.
  • Sono stati rimossi gli altri metodi varargs in WorkManager, WorkContinuation e OneTimeWorkRequest per semplificare l'API. Per risolvere eventuali problemi di compilazione, puoi eseguire il wrapping dei vararg esistenti con Arrays.asList(...). ma includiamo anche versioni con un solo argomento di ciascun metodo. Si tratta di una modifica che provoca un errore.
  • Sono state rimosse WorkContinuation.combine(OneTimeWorkRequest, *) varianti. Stava presentando un'API confusa; i 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 per il ripristino dopo la morte di un'attività in esecuzione.
  • LiveData osservato tramite observeForever viene monitorato tramite WorkManager. Questo è un backport di una correzione della libreria di stanze. B/74477406
  • Data.Builder.build() ora genera un'eccezione se l'oggetto serializzato supera le sue dimensioni massime. In precedenza, questo accadeva solo su un thread in background in cui non era possibile gestirlo correttamente.
  • Ulteriore distinzione tra lavori interrotti e annullati; getWorkInfoById() restituirà un WorkInfo con l'State CANCELLED nel mese di ListenableWorker.onStopped().
  • Tratta null Result come errori in ListenableWorker. B/120362353
  • Correzione speculativa per i tablet Shield con l'API 24 che a volte generava un IllegalArgumentException. B/119484416

Interruzione delle modifiche all'API

  • Il supporto per Firebase JobDispatcher è stato rimosso a causa del suo imminente ritiro. Ciò significa che l'elemento work-firebase non verrà più aggiornato mentre ci avviciniamo alla versione beta. Cercheremo di aggiungere un'alternativa in futuro.
  • Combinazione di Payload in Result. Result è ora una "classe sicura" con tre implementazioni concrete, che puoi ottenere tramite Result.success() (o Result.success(Data)), Result.failure() (o Result.failure(Data)) e Result.retry(). I tuoi ListenableFuture ora restituiscono Result anziché Payload. Gli elementi Worker non hanno metodi getter e setter per l'output Data.
  • Aggiunti metodi di estensione Kotlin Operation.await() e ListenableFuture.await().
  • Rinominato Operation.getException() in Operation.getThrowable().
  • La classe ContentUriTriggers e i metodi che la fanno riferimento non sono più disponibili per l'uso pubblico.
  • Sono stati rimossi gli altri metodi varargs in WorkManager, WorkContinuation e OneTimeWorkRequest per semplificare l'API. Per risolvere eventuali problemi di compilazione, puoi eseguire il wrapping dei vararg esistenti con Arrays.asList(...). ma includiamo anche versioni con un solo argomento di ciascun metodo.
  • Sono state rimosse WorkContinuation.combine(OneTimeWorkRequest, *) varianti. Stava presentando un'API confusa; i metodi combine esistenti sono più comprensibili.

Versione 1.0.0-alpha11

8 novembre 2018

Questa release contiene molte modifiche che diventeranno API stabile all'indirizzo beta. In questa release sono state apportate modifiche che interessano l'API; consulta la sezione Interruzione delle modifiche all'API di seguito.

Modifiche alle API

  • work-runtime-ktx introduce un nuovo CoroutineWorker.
  • WorkStatus è stato rinominato in WorkInfo. Tutte le varianti di metodo getStatus corrispondenti sono state rinominate con le varianti getWorkInfo corrispondenti. Si tratta di una modifica che provoca un errore.
  • ListenableWorker.onStopped() non accetta più ha un argomento booleano che rappresenta 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 pacchetto 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() hanno restituito in precedenza array. Ora questi metodi restituiscono raccolte. Si tratta di una modifica che provoca un errore.
  • ListenableWorker.onStartWork() è stato rinominato in 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() sono stati rinominati rispettivamente 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 accodare OneTimeWorkRequest univoche senza dover creare un WorkContinuation.
  • Tutte le varianti dei metodi enqueue e cancel su WorkManager ora restituiscono un nuovo tipo Operation. Si tratta di una modifica che provoca un errore.
  • Tutte le varianti di enqueue non accettano più vararg per WorkRequest. Si tratta di una modifica che provoca un errore. Utilizza le raccolte. Puoi utilizzare Arrays.asList() per modificare il codice esistente. Lo abbiamo fatto per ridurre la superficie API e il numero di metodi.
  • Se si tenta di initialize WorkManager più di una volta per procedura, verrà restituito un IllegalStateException. Si tratta di una modifica che provoca un errore.

Correzioni di bug

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

Interruzione delle modifiche all'API

  • WorkStatus è stato rinominato in WorkInfo. Tutte le varianti di metodo getStatus corrispondenti sono state rinominate con le varianti getWorkInfo corrispondenti.
  • ListenableWorker.onStopped() non accetta più ha un argomento booleano che rappresenta se WorkRequest è stato annullato. WorkManager non fa più questa distinzione.
  • Il pacchetto androidx.work.test è stato rinominato in pacchetto androidx.work.testing.
  • I setter su Constraints non fanno più parte dell'API pubblica.
  • WorkerParameters.getTriggeredContentUris() e WorkerParameters.getTriggeredContentAuthorities() hanno restituito in precedenza array. Ora questi metodi restituiscono raccolte.
  • ListenableWorker.onStartWork() è stato rinominato in ListenableWorker.startWork().
  • Il costruttore di WorkStatus non fa più parte dell'API pubblica.
  • Configuration.getMaxJobSchedulerID() e Configuration.getMinJobSchedulerID() sono stati rinominati rispettivamente Configuration.getMinJobSchedulerId() e Configuration.getMaxJobSchedulerId().
  • Tutte le varianti dei metodi enqueue e cancel su WorkManager ora restituiscono un nuovo tipo Operation.
  • Tutte le varianti di enqueue non accettano più vararg per WorkRequest.
  • Se si tenta di initialize WorkManager più di una volta per procedura, verrà restituito un IllegalStateException.

Versione 1.0.0-alpha10

11 ottobre 2018

Questa release supporta il lavoro asincrono controllato dallo sviluppatore. In questa release sono state apportate modifiche che interessano l'API; consulta la sezione Interruzione delle modifiche all'API di seguito.

Prevediamo che WorkManager sta entrando nella fase finale del suo periodo alpha. Prevediamo di essere API stabile in versione beta, quindi ti invitiamo a dedicare un po' di tempo a inviare il tuo feedback sul nostro Issue Tracker.

Modifiche alle API

  • Sono stati rimossi tutti i metodi e le classi deprecated precedenti, in particolare il costruttore Worker predefinito. Questa è una modifica che provoca un errore di API.
  • NonBlockingWorker rinominata in ListenableWorker, che ora è una classe pubblica mostrata e pronta per l'uso.
    • ListenableWorker fornisce l'accesso a un metodo astratto, ListenableFuture<Payload> onStartWork(), che viene chiamato nel thread principale. Spetta a te iniziare ed elaborare il lavoro in modo asincrono. Al termine, dovresti aggiornare correttamente ListenableFuture. Le implementazioni di riferimento di ListenableFuture sono fornite nel pacchetto Futures in alpha02 (vedi sotto la sezione WorkManager).
    • Worker estende ListenableWorker e funziona ancora come prima, con un metodo Result doWork() astratto.
    • Alcuni metodi e membri sono stati messi in ordine casuale da Worker a ListenableWorker.
    • Presto forniremo implementazioni di riferimento per ListenableWorker che utilizzano coroutine Kotlin (una volta rilasciate le versioni stabili) e RxJava2.
  • L'interfaccia WorkerFactory e l'implementazione concreta DefaultWorkerFactory sono state unite in una classe astratta denominata WorkerFactory. L'implementazione garantisce che il comportamento predefinito basato sulla riflessione venga richiamato come ultimo tentativo per qualsiasi istanza WorkerFactory creata dall'utente. Si tratta di una modifica che provoca un errore.
  • Sono stati rimossi WorkManager.synchronous() e WorkContinuation.synchronous() e tutti i metodi correlati. Aggiunto ListenableFuture<Void> come tipo restituito di molti metodi nell'API. Questa è una modifica che provoca un errore di API.
    • Ora puoi ottenere e osservare in modo sincrono utilizzando gli ListenableFuture. Ad esempio, WorkManager.enqueue() prima veniva restituito 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 indicano se l'operazione è riuscita o meno, ma solo se è stata completata. Dovrai comunque collegare i metodi di WorkManager per trovare queste informazioni.
    • ignoriamo le chiamate cancel() per questi oggetti perché sono poco chiari e difficili da ragionare (stai annullando l'operazione o il lavoro risultante?). Ciò rientra nel contratto di Future.
    • Per mantenere la parità con i metodi sincroni getStatus*, abbiamo fornito ListenableFuture varianti e abbiamo rinominato quelle esistenti che hanno restituito LiveData in modo che il nome includa esplicitamente "LiveData" (ad esempio, getStatusesByIdLiveData(UUID)). Questa è una modifica che provoca un errore di utilizzo dell'API.

Correzioni di bug

  • Risolto il problema noto della versione alpha09 relativo ai file androidx-annotations.pro duplicati. Puoi rimuovere la soluzione alternativa dalle note di rilascio precedenti eliminando exclude 'META-INF/proguard/androidx-annotations.pro' dal file gradle.
  • Sono state aggiunte configurazioni ProGuard per mantenere il nuovo costruttore Worker. b/116296569
  • Correggi il potenziale NullPointerException in una condizione di gara in cui il lavoro è stato REPLACEd. b/116253486 e b/116677275
  • WorkContinuation.combine() ora accetta uno o più WorkContinuation anziché due o più. b/117266752

Interruzione delle modifiche all'API

  • Sono stati rimossi tutti i metodi e le classi deprecated precedenti, in particolare il 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() rimosse.
  • Ora i metodi WorkManager.getStatus*() restituiscono ListenableFuture. WorkManager.getStatus*LiveData() ha restituito LiveData.

Versione 1.0.0-alpha09

19 settembre 2018

Problema noto

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

trendy

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

Kotlin

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

Correzioni di bug

  • È stata aggiunta un'altra correzione, necessaria per l'errore "100 job". b/115560696
  • Sono state aggiunte alcune correzioni per gli errori relativi ai vincoli di chiave esterna dovuti alle condizioni di gara. b/114705286
  • Chiamate ConstraintTrackingWorker.onStopped(boolean) delegate al Worker sottostante. B/114125093
  • Applica il ritardo minimo di backoff corretto per Firebase JobDispatcher. b/113304626
  • L'organizzazione in thread garantisce miglioramenti all'interno della libreria.
  • Correggi il potenziale problema relativo alla deduplicazione interna di LiveData.

Modifiche alle API

  • Ora puoi creare le tue istanze Worker in fase di runtime specificando un WorkerFactory come parte di WorkManager.Configuration. Il valore di 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 rimuoverà il costruttore predefinito.
  • Abbiamo iniziato a utilizzare il nuovo artefatto ListenableFuture internamente (privo di dipendenze Guava). Introdurremo l'API AscoltaableFutures nelle prossime versioni. Questa modifica supporterà l'eventuale possibilità di mostrare NonBlockingWorker.
  • Aggiungi la 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 deprecati. Esegui la migrazione al nuovo costruttore il prima possibile. Le versioni future rimuoveranno il costruttore predefinito.

Versione 1.0.0-alpha08

27 agosto 2018

Correzioni di bug

  • Componenti di WorkManager etichettati esplicitamente come inconsapevoli dell'avvio diretto, quindi non si attivano durante l'avvio diretto. In futuro, forniremo una versione di WorkManager che supporta l'avvio diretto. B/112665532
  • Risolto il problema per cui il lavoro ripetuto non era in esecuzione. b/112604021
  • Risolto il lavoro periodico non eseguito ripetutamente (relativo al problema sopra indicato). b/112859683
  • Criteri di backoff rispettati quando il processo dell'app è già in esecuzione.
  • Messaggi di eccezione corretti in Data per indicare che il limite è di 10 kB.
  • Valore massimo di Configuration.setMaxSchedulerLimit(int) abbassato a 50 per tenere conto di una certa latenza nel completamento dell'elaborazione di JobScheduler. b/112817355

Versione 1.0.0-alpha07

16 agosto 2018

Correzioni di bug

  • Correzione di una potenziale query SQL con limiti negativi che potrebbe restituire un numero illimitato di risultati.
  • L'esecuzione del lavoro terminata ora annulla correttamente tutte le copie in sospeso di tale lavoro in altri scheduler. Ciò ha comportato il superamento del limite di JobScheduler job. b/111569265
  • È stato corretto un ConcurrentModificationException in ConstraintTracker. B/112272753
  • Le annotazioni del tipo restituito di Data.getBooleanArray(String) e Data.getIntArray(String) sono state modificate in @Nullable anziché @NonNull. B/112275229

Modifiche alle API

  • Worker ora estende una nuova classe, NonBlockingWorker. Ciò non influisce sull'utilizzo corrente. In futuro, NonBlockingWorker diventerà un'entità completamente supportata per le soluzioni di threading personalizzate.
  • Le annotazioni del tipo restituito di Data.getBooleanArray(String) e Data.getIntArray(String) sono state modificate in @Nullable anziché @NonNull. B/112275229
  • Estensioni Kotlin: ritirato Map.toWorkData() e aggiunto un workDataOf(vararg Pair<String, Any?>) di primo livello per essere più coerente con le API esistenti.

Versione 1.0.0-alpha06

1 agosto 2018

Correzioni di bug

  • Impedisci il blocco del database durante la pianificazione del lavoro. b/111801342
  • Correggi un bug che impedisce l'esecuzione di PeriodicWork in base alla programmazione in modalità Sospensione. b/111469837
  • Correggi una condizione di gara durante il monitoraggio dei vincoli che causano l'arresto anomalo di WorkManager. googlecodelabs/android-workmanager/issue/56
  • Crea WorkRequest univoci quando utilizzi WorkRequest.Builder#build(). B/111408337
  • Attiva l'utilizzo di RescheduleReceiver solo quando sono presenti WorkRequest che ne hanno bisogno. b/111765853

Versione 1.0.0-alpha05

24 luglio 2018

Modifiche alle API

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

Correzioni di bug

  • WorkManager non esegue più il lavoro durante i casi noti di backup automatico. Questo potrebbe aver causato un arresto anomalo. b/110564377
  • È stata corretta la doppia pianificazione di PeriodicWorkRequest quando si utilizza JobScheduler. B/110798652
  • Risolto il problema per cui i PeriodicWorkRequest non vengono eseguiti correttamente dopo la sospensione del dispositivo. b/111469837
  • Risolto il problema di ritardi iniziali durante l'utilizzo di Firebase JobDispatcher. b/111141023
  • Risolti alcuni potenziali problemi di gara e tempi di gara.
  • Hai liberato correttamente BroadcastReceiver di file che non erano più necessari.
  • Ottimizzazione delle prestazioni di riprogrammazione al riavvio delle app dopo la chiusura forzata.
  • È consentito chiamare TestScheduler.setAllConstraintsMet(UUID) prima o dopo aver accodato un WorkRequest specificato. B/111238024

Modifiche che provocano un errore

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

Versione 1.0.0-alpha04

26 giugno 2018

Correzioni di bug

  • Gli elementi PeriodicWorkRequest vengono ora ripianificati correttamente quando viene utilizzata l'implementazione basata su AlarmManager.
  • Risolto il potenziale errore ANR durante la riprogrammazione di tutti i worker dopo un arresto forzato o un riavvio. b/110507716
  • Sono state aggiunte annotazioni con supporto di valori null a varie API WorkManager. b/110344065
  • Registra le eccezioni non rilevate che si verificano durante l'esecuzione del worker. b/109900862
  • Migrazioni di database distruttive consentite nel caso in cui tu decida di eseguire il rollback a una versione precedente di WorkManager. b/74633270
  • Risolto il problema di arresto anomalo della migrazione in caso di creazione di tag impliciti duplicati. Si tratta di un problema molto raro che si è verificato solo se hai utilizzato lo stesso formato di tag implicito personalmente.

Versione 1.0.0-alpha03

19 giugno 2018

Correzioni di bug

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

  • Sono stati corretti i processi duplicati quando si utilizzava JobScheduler dopo il riavvio del dispositivo.

  • I job con trigger di URI dei contenuti ora vengono mantenuti dopo i riavvii. b/80234744

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

  • È stato risolto il problema di arresto anomalo durante il nuovo accodamento di un WorkRequest. b/109572353.

  • Sono stati corretti gli avvisi del compilatore Kotlin durante l'utilizzo della dipendenza work-runtime-ktx.

  • WorkManager ora utilizza Room versione 1.1.1-rc1.

Modifiche alle API

  • È stata aggiunta getStatusesSync(), la versione sincrona di WorkContinuation.getStatuses().
  • Worker è in grado di distinguere tra cancellazione avviata dall'utente e interruzione temporanea richiesta da sistema operativo. Worker.isStopped() restituisce true se è stato richiesto un tipo di interruzione. Worker.isCancelled() restituisce true quando l'opera è stata esplicitamente annullata. b/79632247
  • Aggiungi il supporto per JobParameters#getNetwork() sull'API 28. È esposto tramite Worker.getNetwork().
  • È stato aggiunto Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit) per poter applicare in modo forzato il numero di job che possono essere inviati a JobScheduler o AlarmManager. Ciò aiuta a evitare che WorkManager utilizzi tutti i tuoi slot JobScheduler disponibili.
  • È stato aggiunto Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId), che consente di definire un intervallo di ID job JobScheduler sicuri per WorkManager da usare. b/79996760
  • Worker.getRunAttemptCount() restituisce il conteggio delle esecuzioni correnti per un determinato Worker. B/79716516
  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork) ti consente di accodare PeriodicWorkRequest univoche. b/79600647
  • WorkManager.cancelAllWork() annulla tutti i Worker. Le librerie che dipendono da WorkManager possono eseguire query quando questo metodo è stato chiamato per ultimo utilizzando WorkManager.getLastCancelAllTimeMillis() per eseguire un'ulteriore pulizia dello stato interno.
  • È stato aggiunto WorkManager.pruneWork() per rimuovere i job completati dal database interno. b/79950952, b/109710758

Modifiche del comportamento

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

Modifiche che provocano un errore

  • Rinominato Worker.WorkerResult in Worker.Result.
  • Worker.onStopped ora ha un parametro isCancelled aggiuntivo che è impostato sutrue quando Worker è stato esplicitamente annullato.

Versione 1.0.0-alpha02

24 maggio 2018

Correzioni di bug

  • È stato corretto un NullPointerException il giorno State.isFinished(). B/79550068
  • Risolto un problema che causava la riprogrammazione di Worker per il giorno Application.onCreate(). B/79660657
  • Risolto il problema per cui era possibile pianificare più lavoro di quanto consentito dal sistema operativo. b/79497378
  • La pulizia dei wakelock associati ai Worker è stata spostata nel thread in background.
  • Ora l'implementazione AlarmManager consente la pulizia corretta quando tutte le operazioni in sospeso sono state completate.
  • Sono state risolte le query SQL di pulizia che hanno interessato le impostazioni internazionali diverse dall'inglese. b/80065360
  • Aggiunto il supporto per float in Data. B/79443878
  • Data.Builder.putAll() ora restituisce un'istanza di Builder. B/79699162
  • Ulteriori informazioni relative a javadoc e correzioni nella documentazione. b/79691663

Modifiche alle API

  • Worker possono reagire all'interruzione. È possibile usare Worker.isStopped() per verificare se Worker è stato arrestato. Worker.onStopped() può essere utilizzato per eseguire operazioni di pulizia leggera.
  • L'API Worker.getTags() restituisce un Set di tag associati a Worker.
  • Sono stati aggiunti javax.time.Duration sovraccarichi per le API che richiedono una combinazione di durata e TimeUnit s. Questa funzionalità è protetta da @RequiresApi(26).
  • Le estensioni WorkManager sono state spostate dal pacchetto androidx.work.ktx al pacchetto androidx.work. Le estensioni precedenti sono deprecate e verranno rimosse in una versione futura.
  • L'API Configuration.withExecutor() è deprecata. Usa invece il criterio Configuration.setExecutor().

Versione 1.0.0-alpha01

8 maggio 2018

WorkManager semplifica la pianificazione e l'esecuzione del lavoro in background garantito e consapevole di vincoli. Questa release iniziale è 1.0.0-alpha01.