WorkManager

L'API WorkManager semplifica la pianificazione di attività asincrone differibili che devono essere eseguite in modo affidabile. Queste API ti consentono di creare un'attività e trasferirla a WorkManager per l'esecuzione quando vengono soddisfatti i vincoli di lavoro.
Ultimo aggiornamento Release stabile Candidato per la release Release beta Release alpha
23 settembre 2026 2.12.0 - - -

Dichiara le dipendenze

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

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

Groovy

dependencies {
    def work_version = "2.12.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.12.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 di KTX.

Per saperne di più sulle dipendenze, consulta Aggiungere dipendenze di build.

Feedback

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

Crea un nuovo problema

Per saperne di più, consulta la documentazione di Issue Tracker.

Versione 2.12

Versione 2.12.0

23 settembre 2026

androidx.work:work-*:2.12.0 è stato rilasciato. La versione 2.12.0 contiene questi commit.

Modifiche importanti dalla versione 2.11.0:

  • minSdk è stato aggiornato dall'API 23 all'API 24
  • Un nuovo artefatto, androidx.work:work-analytics, aggiunge API Work Metrics sperimentali per esaminare la cronologia di esecuzione del tuo lavoro. WorkMetricsInfoRepository registra un WorkMetricsInfo per i timestamp degli eventi di lavoro, la durata del worker, il runtime cumulativo totale e le suddivisioni dei tentativi di esecuzione. Le metriche possono essere lette tramite query configurabili o osservate come Flow del lavoro completato. Queste API richiedono l'attivazione di @ExperimentalWorkMetricsApi.
  • Le nuove API di listener di eventi sperimentali ti consentono di osservare direttamente l'esecuzione e la pianificazione di WorkManager. Configuration.Builder ora accetta un listener per gli eventi di esecuzione dei worker (avvio, fine, interruzione ed eccezioni non rilevate) e un listener per gli eventi di pianificazione (inserimento in coda, sblocco, aggiornamento, annullamento e prerequisiti non riusciti). Questi sono i componenti di base su cui si basa work-analytics.

Versione 2.12.0-rc01

12 agosto 2026

androidx.work:work-*:2.12.0-rc01 è stato rilasciato. La versione 2.12.0-rc01 contiene questi commit.

Correzioni di bug

  • È stato corretto un errore di battitura nella classe WorkConstraintsDaoTest e nel nome del file. (I0868d)
  • Riduzione della contesa di blocco in PackageManagerService durante l'avvio di WorkManager tramite query e memorizzazione nella cache degli stati di attivazione predefiniti del manifest del componente in PackageManagerHelper. (Id84ba, b/528755807)
  • È stato risolto un problema per cui la chiamata a WorkManager.updateWork durante l'esecuzione attiva di un worker causava lo spostamento immediato degli hook degli eventi del ciclo di vita dell'esecuzione e del monitoraggio della telemetria alla generazione post-aggiornamento. (Ie80e8, b/511074795)

Versione 2.12.0-beta01

29 luglio 2026

androidx.work:work-*:2.12.0-beta01 è stato rilasciato. La versione 2.12.0-beta01 contiene questi commit.

Correzioni di bug

  • È stata corretta la perdita di memoria durante l'intercettazione delle eccezioni del programma di esecuzione. (I3404e, b/532588487)
  • Miglioramento della propagazione dell'annullamento per RemoteListenableWorker in modo che gli arresti dei worker avviati dal sistema annullino correttamente le coroutine remote e riprogrammino il lavoro, mentre i worker remoti che si annullano autonomamente contrassegnano correttamente il lavoro come FAILED. Nota: questo comportamento è attualmente controllato dal flag con limitazioni del gruppo di librerie Configuration.isRemoteCancellationPropagationFixEnabled (valore predefinito false) per consentire la verifica sperimentale e garantire che le metriche di affidabilità rimangano stabili prima di rimuovere definitivamente il flag. (I387f3, b/420724435)

Versione 2.12.0-alpha01

15 luglio 2026

androidx.work:work-*:2.12.0-alpha01 è stato rilasciato. La versione 2.12.0-alpha01 contiene questi commit.

Modifiche alle API

  • È stata aggiunta l'API WorkMetricsQuery per filtrare le informazioni sulle metriche (I132b4, b/522338412)
  • Implementa workerDurationMillis e totalRuntimeMillis in WorkMetricsInfo per monitorare la durata dell'esecuzione del worker e il runtime cumulativo totale. (I57f65, b/507212208)
  • Sono stati aggiunti i costruttori retentionDuration (Durata, API 26+) e retentionTime/retentionTimeUnit (API 23+) a WorkMetricsInfoRepository per consentire l'eliminazione delle metriche precedenti, con un valore predefinito di 7 giorni. (Ifdf2e, b/522338412)
  • Aggiungi l'API Flow per WorkMetricsInfo completati (I11ec2, b/507212999)
  • Aggiungi l'annotazione sperimentale mancante alle classi work-analytics (I1a055, b/528112001)
  • Ora androidx.benchmark ha un minSdk di 24. (Ic2a85)
  • Implementa stopReasonCounts, explicitRetryCount e runAttemptCount in WorkMetricsInfo. (I95498, b/507212225)
  • Implementa le API WorkMetricsInfo e lo schema del database per monitorare la cronologia di esecuzione del lavoro, inclusi i timestamp di accodamento, sblocco, primo avvio e fine. (I163e9, b/479123623, b/507212482)
  • Aggiungi un'API sperimentale per disattivare la pianificazione opportunistica in-process (I1062d, b/513299442)
  • Aggiungi l'API sperimentale per ascoltare gli eventi di pianificazione di WorkManager (I14487, b/448485695)
  • Aggiungi il nome della classe di worker a WorkInfo (I57da1, b/448485695)
  • Aggiungi un'annotazione più granulare all'API sperimentale per l'ascoltatore di eventi (Icaa8e, b/448485695)
  • Aggiungi una nuova API che consente di recuperare array di stringhe annullabili dalle istanze della classe Data (I78bc3, b/383071402)
  • Crea l'artefatto work-analytics (Idc7c2, b/465357612)
  • Aggiungi un'API sperimentale per impostare un listener per gli eventi di esecuzione dei worker (I06b38, b/448485695)

Correzioni di bug

  • Utilizza Dispatchers.Default anziché il pool di thread personalizzato per la configurazione WM predefinita (Ic2c42, b/506239869)
  • Migliorare e aggiungere test per gestire i lavoratori non idonei (I500f3, b/506239869)
  • È stato corretto un ConcurrentModificationException nell'invio del listener di esecuzione WorkManager's. (I4cc18, b/506239869)
  • Risolti arresti anomali del processo in WorkManager durante la registrazione dei callback di vincolo di rete a causa di autorizzazioni ACCESS_NETWORK_STATE mancanti. (I7045a, b/446013734)
  • Migliora i dettagli dei log quando i log DEBUG sono abilitati (Id9e5f, b/491209738)
  • Correzione del bug per cui non è possibile pianificare il lavoro riprovato con il sistema operativo (I452fc, b/504085166, b/517339607)
  • È stato corretto il link al documento di riferimento Configuration.Provider (Ieedb7, b/340913210)
  • Gli hook degli eventi non bloccano le operazioni (I27cd8, b/448485695)
  • WorkManager ora riprova l'inizializzazione su SQLiteException generico. (I98436, b/485368721)
  • È stato risolto un problema per cui gli sviluppatori potevano ricevere un codice motivo di interruzione inesistente pari a 0 mappandolo a WorkInfo.STOP_REASON_UNKNOWN. (I0b175, b/479314734)
  • Risolvi altri problemi relativi alle chiamate di rete non riuscite in background anche quando i vincoli di rete vengono soddisfatti (Ic7f73, b/445324855)
  • Gestisci l'eccezione di sicurezza in NetworkStateTracker. (I4b7ca, b/480123154)
  • Assicurati che gli hook di esecuzione acquisiscano uno snapshot WorkInfo accurato (I25ebb, b/448485695)
  • Risolto un problema per cui le richieste di rete in background potevano non riuscire su Android 15. (I60f24, I8a0a2, b/452081708) (I5abb7, b/465016918)
  • Risolto un problema per cui i WorkRequest periodici che non riescono a causa di un'eccezione non rilevata non vengono riprogrammati. (Ia6b92, b/443879071)

Versione 2.11

Versione 2.11.2

25 marzo 2026

androidx.work:work-*:2.11.2 è stato rilasciato. La versione 2.11.2 contiene questi commit.

Correzioni di bug

  • Correzione di ulteriori problemi relativi alle chiamate di rete non riuscite in background anche quando il vincolo di rete è soddisfatto (Ic7f73, b/445324855)
  • Gestisci l'eccezione di sicurezza in NetworkStateTracker. (I4b7ca, b/480123154)
  • Risolto un problema per cui i WorkRequest periodici che non riescono a causa di un'eccezione non rilevata non vengono riprogrammati. (Ia6b92, b/443879071)

Versione 2.11.1

28 gennaio 2026

androidx.work:work-*:2.11.1 è stato rilasciato. La versione 2.11.1 contiene questi commit.

Correzioni di bug

  • È stato corretto il vincolo dello stato di rete in modo che non venga superato mentre la connettività è bloccata su Android 15 e versioni successive. (I5abb7, b/465016918)
  • Il monitoraggio del vincolo di rete fissa non considera lo stato bloccato per il suo valore iniziale. (I8a0a2, b/452081708)
  • È stato risolto un problema relativo al passaggio del vincolo di richiesta di rete mentre la connettività è bloccata su Android 15 e versioni successive. (I60f24, b/452081708)

Versione 2.11.0

22 ottobre 2025

androidx.work:work-*:2.11.0 è stato rilasciato. La versione 2.11.0 contiene questi commit.

Modifiche importanti dalla versione 2.10.0:

  • L'minSdk è stato aggiornato dall'API 21 all'API 23.
  • L'API setRemoteSessionTimeoutMillis nel generatore di configurazioni di WorkManager è stata aggiunta per consentire la configurazione della durata di una sessione RemoteWorkManager dall'ultimo utilizzo.

Versione 2.11.0-rc01

8 ottobre 2025

androidx.work:work-*:2.11.0-rc01 è stato rilasciato. La versione 2.11.0-rc01 contiene questi commit.

Versione 2.11.0-beta01

24 settembre 2025

androidx.work:work-*:2.11.0-beta01 è stato rilasciato. La versione 2.11.0-beta01 contiene questi commit.

Modifiche alle API

Correzioni di bug

  • È stato corretto l'arresto del servizio in primo piano quando sono presenti comandi in attesa. (Iae822, b/432069314)
  • È stato corretto il problema del worker di coroutine remoto che non riesce a scollegare il servizio remoto (I842f2, b/247113322).

Versione 2.11.0-alpha01

27 agosto 2025

androidx.work:work-*:2.11.0-alpha01 è stato rilasciato. La versione 2.11.0-alpha01 contiene questi commit.

Modifiche alle API

  • minSdk è stato aggiornato dall'API 21 all'API 23 (Ibdfca, b/380448311, b/435705964, b/435705223)
  • È stata aggiunta l'API setRemoteSessionTimeoutMillis nel builder di configurazione di WorkManager per consentire la configurazione della quantità di tempo in cui una sessione RemoteWorkManager è attiva dall'ultimo utilizzo. (Ib23c8)
  • Aggiungi un'API sperimentale in WorkRequest.Builder per applicare il backoff quando il lavoro viene interrotto dal sistema. (Ie2dc7, b/335513480)
  • Aggiungi l'API di test per passare una classe worker diversa a TestListenableWorkerBuilder rispetto a quella in fase di creazione per supportare implementazioni WorkerFactory personalizzate (If6bff, b/389154854)

Correzioni di bug

  • Memorizza nella cache le funzionalità di rete in SharedNetworkCallback per evitare IPC non necessari (Ie4027, b/427115602)
  • È stato corretto un problema con la valutazione dei vincoli di rete in cui gli elementi di lavoro successivi al primo non ottenevano le funzionalità di rete correnti e invece raggiungevano ConstraintsNotMet dopo un timeout (Ib6a66, b/427115602)

Versione 2.10

Versione 2.10.5

24 settembre 2025

androidx.work:work-*:2.10.5 è stato rilasciato. La versione 2.10.5 contiene questi commit.

Correzioni di bug

  • È stato corretto l'arresto del servizio in primo piano quando sono presenti comandi in attesa (Iae822, b/432069314).

Versione 2.10.4

10 settembre 2025

androidx.work:work-*:2.10.4 è stato rilasciato. La versione 2.10.4 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema con RemoteCoroutineWorker che non riusciva a dissociare il servizio remoto (I842f2, b/247113322).

Versione 2.10.3

30 luglio 2025

androidx.work:work-*:2.10.3 è stato rilasciato. La versione 2.10.3 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema per cui i lavoratori con vincoli di rete identici a quelli di un lavoratore precedente segnalavano che i vincoli non venivano rispettati. (b/427115602).

Versione 2.10.2

18 giugno 2025

androidx.work:work-*:2.10.2 è stato rilasciato. La versione 2.10.2 contiene questi commit.

Correzioni di bug

  • Risolvi un problema durante il salvataggio dei lavoratori con richieste di rete e funzionalità predefinite che causavano la riaggiunta delle funzionalità rimosse, con conseguente malfunzionamento dei lavoratori con vincoli di rete. (b/409716532)
  • È stato corretto un bug che impediva ai worker con vincoli di rete di essere eseguiti tempestivamente a causa di vincoli non soddisfatti, anche se la rete e le funzionalità erano disponibili. (b/423403088)

Versione 2.10.1

23 aprile 2025

androidx.work:work-*:2.10.1 è stato rilasciato. La versione 2.10.1 contiene questi commit.

Correzioni di bug

  • Ridurre la possibilità che TooManyRequestsException venga escluso dalla registrazione di WorkManager di un NetworkCallback utilizzato per il monitoraggio dei vincoli. (b/231499040, b309d5).

Versione 2.10.0

30 ottobre 2024

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

Modifiche significative dalla versione 2.9.1

  • Sono stati aggiunti tag di traccia ai job da WorkManager, il che rende molto più semplice la comprensione di "adb shell dumpsys jobscheduler", poiché conterrà il nome del worker in esecuzione. Vengono aggiunte anche sezioni di traccia intorno alle aree chiave di WorkManager.
  • Configuration.workerCoroutineContext è stato aggiunto per il controllo del dispatcher in cui viene eseguito CoroutineWorker.
  • Gli sviluppatori possono specificare NetworkRequest come vincolo per un worker tramite il metodo Constraints.setRequiredNetworkRequest. Ciò consente un controllo più granulare sulla rete in cui deve essere eseguito questo worker.
  • WorkManager La versione 2.10.0 è ora compilata con l'SDK 35 e contiene varie modifiche per la compatibilità con l'SDK 35.

Versione 2.10.0-rc01

24 ottobre 2024

androidx.work:work-*:2.10.0-rc01 è stato rilasciato. La versione 2.10.0-rc01 contiene questi commit.

Versione 2.10.0-beta01

2 ottobre 2024

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

Versione 2.10.0-alpha04

18 settembre 2024

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

Modifiche alle API

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

Versione 2.10.0-alpha03

4 settembre 2024

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

Nuove funzionalità

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

Modifiche alle API

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

Correzioni di bug

  • È stato corretto un arresto anomalo causato da WorkManager che tentava di riavviare un worker a esecuzione prolungata (ad es. un worker in primo piano) quando il tipo di primo piano del lavoro aveva autorizzazioni preliminari di Android 14 revocate. (b/333957914)
  • È stata rimossa la definizione manuale dell'accesso alle nuove API della piattaforma, in quanto avviene automaticamente tramite la modellazione delle API quando si utilizza R8 con AGP 7.3 o versioni successive (ad es. R8 versione 3.3) e per tutte le build quando si utilizza AGP 8.1 o versioni successive (ad es. D8 versione 8.1). I client che non utilizzano AGP sono invitati a eseguire l'aggiornamento a D8 versione 8.1 o successive. Consulta questo articolo per ulteriori dettagli. (Ia60e0, b/345472586)

Versione 2.10.0-alpha02

17 aprile 2024

androidx.work:work-*:2.10.0-alpha02 è stato rilasciato. La versione 2.10.0-alpha02 contiene questi commit.

Modifiche alle API

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

Versione 2.10.0-alpha01

24 gennaio 2024

androidx.work:work-*:2.10.0-alpha01 è stato 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 in cui deve essere eseguito questo worker.

Modifiche alle API

  • Aggiunta di una funzionalità per specificare NetworkRequest come vincolo. (Id98a1, b/280634452)

Versione 2.9

Versione 2.9.1

7 agosto 2024

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

Correzioni di bug

  • È stato corretto un arresto anomalo causato da WorkManager che tentava di riavviare un worker a esecuzione prolungata (ovvero un worker in primo piano) quando il tipo di primo piano del lavoro aveva autorizzazioni prerequisito di Android 14 revocate. (b/333957914)

Versione 2.9.0

29 novembre 2023

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

Modifiche importanti dalla versione 2.8.0

  • Osservabilità tramite Flow. Anziché LiveData, l'avanzamento del worker ora può essere osservato tramite Flow tramite WorkManager.getWorkInfosFlow e metodi simili.
  • Ora WorkManager fornisce un suggerimento sul motivo per cui un worker è stato arrestato in precedenza. Può essere eseguito da un lavoratore tramite il metodo getStopReason() o da WorkInfo tramite getStopReason().
  • Pianificazione precisa dei lavoratori periodici tramite setNextScheduleTimeOverride. Ciò consente il calcolo dinamico del successivo programma di lavoro periodico, che può essere utilizzato per implementare funzionalità avanzate come tempi di aggiornamento adattivi, comportamento di nuovi tentativi personalizzato o l'esecuzione di un worker del feed di notizie prima che l'utente si svegli ogni mattina senza deriva. ExistingPeriodicWorkPolicy.UPDATE deve essere utilizzato con queste tecniche per evitare di annullare un worker attualmente in esecuzione durante la pianificazione del successivo.
  • Test di WorkManager con la produzione di corrispondenze di threading. ExecutorsMode.PRESERVE_EXECUTORS può essere utilizzato in initializeTestWorkManager per conservare gli esecutori impostati in Configuration e per utilizzare il thread principale reale.
  • Le API coroutine come CoroutineWorker sono state spostate dall'artefatto aggiuntivo work-runtime-ktx all'artefatto principale work-runtime. work-runtime-ktx ora è vuoto.

Modifiche alle API

  • stopReason è stato aggiunto a WorkInfo. Rende stopReason disponibile dopo l'esecuzione del worker. Potrebbe essere utile per la segnalazione stopReason in modo utilizzabile, perché una volta interrotto un worker, l'app stessa potrebbe essere chiusa molto rapidamente. (I21386)
  • Consenti di impostare Clock tramite la configurazione e di utilizzarlo per determinare la sequenza di esecuzione dei test dei worker. (Ic586e)
  • Il metodo getStopReason() è stato aggiunto a ListenableWorker, che fornisce un suggerimento sul motivo per cui il worker è stato arrestato. (I07060)
  • È stato aggiunto WorkManagerTestInitHelper#closeWorkDatabase() per evitare l'avviso di Closeguard sulle risorse trapelate. (Ia8d49)
  • Il costruttore di WorkInfo è ora pubblico, il che può essere utile per i test. (Ia00b6, b/209145335)
  • work-runtime-ktx è ora vuoto, CoroutineWorker e altre utilità specifiche di Kotlin sono ora disponibili nell'artefatto principale di work-runtime. (I71a9a)
  • È stato aggiunto il metodo setNextScheduleTimeOverride, che consente di impostare con precisione i programmi di lavoro periodici (I3b4da)
  • È stato aggiunto getNextScheduleTimeMillis per ottenere informazioni sull'orario di esecuzione pianificato a WorkInfo. (I797e4)
  • Le informazioni sul ritardo iniziale e sulla periodicità vengono aggiunte a WorkInfo. (I52f2f)
  • Aggiunto il metodo per osservare i lavoratori tramite Flussi tramite i metodi getWorkInfosByTagFlow, getWorkInfoByIdFlow, getWorkInfosForUniqueWorkFlow, getWorkInfosFlow (If122a)
  • Sono state aggiunte le annotazioni @RequiresApi(...) mancanti ai costruttori e alle proprietà di Constraints. Ora sono allineati alle annotazioni corrispondenti sui setter in Constraints.Builder esistenti dalle prime versioni di WorkManager. (I6d7d2)
  • WorkManager ora ha un limite separato per i worker URI dei contenuti per garantire loro slot in JobScheduler ed evitare aggiornamenti mancanti dei contenuti in caso di carico elevato. Il limite può essere configurato tramite Configuration.Builder.setContentUriTriggerWorkersLimit. (Ic128f)
  • I vincoli vengono aggiunti a WorkInfo. (I162c0)

Versione 2.9.0-rc01

18 ottobre 2023

androidx.work:work-*:2.9.0-rc01 è stato 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 è stato 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 è stato rilasciato. La versione 2.9.0-alpha02 contiene questi commit.

Nuove funzionalità

  • Ora WorkManager fornisce un suggerimento sul motivo per cui un worker è stato arrestato in precedenza. Può essere eseguito da un lavoratore 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 la generazione di report stopReason in modo utilizzabile, perché una volta interrotto un worker, un'app potrebbe essere chiusa molto rapidamente. (I21386)
  • Consenti di impostare l'orologio tramite la configurazione e di utilizzarlo per determinare la sequenza di esecuzione dei test dei worker. (Ic586e)
  • Il metodo getStopReason() è stato aggiunto a ListenableWorker, che fornisce un suggerimento sul motivo per cui il worker è stato arrestato. (I07060)
  • È stato aggiunto WorkManagerTestInitHelper#closeWorkDatabase() per evitare l'avviso di Closeguard sulle risorse trapelate. (Ia8d49)

Correzioni di bug

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

Versione 2.9.0-alpha01

7 giugno 2023

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

Nuove funzionalità

  • Osservabilità tramite Flow. Anziché LiveData, l'avanzamento del worker ora può essere osservato tramite Flow tramite WorkManager.getWorkInfosFlow e metodi simili.
  • Pianificazione precisa dei lavoratori periodici tramite setNextScheduleTimeOverride. Ciò consente il calcolo dinamico del successivo programma di lavoro periodico, che può essere utilizzato per implementare funzionalità avanzate come tempi di aggiornamento adattivi, comportamento di nuovi tentativi personalizzato o per far eseguire un worker del feed di notizie prima che l'utente si svegli ogni mattina senza deriva. ExistingPeriodicWorkPolicy.UPDATE deve essere utilizzato con queste tecniche per evitare di annullare un worker in esecuzione durante la pianificazione del successivo.
  • WorkManager's testing with threading matching production. ExecutorsMode.PRESERVE_EXECUTORS può essere utilizzato per conservare gli executor impostati in Configuration e per utilizzare il thread principale reale.
  • Le API coroutine come CoroutineWorker sono state spostate dall'artefatto aggiuntivo work-runtime-ktx all'artefatto principale work-runtime. work-runtime-ktx è ora vuoto.

Modifiche alle API

  • Il costruttore di WorkInfo è ora pubblico, il che può essere utile per i test. (Ia00b6, b/209145335)
  • work-runtime-ktx è ora vuoto, CoroutineWorker e altre utilità specifiche di Kotlin sono ora disponibili nell'artefatto work-runtime principale. (I71a9a)
  • È stato aggiunto il metodo setNextScheduleTimeOverride, che consente di impostare con precisione i programmi di lavoro periodici (I3b4da)
  • getEarliestRunTimeMillis è stato rinominato in getNextScheduleTimeMillis. (I2bd7a)
  • Le informazioni sull'ora della prossima esecuzione pianificata vengono aggiunte a WorkInfo. (I797e4)
  • Le informazioni sul ritardo iniziale e sulla periodicità vengono aggiunte a WorkInfo. (I52f2f)
  • Aggiunto il metodo per osservare i lavoratori tramite Flussi tramite i metodi getWorkInfosByTagFlow, getWorkInfoByIdFlow, getWorkInfosForUniqueWorkFlow, getWorkInfosFlow (If122a)
  • Sono state aggiunte le annotazioni @RequiresApi(...) mancanti ai costruttori e alle proprietà di Constraints. Ora sono allineati alle annotazioni corrispondenti sui setter in Constraints.Builder esistenti dalle prime versioni di WorkManager. (I6d7d2)
  • WorkManager ora ha un limite separato per i worker URI dei contenuti per garantire loro slot in JobScheduler ed evitare aggiornamenti dei contenuti mancanti in caso di carico elevato. Il limite può essere configurato tramite Configuration.Builder.setContentUriTriggerWorkersLimit. (Ic128f)
  • I vincoli vengono aggiunti a WorkInfo. (I162c0)

Versione 2.8

Versione 2.8.1

22 marzo 2023

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

Correzioni di bug

  • È stato risolto un errore ANR in RescheduleReceiver che in precedenza non gestiva correttamente due trasmissioni simultanee. (b/236906724)

Versione 2.8.0

8 febbraio 2023

androidx.work:work-*:2.8.0 è stato 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 l'ora di accodamento e l'incatenamento originali.(I9a248, b/219446409)
  • ExistingPeriodicWorkPolicy.UPDATE è stato aggiunto. Questa policy consente di aggiornare un lavoro periodico in base al nome. È simile a REPLACE esistente, ma è meno intrusivo: non annulla un worker se è attualmente in esecuzione e conserva l'ora di accodamento. Il ritardo iniziale e il periodo vengono calcolati dall'ora di accodamento originale, anziché dall'ora di aggiornamento. REPLACE è stato ritirato per ridurre la confusione tra REPLACE e UPDATE, che hanno nomi molto simili. Se vuoi comunque mantenere la semantica precedente di REPLACE, puoi utilizzare il nuovo CANCEL_AND_REENQUEUE, che è identico a REPLACE. (I985ed, b/219446409)
  • Aggiunta la possibilità di intercettare le eccezioni di pianificazione fornendo Consumer<Throwable> tramite setSchedulingExceptionHandler)
  • È stata aggiunta la possibilità di fornire Consumer<Throwable> tramite setInitializationExceptionHandler per determinare se si sono verificati problemi durante il tentativo di inizializzare WorkManager.
  • I suggerimenti 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)
  • Aggiunta di getForegroundInfo a Worker. (Ic1ead)
  • RxWorker sia per RxJava 2 che per RxJava 3 ora ha setForeground che restituisce Completable che può essere utilizzato al posto di setForegroundInfoAsync che restituisce ListenableFuture
  • RxWorker sia per RxJava 2 che per RxJava 3 ha getForegroundInfo che restituisce Single che può essere utilizzato al posto di getForegroundInfoAsync che restituisce ListenableFuture. (b/203851459)
  • Ora i vincoli possono essere creati direttamente anziché utilizzando Constraints.Builder, il che è comodo per gli utenti Kotlin. (Idc390, b/137568653)
  • È stata aggiunta la possibilità di verificare se WorkManager è stato inizializzato. Inoltre, è stata aggiunta una nuova API getConfiguration() per consentire agli sviluppatori di librerie di ottenere la configurazione con cui è stata inizializzata WorkManager. (I6eff3, b/212300336)

Correzioni di bug

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

Versione 2.8.0-rc01

7 dicembre 2022

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

Nuove funzionalità

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

Versione 2.8.0-beta02

9 novembre 2022

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

Correzioni di bug

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

Versione 2.8.0-beta01

5 ottobre 2022

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

Correzioni di bug

  • Risolto un problema con lo scheduler greedy che impediva l'esecuzione immediata dei worker in caso di carico. (I9686b, b/248111307)

Versione 2.8.0-alpha04

7 settembre 2022

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

Modifiche alle API

  • WorkerInfo.getGeneration() e WorkerParameters.getGeneration() sono stati aggiunti per restituire la generazione di un worker. Un worker ha più generazioni se è stato aggiornato tramite WorkManager.updateWork o WorkManager.enqueueUniquePeriodicWork utilizzando ExistingPeriodicWorkPolicy.UPDATE. Tieni presente che se il worker è attualmente in esecuzione, è possibile che questo metodo restituisca una generazione più recente rispetto a quella del worker attualmente in esecuzione se 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 è stato rilasciato. La versione 2.8.0-alpha03 contiene questi commit.

Nuove funzionalità

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

Modifiche alle API

  • WorkManager.updateWork è stato aggiunto per aggiornare il lavoro mantenendo l'ora di accodamento e l'incatenamento originali.(I9a248, b/219446409)
  • ExistingPeriodicWorkPolicy.UPDATE è stato aggiunto. Questa policy consente di aggiornare un lavoro periodico in base al nome. È simile a REPLACE esistente, ma è meno intrusivo: non annulla un worker se è attualmente in esecuzione e conserva l'ora di accodamento. Il ritardo iniziale e il periodo vengono calcolati in base all'ora di accodamento originale, anziché all'ora di aggiornamento. REPLACE è stato ritirato per ridurre la confusione tra REPLACE e UPDATE, che hanno nomi molto simili. Se vuoi comunque 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)
  • I suggerimenti 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 è stato rilasciato. La versione 2.8.0-alpha02 contiene questi commit.

Modifiche alle API

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

Versione 2.8.0-alpha01

12 gennaio 2022

androidx.work:work-*:2.8.0-alpha01 è stato 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 BuildCompat sperimentali per gli SDK futuri (Iafd82, b/207528937)
  • Aggiungi getForegroundInfo a Worker. (Ic1ead)
  • Sono stati aggiunti metodi helper WorkQuery.fromIds per creare WorkQuery direttamente dagli ID. (Ie5bdf, b/199919736)
  • RxWorker ora restituisce setForeground Completable che può essere utilizzato al posto di setForegroundInfoAsync che restituisce ListenableFuture. (I85156)
  • RxWorker per RxJava 2 ora restituisce getForegroundInfo Single che può essere utilizzato al posto di getForegroundInfoAsync che restituisce ListenableFuture. (I21c91, b/203851459)
  • RxWorker per RxJava 3 ora restituisce getForegroundInfo Single che può essere utilizzato al posto di getForegroundInfoAsync che restituisce ListenableFuture. (I1ca8a)
  • RxWorker ora restituisce setForeground Completable che può essere utilizzato al posto di setForegroundInfoAsync che restituisce ListenableFuture. (I992a3, b/203851459)

Correzioni di bug

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

Versione 2.7

Versione 2.7.1

17 novembre 2021

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

Correzioni di bug

  • Le cancellazioni in CoroutineScope vengono propagate a ListenableFuture quando si utilizza suspendCancellableCoroutine. (I77e63)
  • Viene generata immediatamente un'eccezione quando le richieste di lavoro ritardate vengono contrassegnate come urgenti. bef1762

Versione 2.7.0

13 ottobre 2021

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

Modifiche importanti dalla versione 2.6.0

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

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

Versione 2.7.0-rc01

29 settembre 2021

androidx.work:work-*:2.7.0-rc01 è stato 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 è stato rilasciato. La versione 2.7.0-beta01 contiene questi commit.

Nuove funzionalità

  • Riduce la contesa SQLite multiprocesso durante l'inizializzazione di WorkManager.

Modifiche alle API

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

Correzioni di bug

  • Fornire un messaggio di errore migliore per i lavoratori con procedura rapida che non implementano getForegroundInfoAsync(). (aosp/1809376)

Versione 2.7.0-alpha05

21 luglio 2021

androidx.work:work-*:2.7.0-alpha05 è stato 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 è stato rilasciato.

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

Modifiche alle API

  • ListenableWorker.setForegroundAsync() non è più deprecato.
  • Ti consigliamo di utilizzare l'API WorkRequest.Builder.setExpedited(...), se 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 restrizioni dei servizi in primo piano, verrà generata l'eccezione ForegroundServiceStartNotAllowedException.

Correzioni di bug

  • Quando i job urgenti vengono riprogrammati, non sono più urgenti. Diventano job regolari.

Versione 2.7.0-alpha03

21 aprile 2021

androidx.work:work-*:2.7.0-alpha03 è stato 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 è stato 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 viene scelto come target Android 12. (b/180884673)

Versione 2.7.0-alpha01

18 febbraio 2021

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

Nuove funzionalità

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

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

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

    Quando si utilizza setExpedited(...), WorkManager delega i job rapidi in JobScheduler a partire da Android 12, fornendo al contempo la compatibilità con le versioni precedenti di Android delegando i servizi in primo piano.

Modifiche alle API

  • Aggiungi il supporto per i WorkRequest rapidi.

Versione 2.6.0

Versione 2.6.0

1° settembre 2021

androidx.work:work-*:2.6.0 è stato 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 procedere nel seguente modo.

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

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

Versione 2.6.0-rc01

4 agosto 2021

androidx.work:work-*:2.6.0-rc01 è stato 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 è stato rilasciato. La versione 2.6.0-beta02 contiene questi commit.

Correzioni di bug

  • Ora RemoteWorkManager viene correttamente scollegato da RemoteWorkManagerService, il che consente a RemoteWorkManagerService di eseguire la pulizia correttamente. aosp/1730694
  • RemoteListenableWorker ora si dissocia correttamente da RemoteWorkerService, il che consente a RemoteWorkerService di eseguire la pulizia correttamente. aosp/1743817
  • ForceStopRunnable ora viene eseguito solo nel processo dell'app principale. Si tratta di un'ottimizzazione che evita la contesa delle risorse per le app che utilizzano più processi. aosp/1749180, aosp/1761729

Versione 2.6.0-beta01

2 giugno 2021

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

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

Versione 2.6.0-alpha02

21 aprile 2021

androidx.work:work-*:2.6.0-alpha02 è stato 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, ovvero un'implementazione di RemoteListenableWorker che può essere associata a un processo remoto. (I30578)

Modifiche alle API

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

Versione 2.6.0-alpha01

24 marzo 2021

androidx.work:work-*:2.6.0-alpha01 è stato 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 procedere nel seguente modo.

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

    (oppure)

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

Modifiche alle API

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

Correzioni di bug

  • Aggiungi una soluzione alternativa per un bug OEM che causa la generazione di un SecurityException quando si utilizzano le API AlarmManager. (aosp/1587518)

Versione 2.5.0

Versione 2.5.0

27 gennaio 2021

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

Modifiche principali dalla versione 2.4.0

  • Un nuovo artefatto :work:work-multiprocess per le app che utilizzano più processi. Ciò introduce miglioramenti delle prestazioni unificando la pianificazione delle richieste di lavoro in un unico processo.
    • Per utilizzare work-multiprocess, definisci una dipendenza da: implementation "androidx.work:work-multiprocess:2.5.0"
    • Designa un processo principale utilizzando Configuration.Builder.setDefaultProcessName(String).
    • Quando utilizzi work-multiprocess, ti consigliamo di utilizzare anche RemoteWorkManager per gestire i tuoi WorkRequest. RemoteWorkManager contatta sempre il processo designato. Lo scheduler in-process viene eseguito anche nel processo designato.
  • A volte, ActivityManager non può creare un'istanza di JobService per avviare un job. Di conseguenza, il job sottostante viene eliminato automaticamente a causa di un bug della piattaforma. WorkManager ora garantisce che esistano job di backup per ogni WorkRequest quando un Application viene inizializzato riconciliando i job. Ciò migliora notevolmente l'affidabilità dell'esecuzione dei job. (b/172475041, aosp/1489577)
  • WorkManager limita la crescita del database riducendo la durata del buffer in cui vengono monitorati gli WorkRequest dopo il completamento di un WorkRequest. In precedenza, la durata era di 7 giorni. È stato ridotto a 1 giorni più la durata di keepResultsForAtLeast. (aosp/1419708)
  • TestListenableWorkerBuilder ora supporta la classe reificata che estende ListenableWorker per semplificare i test. (aosp/1443299, b/169787349)
  • L'ispettore WorkManager è ora disponibile quando utilizzi Android Studio Arctic Fox.

Versione 2.5.0-rc01

13 gennaio 2021

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

Correzioni di bug

  • È stato corretto un bug per cui getWorkInfosLiveData non veniva invalidato correttamente dopo l'aggiornamento delle entità quando si utilizzava l'API basata su WorkQuery. (aosp/1540566, b/173769028)
  • È stato corretto un bug per cui le transazioni del database non venivano contrassegnate come riuscite in alcuni rari casi. Ciò causa problemi su alcuni dispositivi Motorola. (aosp/1535368, b/175944460)
  • È stato corretto un bug per ignorare i NoSuchElementException durante il tentativo di annullare il binding da un processo non attivo. (aosp/1530589)
  • Migliora ConstraintTrackingWorker per arrestare un ListenableWorker solo se non è già stato arrestato. (aosp/1496844, b/172946965)
  • Aggiorna le librerie androidx.work per il targeting di Java 8 (Ibd2f2)

Versione 2.5.0-beta02

2 dicembre 2020

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

Correzioni di bug

  • È stato corretto un bug in androidx.work:work-multiprocess in cui WorkManager bloccava inavvertitamente il thread chiamante durante il tentativo di binding al processo designato. (aosp/1475538)
  • È stato corretto un bug per cui i PeriodicWorkRequest non venivano riconciliati correttamente. (b/172475041, aosp/1489577)
  • È stata aggiunta una soluzione alternativa per un bug della piattaforma durante l'arresto 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 è stato rilasciato. La versione 2.5.0-beta01 contiene questi commit.

Nuove funzionalità

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

Correzioni di bug

  • Quando gli ListenableWorker vengono interrotti, contrassegnali immediatamente come ENQUEUED in modo che possano essere riprogrammati in un secondo momento. (aosp/1455618, b/170273988)

Versione 2.5.0-alpha03

14 ottobre 2020

androidx.work:work-*:2.5.0-alpha03 è stato 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

  • Utilizza 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 Proguard per :work:work-multiprocess. (aosp/1432091)
  • Migliora i cicli di vita delle notifiche per i lavori a esecuzione prolungata 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 è stato rilasciato. La versione 2.5.0-alpha02 contiene questi commit.

Nuove funzionalità

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

Modifiche alle API

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

Correzioni di bug

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

Versione 2.5.0-alpha01

19 agosto 2020

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

Nuove funzionalità

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

Correzioni di bug

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

Contributo esterno

Versione 2.4.0

Versione 2.4.0

22 luglio 2020

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

Modifiche principali dalla versione 2.3.0

  • Lo scheduler in-process di WorkManager è ora più potente. In precedenza, lo stato Scheduler in corso prendeva in considerazione solo l'esecuzione del lavoro che non era in ritardo e i cui vincoli erano soddisfatti. Ora, lo scheduler in-process tiene traccia di WorkRequests che potrebbero essere eseguiti in futuro, incluse le PeriodicWorkRequest. Scheduler in-process non rispetta i limiti di pianificazione (ma è comunque limitato alle dimensioni di Executor utilizzato da WorkManager). Ciò significa che l'applicazione ora può eseguire molte più WorkRequest quando è in primo piano. Per gestire l'esecuzione del lavoro ritardato in primo piano, WorkManager introduce anche un nuovo RunnableScheduler configurabile. (aosp/1185778)
  • WorkManager ora supporta RxJava 3. Per utilizzare RxJava 3, devi includere la seguente dipendenza: implementation "androidx.work:work-rxjava3:2.4.0". (aosp/1277904)
  • È stata aggiunta la possibilità di eseguire query per WorkInfo utilizzando un WorkQuery. Ciò è utile quando gli sviluppatori vogliono eseguire query sugli WorkInfo in base a una combinazione di più attributi. Per ulteriori informazioni, consulta WorkQuery.Builder.fromStates(...), WorkQuery.Builder. fromTags(...) o WorkQuery.Builder.fromUniqueWorkNames(...). (aosp/1253230, b/143847546)
  • Aggiungi la possibilità di richiedere informazioni diagnostiche da WorkManager utilizzando:

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

    Questo fornisce molte informazioni utili, tra cui:

    • WorkRequest completate nelle ultime 24 ore.
    • WorkRequest attualmente in esecuzione.
    • Scheduled WorkRequests. (aosp/1235501)
  • Aggiungi ExistingWorkPolicy.APPEND_OR_REPLACE, che è simile a APPEND, ma sostituisce una catena che ha annullato o non ha superato i prerequisiti. (b/134613984, aosp/1199640)

  • Offri la possibilità di aggiungere un RunnableScheduler personalizzato per monitorare le richieste di lavoro che devono essere eseguite in futuro. Viene utilizzato dallo scheduler in-process. (aosp/1203944)

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

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

  • Lo scheduler in-process ora utilizza API migliori per determinare il nome del processo. Ciò è utile per supportare meglio le app che utilizzano più processi. (aosp/1324732)

  • Nuove regole Lint che applicano:

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

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

  • È stato corretto 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 è stato 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. Ciò è utile per supportare meglio le app che utilizzano più processi. (aosp/1324732)

Versione 2.4.0-beta01

20 maggio 2020

androidx.work:work-gcm:2.4.0-beta01, androidx.work:work-runtime:2.4.0-beta01, androidx.work:work-runtime-ktx:2.4.0-beta01, androidx.work:work-rxjava2:2.4.0-beta01 e androidx.work:work-testing:2.4.0-beta01 sono stati rilasciati. La versione 2.4.0-beta01 contiene questi commit.

Correzioni di bug

  • È stato corretto un bug per cui ForegroundService non viene interrotto dopo l'interruzione di Worker in primo piano. (b/155579898, aosp/1302153)
  • È stato corretto un bug in 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 più strettamente alla piattaforma. (aosp/1312583)

Versione 2.4.0-alpha03

29 aprile 2020

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

Nuove funzionalità

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

Modifiche alle API

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

Correzioni di bug

Versione 2.4.0-alpha02

1° aprile 2020

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

Nuove funzionalità

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

Modifiche alle API

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

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

Correzioni di bug

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

Versione 2.4.0-alpha01

4 marzo 2020

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

Nuove funzionalità

  • Lo scheduler in-process di WorkManager è ora più potente. In precedenza, lo scheduler in-process prendeva in considerazione l'esecuzione solo del lavoro non ritardato e i cui vincoli erano soddisfatti. Ora, lo scheduler in-process monitora i WorkRequest che potrebbero essere eseguiti in futuro, inclusi i PeriodicWorkRequest. Lo scheduler in-process non rispetta i limiti di pianificazione (ma è comunque limitato alle dimensioni di Executor utilizzato da WorkManager). Ciò significa che l'applicazione ora può eseguire molte più WorkRequest quando è in primo piano. (aosp/1185778)

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

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

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

Modifiche alle API

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

  • Offrire la possibilità di aggiungere un RunnableScheduler personalizzato per monitorare i WorkRequest che devono essere eseguiti in futuro. Viene utilizzato dallo scheduler in-process. (aosp/1203944)

Correzioni di bug

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

Versione 2.3.4

Versione 2.3.4

18 marzo 2020

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

Correzioni di bug

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

Versione 2.3.3

Versione 2.3.3

4 marzo 2020

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

Correzioni di bug

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

Versione 2.3.2

Versione 2.3.2

19 febbraio 2020

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

Correzioni di bug

  • Risolve un problema per cui WorkManager supera il limite di 100 job in JobScheduler in rari casi. (aosp/1226859, b/149092520)
  • Correzione di una race condition in ConstraintControllers. (aosp/1220100)
  • È stato migliorato il ciclo di vita del servizio in primo piano di gestione per i worker a esecuzione prolungata. (aosp/1226295)
  • È stata migliorata la gestione dell'annullamento delle notifiche per i worker a esecuzione prolungata in caso di annullamento del worker. (aosp/1228346)

Versione 2.3.1

Versione 2.3.1

5 febbraio 2020

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

Correzioni di bug

  • Gestisci meglio il ciclo di vita degli Notification per gli Worker a lunga esecuzione che vengono eseguiti 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 di lint per garantire che venga specificato un foregroundServiceType in AndroidManifest.xml quando si utilizzano foregroundServiceType in ForegroundInfo. (aosp/1214207, b/147873061)

Versione 2.3.0

Versione 2.3.0

22 gennaio 2020

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

Modifiche importanti dalla versione 2.2.0

  • Supporto per lavori importanti o di lunga durata tramite ListenableWorker#setForegroundAsync().
  • Supporto per l'avanzamento worker tramite ListenableWorker#setProgressAsync().
  • WorkManager ora include regole lint aggiuntive nella libreria, il che aiuta a rilevare i bug in anticipo.

Versione 2.3.0-rc01

8 gennaio 2020

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

Questa release è identica a 2.3.0-beta02

Correzioni di bug

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

Versione 2.3.0-beta02

18 dicembre 2019

androidx.work:work-*:2.3.0-beta02 è stato 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 di lint che garantisce che il content provider androidx.work.impl.WorkManagerInitializer venga rimosso da AndroidManifest.xml quando si utilizza l'inizializzazione on demand. (aosp/1167007)
  • È stato aggiunto un avviso di lint quando enqueue() viene utilizzato per un PeriodicWorkRequest anziché per enqueueUniquePeriodicWork(). (aosp/1166032)

Modifiche alle API

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

Correzioni di bug

  • È stato corretto un bug nell'implementazione di AlarmManager per cui gli allarmi non venivano puliti correttamente. (aosp/1156444)
  • È stato corretto un bug per cui un elenco vuoto di WorkRequest causava la creazione di una catena WorkContinuation errata. (b/142835274, aosp/1157051)

Modifiche alle dipendenze

  • WorkManager ora utilizza Room 2.2.2.

Versione 2.3.0-beta01

20 novembre 2019

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

Nuove funzionalità

  • È stata aggiunta una nuova regola di lint che impedisce agli sviluppatori di commettere errori dovuti all'implementazione errata di androidx.work.Configuration.Provider quando si utilizza l'inizializzazione on demand. aosp/1164559

Versione 2.3.0-alpha03

23 ottobre 2019

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

Nuove funzionalità

  • È stata aggiunta l'API WorkManager.createCancelPendingIntent(), che semplifica l'annullamento delle WorkRequest senza dover registrare un altro componente in AndroidManifest.xml. Questa API semplifica in particolare l'annullamento degli WorkRequest dagli Notification. Prevediamo che questa funzionalità venga abbinata 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 essere più coerente con le API della piattaforma sottostante. (b/142729893, aosp/1143316)

Correzioni di bug

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

Versione 2.3.0-alpha02

9 ottobre 2019

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

Nuove funzionalità

  • WorkManager ora supporta l'esecuzione di attività importanti o di lunga durata che devono essere mantenute attive dal sistema operativo. Per saperne di più, consulta 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

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

Versione 2.3.0-alpha01

22 agosto 2019

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

Nuove funzionalità

  • Ora gli ListenableWorker possono impostare l'avanzamento tramite l'API setProgressAsync(). Inoltre, è stata aggiunta un'API suspend-ing setProgress corrispondente in CoroutineWorker e un setProgress in RxWorker che restituisce un Single<Void>. Con queste nuove API, i lavoratori possono comunicare le informazioni sullo stato di avanzamento tramite WorkInfo, che ha un'API getProgress corrispondente. (b/79481554)
  • Data dispone di un'API containsKey() che può essere utilizzata per verificare che i dati di input di Workers abbiano chiavi con il tipo previsto. (b/117136838)
  • Ora Data può essere serializzato utilizzando Data.toByteArray() e Data.fromByteArray(). Tieni presente che non esistono garanzie di controllo delle versioni con Data, pertanto non devi renderlo persistente o utilizzarlo per la comunicazione interprocesso tra le applicazioni. Possono essere utilizzati in modo sicuro 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)
  • Aggiornamenti della documentazione relativi all'annullamento di ListenableFuture e al callback onStopped() in ListenableWorker. (b/138413671)

Correzioni di bug

  • Lo scheduler in-process ora ignora gli WorkRequest con il vincolo idle. Queste richieste ora vengono rilevate solo da JobScheduler quando il dispositivo è effettivamente idle. (aosp/1089779)
  • TestScheduler ora utilizza correttamente Executor specificato per il proprio esecutore di attività interno nei test. (aosp/1090749)

Versione 2.2.0

Versione 2.2.0

15 agosto 2019

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

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

Modifiche importanti nella versione 2.2.0 rispetto alla 2.1.0

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

Versione 2.2.0-rc01

30 luglio 2019

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

Correzioni di bug

  • È stato corretto un bug nell'implementazione di AlarmManager che causa l'arresto anomalo prematuro del servizio e, in rari casi, un RejectedExecutionException. (aosp/1092374) (b/138238197).
  • È stata aggiunta una soluzione alternativa per un NullPointerException quando si utilizzano le 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 è stato rilasciato. I commit inclusi in questa versione sono disponibili qui.

Correzioni di bug

  • 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 è stato rilasciato. I commit inclusi in questa versione sono disponibili qui.

Nuove funzionalità

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

Correzioni di bug

  • Correzione di 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 è stato rilasciato. Questa release è identica a androidx.work:work-*:2.1.0-rc01.

Modifiche importanti dalla versione 2.0.1

  • work-runtime-ktx ora richiede Java 8. Se riscontri problemi, puoi aggiungere quanto segue al tuo build.gradle: kotlinOptions { jvmTarget = "1.8" }
  • È stata aggiunta l'inizializzazione on demand per WorkManager, che creerà WorkManager solo quando viene fatto riferimento. b/127497100 Per configurare il progetto per l'inizializzazione on demand:
    1. Disattiva l'inizializzatore automatico.
    2. Implementa Configuration.Provider sull'oggetto Application personalizzato.
    3. Modifica tutti i riferimenti a WorkManager.getInstance() in WorkManager.getInstance(Context). Nell'ambito di questa modifica, abbiamo ritirato WorkManager.getInstance(). È sempre più sicuro chiamare la nuova sostituzione di WorkManager.getInstance(Context), anche se non esegui l'inizializzazione on demand.
  • 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 a uno o più WorkerFactory registrati utilizzando DelegatingWorkerFactory. b/131435993
  • È stata aggiunta la possibilità di personalizzare Executor utilizzato da WorkManager per tutta la sua contabilità interna tramite Configuration.Builder.setTaskExecutor.
  • È stata aggiunta la possibilità di creare classi Worker e ListenableWorker testabili con unit test utilizzando TestWorkerBuilder e TestListenableWorkerBuilder nell'artefatto work-testing.
    • Tieni presente che work-testing ora incorpora Kotlin come dipendenza e include diverse estensioni Kotlin per impostazione predefinita.
  • È stato aggiunto il conteggio dei tentativi di esecuzione a WorkInfo. b/127290461
  • I tipi Data ora possono archiviare e recuperare byte e array di byte. Questa operazione NON modifica la dimensione massima degli oggetti Data.
  • WorkManager ora dipende da Room 2.1.0, il che dovrebbe risolvere alcuni problemi del database.

Versione 2.1.0-rc01

27 giugno 2019

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

Correzioni di bug

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

Versione 2.1.0-beta02

20 giugno 2019

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

Correzioni di bug

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

Versione 2.1.0-beta01

13 giugno 2019

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

Correzioni di bug

  • WorkManager ora dipende da Room 2.1.0, il che dovrebbe risolvere alcuni problemi del database.
  • Rimozione di alcune operazioni di I/O del disco di avvio sul thread principale.
  • È stato corretto un potenziale deadlock nel monitoraggio dei vincoli. b/134361006
  • Annullamento preventivo dei job non validi attribuiti a WorkManager. b/134058261
  • Sono state aggiunte alcune chiamate difensive alle API JobScheduler per i dispositivi che non funzionano correttamente.

Versione 2.1.0-alpha03

5 giugno 2019

androidx.work:*:2.1.0-alpha03 è stato rilasciato.

Correzioni di bug

  • Documentazione migliorata per i PeriodicWorkRequest.
  • WorkManagerTestInitHelper ora utilizza l'executor in background corretto per i test.
  • Correzioni per i problemi di SQLite quando si gestiscono transazioni di grandi dimensioni su alcuni dispositivi. (b/130182503)
  • Le dipendenze di WorkManager ora sono più granulari. (b/133169148).
  • Soluzione alternativa per bug specifici dell'OEM nell'implementazione di JobScheduler durante la pianificazione dei job utilizzando WorkManager.
  • Miglioramenti dello scheduler basato su AlarmManager relativi alla durata dei servizi che in precedenza causavano arresti anomali rari. (b/133313734)

Versione 2.1.0-alpha02

16 maggio 2019

È stata rilasciata la versione 2.1.0-alpha02 di WorkManager. Questa versione contiene diverse nuove API.

Modifiche alle API

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

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

  • È stata aggiunta la possibilità di personalizzare Executor utilizzato da WorkManager per tutta la sua contabilità interna 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

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

Modifiche alle API

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

Versione 2.0.1

Versione 2.0.1

9 aprile 2019

È stata rilasciata WorkManager 2.0.1. Questa release è identica alla 2.0.1-rc01.

Versione 2.0.1-rc01

3 aprile 2019

È stata rilasciata la versione 2.0.1-rc01 di WorkManager. Questa versione contiene alcune correzioni di bug. Per gli utenti della versione 1.x precedente, alcune di queste modifiche vengono visualizzate anche nella versione 1.0.1-rc01.

Correzioni di bug

  • I test Robolectric ora funzionano correttamente con WorkManager. b/122553577
  • È stato corretto un arresto anomalo in un caso limite in cui il monitoraggio dei vincoli non veniva pulito nelle API pre-JobScheduler. b/129226383
  • È stato corretto un StackOverflowError relativo a lunghe catene di lavoro. b/129091233
  • È stata aggiornata la documentazione per PeriodicWorkRequest per indicare che il tempo flessibile non è supportato nell'API 23.
  • Sono stati corretti alcuni link non funzionanti nella documentazione di Kotlin.

Versione 2.0.0

Versione 2.0.0

20 marzo 2019

È stata rilasciata la versione 2.0.0 di WorkManager. Questa versione è identica alla 2.0.0-rc01 ed è la versione AndroidX della 1.0.0 stabile con dipendenze AndroidX. Ti consigliamo di scegliere come target questa versione anziché le versioni 1.x precedenti. Tutto lo sviluppo attivo avrà come target la versione 2.x e la versione 1.x riceverà solo correzioni di bug critici per un periodo di tempo limitato.

Versione 2.0.0-rc01

7 marzo 2019

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

Dipendenze pre-AndroidX

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

Alla moda

dependencies {
    def work_version = "1.0.1"

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

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

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

Kotlin

dependencies {
    val work_version = "1.0.1"

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

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

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

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

Versione 1.0.1

Versione 1.0.1

9 aprile 2019

È stata rilasciata WorkManager 1.0.1. Questa release è identica alla 1.0.1-rc01.

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

Versione 1.0.1-rc01

2 aprile 2019

È stata rilasciata la versione 1.0.1-rc01 di WorkManager. Questa versione contiene alcune correzioni di bug.

Correzioni di bug

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

Versione 1.0.0

Versione 1.0.0

5 marzo 2019

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

Versione 1.0.0-rc02

21 febbraio 2019

Questo è il secondo candidato per la release stabile 1.0.0 di WorkManager. Questa release contiene due correzioni di bug.

Correzioni di bug

  • Ora le Worker sono pianificate correttamente dopo un arresto anomalo dell'applicazione. b/124546316

  • Worker che generano un Exception non controllato ora sono contrassegnati correttamente come FAILED e non causano più l'arresto anomalo del processo dell'app.

Versione 1.0.0-rc01

14 febbraio 2019

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

Correzioni di bug

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

Versione 1.0.0-beta05

6 febbraio 2019

Questa release contiene alcune correzioni di bug.

Correzioni di bug

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

Versione 1.0.0-beta04

4 febbraio 2019

Questa release contiene alcune correzioni di bug.

Correzioni di bug

  • Pianificazione migliorata di PeriodicWork per l'implementazione basata su AlarmManager.
  • È stato corretto un caso in cui WorkManager non riusciva a monitorare correttamente i vincoli quando utilizzava l'implementazione basata su AlarmManager. b/123379508
  • È stato corretto un caso in cui WorkManager non riusciva a riprovare a eseguire il lavoro in caso di interruzione del processo quando si utilizzava l'implementazione basata su AlarmManager. b/123329850
  • È stato risolto un caso che causava la perdita di Wakelock da parte di WorkManager quando si utilizzava l'implementazione basata su AlarmManager.

Versione 1.0.0-beta03

25 gennaio 2019

Questa release contiene alcune correzioni di bug.

Correzioni di bug

  • Abbiamo introdotto una regressione 1.0.0-beta02 che in alcune situazioni impediva l'esecuzione corretta del lavoro. b/123211993
  • È stato risolto un problema per cui il backoff non veniva rispettato correttamente. b/122881597
  • È stato corretto un ConcurrentModificationException sui dispositivi con Android 5.1 (API o) o versioni precedenti. Si tratta di un proseguimento della correzione in 1.0.0-beta02. b/121345393
  • È stato aggiunto exported=false per alcuni componenti del nostro manifest a cui mancava questa annotazione.
  • Sono state incluse informazioni su come WorkManager interagisce con il sistema operativo nella documentazione a livello di pacchetto.

Versione 1.0.0-beta02

15 gennaio 2019

Questa release contiene alcune correzioni di bug.

Correzioni di bug

  • È stato corretto un caso limite in cui il lavoro periodico poteva essere eseguito più di una volta per intervallo sui dispositivi con Android 6.0 (livello API 23). b/121998363
  • È stato corretto un ConcurrentModificationException sui dispositivi con Android 5.1 (livello API 22) o versioni precedenti. b/121345393
  • È stata corretta l'esecuzione errata del lavoro quando i vincoli non vengono soddisfatti sui dispositivi con Android 5.1 (livello API 22) o versioni precedenti. b/122578012
  • Gestione ottimizzata del completamento del lavoro per essere più veloce in alcuni casi limite. b/122358129
  • È stata aggiunta una modifica per risolvere potenziali condizioni di competizione tra più istanze di LiveData utilizzate da WorkManager.
  • È stato eseguito il passaggio all'utilizzo della dipendenza Room 1.1.1 anziché 1.1.1-rc01; queste versioni sono identiche. b/122578011

Versione 1.0.0-beta01

19 dicembre 2018

Questa release non contiene modifiche all'API. In futuro, è previsto che WorkManager rimanga stabile fino alla versione successiva, a meno che non si verifichi un problema critico. Questa release contiene alcune correzioni di bug.

Correzioni di bug

  • I job secondari annullati in precedenza di un job principale completato correttamente non verranno più eseguiti. b/120811767
  • Classi di logging inizializzate correttamente (visualizzate principalmente durante i test).

Versione 1.0.0-alpha13

12 dicembre 2018

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

Modifiche alle API

  • androidx.work.Result è stato spostato per diventare una classe interna di ListenableWorker. In questo modo si evitano conflitti di refactoring con la classe Result di primo livello di Kotlin. Si tratta di una modifica che causa interruzioni dell'API. b/120564418

Modifiche all'API che causano interruzioni

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

Versione 1.0.0-alpha12

5 dicembre 2018

Questa release contiene alcune modifiche che provocano errori dell'API. Consulta la sezione Modifiche che provocano errori dell'API di seguito. È probabile che questa versione venga rilasciata come prima beta. alpha12 contiene anche aggiornamenti dettagliati della documentazione.

Modifiche alle API

  • Un nuovo artefatto, work-rxjava2, introduce RxWorker. Si tratta di un ListenableWorker che prevede un Single<Payload>.
  • Il supporto di Firebase JobDispatcher è stato rimosso a causa della sua imminente deprecazione. Ciò significa che l'artefatto work-firebase non verrà più aggiornato man mano che ci avviciniamo alla beta. In futuro valuteremo la possibilità di aggiungere un'alternativa.
  • Payload combinato in Result. Result ora è una "classe sigillata" con tre implementazioni concrete, che puoi ottenere tramite Result.success() (o Result.success(Data)), Result.failure() (o Result.failure(Data)) e Result.retry(). Il tuo ListenableFuture ora restituisce Result anziché Payload. Worker non hanno metodi getter e setter per l'output Data. Questa è una modifica che provoca un errore.
  • Sono stati aggiunti Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit) e Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit) e le relative varianti per supportare meglio gli URI dei contenuti con attivazione lenta. b/119919774
  • Aggiunta la variante WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration). Questo metodo richiede l'API 26.
  • Sono stati aggiunti i metodi di estensione Kotlin Operation.await() e ListenableFuture.await().
  • Operation.getException() è stato rinominato in Operation.getThrowable(). Questa è una modifica che provoca un errore.
  • La classe ContentUriTriggers e i metodi che vi fanno riferimento non sono più disponibili per l'utilizzo pubblico. Questa è una modifica che provoca un errore.
  • Sono stati rimossi gli altri metodi varargs in WorkManager, WorkContinuation e OneTimeWorkRequest per semplificare l'API. Per risolvere eventuali problemi di compilazione, puoi racchiudere i varargs esistenti con Arrays.asList(...). Continuiamo a includere versioni a un solo argomento di ogni metodo. Si tratta di una modifica che causa interruzioni.
  • WorkContinuation.combine(OneTimeWorkRequest, *) varianti rimosse. Stavano presentando un'API confusa; i metodi combine esistenti sono più comprensibili. Si tratta di una modifica che causa interruzioni.

Correzioni di bug

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

Modifiche all'API che causano interruzioni

  • Il supporto di Firebase JobDispatcher è stato rimosso a causa della sua imminente deprecazione. Ciò significa che l'artefatto work-firebase non verrà più aggiornato man mano che ci avviciniamo alla beta. In futuro valuteremo l'aggiunta di un'alternativa.
  • Payload combinato in Result. Result ora è una "classe sigillata" con tre implementazioni concrete, che puoi ottenere tramite Result.success() (o Result.success(Data)), Result.failure() (o Result.failure(Data)) e Result.retry(). Il tuo ListenableFuture ora restituisce Result anziché Payload. Worker non hanno metodi getter e setter per l'output Data.
  • Sono stati aggiunti i metodi di estensione Kotlin Operation.await() e ListenableFuture.await().
  • Operation.getException() è stato rinominato in Operation.getThrowable().
  • La classe ContentUriTriggers e i metodi che vi fanno riferimento non sono più disponibili per l'utilizzo pubblico.
  • Sono stati rimossi gli altri metodi varargs in WorkManager, WorkContinuation e OneTimeWorkRequest per semplificare l'API. Per risolvere eventuali problemi di compilazione, puoi racchiudere i varargs esistenti con Arrays.asList(...). Continuiamo a includere versioni a un solo argomento di ogni metodo.
  • WorkContinuation.combine(OneTimeWorkRequest, *) varianti rimosse. Stavano 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 stabili il giorno beta. In questa release sono presenti modifiche all'API che provocano un errore. Consulta la sezione Modifiche all'API che provocano un errore di seguito.

Modifiche alle API

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

Correzioni di bug

  • Gli WorkRequest.Builder nell'artefatto work-runtime-ktx ora utilizzano gli ListenableWorker. Correzione di b/117666259
  • Assicurati che l'ora della prossima esecuzione per PeriodicWork sia nel futuro. Correzioni b/118204399
  • Rimuovi il potenziale I/O del disco all'avvio dell'app quando utilizzi WorkManager. Correzioni b/117796731
  • Correzione di una race condition in WorkConstraintsTracker. Correzioni android-workmanager/issues/56

Modifiche all'API che causano interruzioni

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

Versione 1.0.0-alpha10

11 ottobre 2018

Questa release supporta il lavoro asincrono controllato dagli sviluppatori. In questa release sono presenti modifiche all'API che provocano un errore. Consulta la sezione Modifiche all'API che provocano un errore di seguito.

Prevediamo che WorkManager stia entrando nelle fasi finali del periodo alpha. Prevediamo che l'API sia stabile nella versione beta, quindi ti invitiamo a dedicare un po' di tempo a inviare il tuo feedback 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 dell'API che causa interruzioni.
  • NonBlockingWorker è stato rinominato ListenableWorker, che ora è una classe pubblica non nascosta e pronta per l'uso.
    • ListenableWorker fornisce l'accesso a un metodo astratto, ListenableFuture<Payload> onStartWork(), che viene chiamato sul thread principale. Spetta a te avviare ed elaborare il lavoro in modo asincrono. Al termine, aggiorna ListenableFuture in modo appropriato. Le implementazioni di riferimento di ListenableFuture sono fornite nel pacchetto Futures in alpha02 (vedi la sezione WorkManager di seguito).
    • Worker estende ListenableWorker e funziona ancora come prima, con un metodo astratto Result doWork().
    • Sono stati spostati alcuni metodi e membri da Worker a ListenableWorker.
    • A breve forniremo implementazioni di riferimento per ListenableWorker che utilizzano le coroutine Kotlin (una volta rilasciate le versioni stabili) e RxJava2.
  • L'interfaccia WorkerFactory e l'implementazione concreta DefaultWorkerFactory sono state unite in una classe astratta chiamata WorkerFactory. L'implementazione garantisce che il comportamento predefinito basato sulla reflection venga chiamato come ultimo tentativo per qualsiasi istanza WorkerFactory creata dall'utente. Questa è una modifica che provoca un errore.
  • Sono stati rimossi WorkManager.synchronous() e WorkContinuation.synchronous() e tutti i metodi correlati. È stato aggiunto ListenableFuture<Void> come tipo restituito di molti metodi nell'API. Questa è una modifica che provoca un errore dell'API.
    • Ora puoi ottenere e osservare in modo sincrono utilizzando ListenableFuture. Ad esempio, WorkManager.enqueue() restituiva void, ora restituisce ListenableFuture<Void>. Puoi chiamare ListenableFuture.addListener(Runnable, Executor) o ListenableFuture.get() per eseguire il codice una volta completata l'operazione.
    • Tieni presente che questi ListenableFuture non indicano se l'operazione è riuscita o meno, ma solo che è stata completata. Per trovare queste informazioni, dovrai comunque concatenare i metodi WorkManager.
    • Ignoriamo le chiamate cancel() su questi oggetti, in quanto sono confuse e difficili da interpretare (stai annullando l'operazione o il lavoro risultante?). Ciò rientra nel contratto di Future.
    • Per mantenere la parità con i metodi sincroni getStatus*, abbiamo fornito varianti ListenableFuture e rinominato quelle esistenti che restituivano LiveData in modo che includano esplicitamente "LiveData" nel nome (ad esempio, getStatusesByIdLiveData(UUID)). Si tratta di una modifica dell'API che causa interruzioni.

Correzioni di bug

  • È stato risolto il problema noto della versione alpha09 relativo ai file androidx-annotations.pro duplicati. Puoi rimuovere la soluzione alternativa dalle note di rilascio precedenti eliminando exclude 'META-INF/proguard/androidx-annotations.pro' dal file gradle.
  • Sono state aggiunte configurazioni Proguard per mantenere il nuovo costruttore Worker. b/116296569
  • Correzione di un potenziale NullPointerException in una race condition 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

Modifiche all'API che causano interruzioni

  • 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 chiamata WorkerFactory.
  • Rimossi WorkManager.synchronous() e WorkContinuation.synchronous().
  • I metodi WorkManager.getStatus*() ora restituiscono ListenableFuture. WorkManager.getStatus*LiveData() restituisce LiveData.

Versione 1.0.0-alpha09

19 settembre 2018

Problema noto

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

Alla moda

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

Kotlin

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

Correzioni di bug

  • È stata aggiunta un'altra correzione necessaria per l'errore "100 job". b/115560696
  • Sono state aggiunte alcune correzioni per gli errori di vincolo di chiave esterna dovuti a race condition. b/114705286
  • Chiamate delegate ConstraintTrackingWorker.onStopped(boolean) al Worker sottostante. b/114125093
  • Applica il ritardo di backoff minimo corretto per Firebase JobDispatcher. b/113304626
  • Il threading migliorato garantisce l'accesso interno alla libreria.
  • È stato corretto un potenziale problema di deduplicazione di LiveData internamente.

Modifiche alle API

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

Modifiche che provocano errori

  • I costruttori Worker e NonBlockingWorker predefiniti sono ritirati. 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 WorkManager etichettati in modo esplicito come non compatibili con l'avvio diretto, in modo che non vengano avviati durante l'avvio diretto. In futuro, forniremo una versione di WorkManager compatibile con l'avvio diretto. b/112665532
  • Risolto un problema per cui il lavoro ripetuto non veniva eseguito. b/112604021
  • È stato risolto il problema relativo all'esecuzione ripetuta di attività periodiche (correlato al problema precedente). b/112859683
  • Vengono rispettate le norme di backoff quando il processo dell'app è già in esecuzione.
  • Sono stati corretti i messaggi di eccezione in Data per indicare che il limite è di 10 KB.
  • Il valore massimo di Configuration.setMaxSchedulerLimit(int) è stato ridotto a 50 per tenere conto di una certa latenza nel completamento dell'elaborazione di JobScheduler. b/112817355

Versione 1.0.0-alpha07

16 agosto 2018

Correzioni di bug

  • È stata corretta una potenziale query SQL con limiti negativi che potrebbe restituire un numero illimitato di risultati.
  • Il lavoro che ha terminato l'esecuzione ora annulla correttamente tutte le copie in attesa di questo lavoro in altri Schedulers. Ciò ha comportato il superamento del limite di JobScheduler job. b/111569265
  • È stato corretto un ConcurrentModificationException 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 offre un nuovo corso, NonBlockingWorker. Ciò non influisce sull'utilizzo attuale. 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: è stato ritirato Map.toWorkData() ed è stato aggiunto un workDataOf(vararg Pair<String, Any?>) di primo livello per una maggiore coerenza con le API esistenti.

Versione 1.0.0-alpha06

1 agosto 2018

Correzioni di bug

  • Evita il blocco del database durante la pianificazione del lavoro. b/111801342
  • È stato corretto un bug che impedisce l'esecuzione di PeriodicWork in base alla pianificazione quando è attiva la modalità Doze. b/111469837
  • È stata corretta una race condition durante il monitoraggio dei vincoli che causa l'arresto anomalo di WorkManager. googlecodelabs/android-workmanager/issues/56
  • Crea WorkRequest unici 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 è annotato con @NonNull anziché @Nullable. Se il singleton non viene inizializzato correttamente nei casi di inizializzazione manuale, il metodo genererà un IllegalStateException. Si tratta di una modifica dell'API che causa interruzioni.
  • È stata aggiunta una nuova API, Configuration.Builder.setMinimumLoggingLevel(int), che può controllare la verbosità di WorkManager. Per impostazione predefinita, WorkManager registra i log Log.INFO e versioni successive.
  • Modificata la firma di Data.getString() in modo che non accetti più un valore predefinito (è implicitamente null). Si tratta di una modifica che causa interruzioni dell'API.
  • Alcuni metodi necessari solo per l'utilizzo interno sono stati contrassegnati come @hide. Sono inclusi il costruttore Constraints, Data.toByteArray() e Data.fromByteArray(byte[]). Questa è una modifica che provoca un errore dell'API.

Correzioni di bug

  • WorkManager non esegue più il lavoro durante i casi noti di backup automatico. Ciò potrebbe aver causato un arresto anomalo. b/110564377
  • È stata corretta la doppia programmazione di PeriodicWorkRequest quando si utilizza JobScheduler. b/110798652
  • È stato risolto un problema relativo all'esecuzione errata di PeriodicWorkRequest dopo la sospensione del dispositivo. b/111469837
  • Risolto un problema relativo ai ritardi iniziali durante l'utilizzo di Firebase JobDispatcher. b/111141023
  • Sono stati corretti alcuni potenziali problemi di race condition e di sincronizzazione.
  • Liberato correttamente lo spazio di archiviazione di BroadcastReceiver che non erano più necessari.
  • Prestazioni di riprogrammazione ottimizzate quando le app vengono riavviate dopo essere state chiuse forzatamente.
  • Consente di chiamare TestScheduler.setAllConstraintsMet(UUID) prima o dopo l'accodamento di WorkRequest specificato. b/111238024

Modifiche che provocano errori

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

Versione 1.0.0-alpha04

26 giugno 2018

Correzioni di bug

  • Ora i PeriodicWorkRequest vengono riprogrammati correttamente quando si utilizza l'implementazione basata su AlarmManager.
  • È stato corretto un potenziale errore ANR durante la riprogrammazione di tutti i worker dopo un arresto forzato o un riavvio. b/110507716
  • Sono state aggiunte annotazioni per il 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
  • Sono state consentite migrazioni distruttive del database nel caso in cui tu decida di eseguire il rollback a una versione precedente di WorkManager. b/74633270
  • È stato risolto un arresto anomalo della migrazione se vengono creati tag impliciti duplicati. Si tratta di un problema molto raro che si è verificato solo se hai utilizzato lo stesso formato di tag implicito.

Versione 1.0.0-alpha03

19 giugno 2018

Correzioni di bug

  • È stata corretta una race condition nell'implementazione basata su AlarmManager. b/80346526.

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

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

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

  • È stato corretto un arresto anomalo durante il reinserimento in coda di un WorkRequest. b/109572353.

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

  • WorkManager ora utilizza la versione Room 1.1.1-rc1.

Modifiche alle API

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

Modifiche al comportamento

  • È stato aggiunto un tag implicito per tutti i WorkRequest, ovvero il nome completo della classe per Worker. Ciò consente di rimuovere WorkRequest senza tag o quando id non è disponibile. b/109572351

Modifiche che provocano errori

  • Worker.WorkerResult è stato rinominato in Worker.Result.
  • Worker.onStopped ora ha un parametro aggiuntivo isCancelled impostato sutrue quando Worker è stato annullato in modo esplicito.

Versione 1.0.0-alpha02

24 maggio 2018

Correzioni di bug

  • È stato corretto un NullPointerException il giorno State.isFinished(). b/79550068
  • È stato risolto un problema che causava la riprogrammazione delle Worker il giorno Application.onCreate(). b/79660657
  • È stato risolto un problema a causa del quale era possibile pianificare più lavoro di quanto consentito dal sistema operativo. b/79497378
  • Lo svuotamento dei wake lock associati a Worker è stato spostato nel thread in background.
  • L'implementazione di AlarmManager ora esegue la pulizia correttamente al termine di tutto il lavoro in attesa.
  • Sono state corrette le query SQL di pulizia che interessavano le impostazioni internazionali non inglesi. b/80065360
  • È stato aggiunto il supporto per i float in Data. b/79443878
  • Data.Builder.putAll() ora restituisce un'istanza di Builder. b/79699162
  • Altre javadoc e correzioni nella documentazione. b/79691663

Modifiche alle API

  • Worker possono reagire all'interruzione. Worker.isStopped() può essere utilizzato per verificare se un Worker è stato interrotto. Worker.onStopped() può essere utilizzato per eseguire operazioni di pulizia leggere.
  • L'API Worker.getTags() restituisce un Set di tag associati a Worker.
  • Sono stati aggiunti overload javax.time.Duration per le API che accettano una combinazione di durata e TimeUnit. Questo è protetto da @RequiresApi(26).
  • WorkManager estensioni 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 descrittore Configuration.setExecutor().

Versione 1.0.0-alpha01

8 maggio 2018

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