Ciclo di vita

I componenti sensibili al ciclo di vita eseguono azioni in risposta a una modifica dello stato del ciclo di vita di un altro componente, come attività e frammenti. Questi componenti ti aiutano a produrre codice meglio organizzato e spesso più leggero, più facile da mantenere.

Questa tabella elenca tutti gli artefatti nel gruppo androidx.lifecycle.

Elemento Release stabile Candidato per la release Versione beta Alpha Release
lifecycle-* 2.9.1 - - -
lifecycle-viewmodel-navigation3 - - - 1.0.0-alpha03
Ultimo aggiornamento di questa raccolta: 2 luglio 2025

Dichiarazione di dipendenze

Per aggiungere una dipendenza da Lifecycle, devi aggiungere il repository Maven di Google al tuo progetto. Per saperne di più, consulta il repository Maven di Google.

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

Kotlin

Groovy

    dependencies {
        def lifecycle_version = "2.9.1"
        def arch_version = "2.2.0"

        // ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
        // ViewModel utilities for Compose
        implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version"
        // LiveData
        implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
        // Lifecycles only (without ViewModel or LiveData)
        implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"
        // Lifecycle utilities for Compose
        implementation "androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version"

        // Saved state module for ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version"

        // ViewModel integration with Navigation3
        implementation "androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha03"

        // Annotation processor
        kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version"

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version"

        // optional - ReactiveStreams support for LiveData
        implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version"

        // optional - Test helpers for LiveData
        testImplementation "androidx.arch.core:core-testing:$arch_version"

        // optional - Test helpers for Lifecycle runtime
        testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version"
    }
    

Kotlin

    dependencies {
        val lifecycle_version = "2.9.1"
        val arch_version = "2.2.0"

        // ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version")
        // ViewModel utilities for Compose
        implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version")
        // LiveData
        implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version")
        // Lifecycles only (without ViewModel or LiveData)
        implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version")
        // Lifecycle utilities for Compose
        implementation("androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version")

        // Saved state module for ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version")

        // ViewModel integration with Navigation3
        implementation("androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha03")

        // Annotation processor
        kapt("androidx.lifecycle:lifecycle-compiler:$lifecycle_version")
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version")

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version")

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version")

        // optional - ReactiveStreams support for LiveData
        implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version")

        // optional - Test helpers for LiveData
        testImplementation("androidx.arch.core:core-testing:$arch_version")

        // optional - Test helpers for Lifecycle runtime
        testImplementation ("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version")
    }
    

Java

Groovy

    dependencies {
        def lifecycle_version = "2.9.1"
        def arch_version = "2.2.0"

        // ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
        // LiveData
        implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
        // Lifecycles only (without ViewModel or LiveData)
        implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version"

        // Saved state module for ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version"

        // Annotation processor
        annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version"

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version"

        // optional - ReactiveStreams support for LiveData
        implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version"

        // optional - Test helpers for LiveData
        testImplementation "androidx.arch.core:core-testing:$arch_version"

        // optional - Test helpers for Lifecycle runtime
        testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version"
    }
    

Kotlin

    dependencies {
        val lifecycle_version = "2.9.1"
        val arch_version = "2.2.0"

        // ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version")
        // LiveData
        implementation("androidx.lifecycle:lifecycle-livedata:$lifecycle_version")
        // Lifecycles only (without ViewModel or LiveData)
        implementation("androidx.lifecycle:lifecycle-runtime:$lifecycle_version")

        // Saved state module for ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version")

        // Annotation processor
        annotationProcessor("androidx.lifecycle:lifecycle-compiler:$lifecycle_version")
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version")

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version")

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version")

        // optional - ReactiveStreams support for LiveData
        implementation("androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version")

        // optional - Test helpers for LiveData
        testImplementation("androidx.arch.core:core-testing:$arch_version")

        // optional - Test helpers for Lifecycle runtime
        testImplementation("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version")
    }
    

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 libreria. Prima di crearne uno nuovo, dai un'occhiata ai problemi esistenti in questa libreria. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.

Creare un nuovo problema

Per ulteriori informazioni, consulta la documentazione di Issue Tracker.

Lifecycle ViewModel Navigation3 versione 1.0.0

Versione 1.0.0-alpha03

2 luglio 2025

androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha03 e androidx.lifecycle:lifecycle-viewmodel-navigation3-android:1.0.0-alpha03 sono stati rilasciati. La versione 1.0.0-alpha03 contiene questi commit.

Modifiche alle dipendenze

Versione 1.0.0-alpha02

18 giugno 2025

androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha02 e androidx.lifecycle:lifecycle-viewmodel-navigation3-android:1.0.0-alpha02 sono stati rilasciati. La versione 1.0.0-alpha02 contiene questi commit.

Aggiornamenti delle dipendenze

Versione 1.0.0-alpha01

23 maggio 2025

androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha01 viene ritirata. La versione 1.0.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Lifecycle ViewModel Navigation3 è una nuova libreria creata insieme a Navigation3 per fornire integrazioni con ViewModels. L'artefatto androidx.lifecycle:lifecycle-viewmodel-navigation3 fornisce l'ViewModelStoreNavEntryDecorator, che fornisce un ViewModelStoreOwner univoco per i contenuti di ogni NavEntry. Fornisce anche un rememberViewModelStoreNavEntryDecorator() per garantire che il decoratore venga gestito correttamente dalle modifiche alla configurazione.
val viewModelDecorator = rememberViewModelStoreNavEntryDecorator()

NavDisplay(
  ,
  entryDecorators =
  listOf(
    rememberSceneSetupNavEntryDecorator(),
    rememberSavedStateNavEntryDecorator(),
    viewModelDecorator
  )
)

Versione 2.9

Versione 2.9.1

4 giugno 2025

androidx.lifecycle:lifecycle-*:2.9.1 viene ritirata. La versione 2.9.1 contiene questi commit.

Correzioni di bug

  • Correzione degli stati SavedStateHandle.remove(key) che non vengono cancellati SavedStateHandle.getMutableStateFlow(key). (d5f939, b/418746333)

Versione 2.9.0

7 maggio 2025

androidx.lifecycle:lifecycle-*:2.9.0 viene ritirata. La versione 2.9.0 contiene questi commit.

Modifiche importanti dalla versione 2.8.0

  • È disponibile un nuovo artefatto KMP androidx.lifecycle:lifecycle-viewmodel-testing che fornisce una classe ViewModelScenario per testare ViewModels in isolamento, con supporto per onCleared e SavedStateHandle, nonché per testare l'interruzione e la ricreazione del processo tramite recreate().
  • Aggiungi getMutableStateFlow a SavedStateHandle per restituire un MutableStateFlow. Questa nuova funzione è esclusiva per le chiavi e non può essere utilizzata con getLiveData. Se provi a utilizzarli entrambi per accedere allo stesso stato, verrà generata un'eccezione.
  • CreationExtras ora include sovraccarichi di operatori simili a mappe per consentire la manipolazione idiomatica dei contenuti in Kotlin. Consente l'utilizzo di in, += e + con CreationExtras.

Supporto della serializzazione KotlinX

  • Con il supporto di KotlinX Serialization aggiunto in SavedState 1.3.0, abbiamo introdotto saved, un delegato di proprietà lazy, per semplificare l'archiviazione delle classi @Serializable in un SavedStateHandle e il ripristino automatico di queste classi in caso di interruzione e ricreazione del processo. Tieni presente che il delegato saved è pigro e non chiamerà la lambda init né salverà nulla in SavedStateHandle finché non viene eseguito l'accesso.

    @Serializable
    data class Person(val firstName: String, val lastName: String)
    
    class MyViewModel(handle: SavedStateHandle) : ViewModel() {
        var person by handle.saved { Person("John", "Doe") }
    
        fun onPersonChanged(person: Person) {
            this.person = person
        }
    }
    

Kotlin Multiplatform

  • Il modulo lifecycle-testing ora è compatibile con KMP, incluse API come TestLifecycleOwner.
  • Il modulo lifecycle-viewmodel-savedstate ora è compatibile con KMP, incluse API come SavedStateHandle.
  • androidx.compose.ui.platform.LocalLifecycleOwner è ora disponibile nel set di origini comuni.
  • NewInstanceFactory è ora disponibile su JVM Desktop e Android.

Modifiche al comportamento

  • Lo stato Lifecycle.DESTROYED è terminale e qualsiasi tentativo di spostare un Lifecycle da questo stato a un altro ora comporterà un IllegalStateException.
  • SavedStateHandle non include più SavedStateProvider.saveState() in cui Bundle restituito è vuoto.

Versione 2.9.0-rc01

23 aprile 2025

androidx.lifecycle:lifecycle-*:2.9.0-rc01 viene ritirata. La versione 2.9.0-rc01 contiene questi commit.

Versione 2.9.0-beta01

9 aprile 2025

androidx.lifecycle:lifecycle-*:2.9.0-beta01 viene ritirata. La versione 2.9.0-beta01 contiene questi commit.

Modifiche alle API

  • Lifecycle ViewModel Compose ora utilizza la stessa configurazione Kotlin Multiplatform di Compose Runtime 1.7.1 e versioni successive. Gli artefatti -desktop sono stati rimossi e sono stati aggiunti gli artefatti -jvmStubs e -linuxx64Stubs. Nessuno di questi target è destinato all'uso, sono segnaposto per supportare gli sforzi di Jetbrains Compose. (I5cb14, b/406592090)

Aggiornamenti delle dipendenze

  • Questa libreria ora ha come target il livello del linguaggio Kotlin 2.0 e richiede KGP 2.0.0 o versioni successive. (Idb6b5)
  • Lifecycle ViewModel Compose ora dipende da Compose 1.7.8. (I5cb14, b/406592090)

Versione 2.9.0-alpha13

26 marzo 2025

androidx.lifecycle:lifecycle-*:2.9.0-alpha13 viene rilasciato senza modifiche pubbliche degne di nota. La versione 2.9.0-alpha13 contiene questi commit.

Versione 2.9.0-alpha12

12 marzo 2025

androidx.lifecycle:lifecycle-*:2.9.0-alpha12 viene ritirata. La versione 2.9.0-alpha12 contiene questi commit.

Modifiche alle API

  • Aggiungi l'annotazione @MainThread a ViewModelProvider.get in tutte le piattaforme KMP supportate. (I7e8dd, b/397736115)
  • Rinomina SavedState*Delegates in SavedState*Delegate. (I8589b, b/399629301)

Versione 2.9.0-alpha11

26 febbraio 2025

androidx.lifecycle:lifecycle-*:2.9.0-alpha11 viene ritirata. La versione 2.9.0-alpha11 contiene questi commit.

Modifiche alle API

  • Aggiungi il parametro SavedStateConfig ai delegati di saved() (I39b3a)

Versione 2.9.0-alpha10

12 febbraio 2025

androidx.lifecycle:lifecycle-*:2.9.0-alpha10 viene ritirata. La versione 2.9.0-alpha10 contiene questi commit.

Modifiche alle API

  • Sposta MutableStateSerializer in savedstate-compose da lifecycle-viewmodel-compose. (I4f690, b/378895074)

Contributo esterno

  • Aggiunge un nuovo problema di Lint per la chiamata di Lifecycle::currentState nella composizione, suggerendo invece l'utilizzo di currentStateAsalue().value per garantire che le modifiche nello stato del ciclo di vita causino correttamente la ricomposizione. Grazie Steven Schoen. (Iad484)

Versione 2.9.0-alpha09

29 gennaio 2025

androidx.lifecycle:lifecycle-*:2.9.0-alpha09 viene ritirata. La versione 2.9.0-alpha09 contiene questi commit.

Nuove funzionalità

  • Aggiungi MutableStateSerializer per la serializzazione di androidx.compose.runtime.MutableState. (Idfc48, b/378895074)

Modifiche alle API

  • Sostituisci le funzioni delegate SavedStateHandle.saved() sovraccariche con i parametri predefiniti (Icd1c1)
  • AbstractSavedStateViewModelFactory è deprecato perché crea un SavedStateHandle per ogni ViewModel, causando un sovraccarico non necessario. Utilizza ViewModelProvider.Factory con CreationExtras.createSavedStateHandle per una creazione più efficiente di ViewModel. (Ia920b, b/388590327)

Versione 2.9.0-alpha08

11 dicembre 2024

androidx.lifecycle:lifecycle-*:2.9.0-alpha08 viene ritirata. La versione 2.9.0-alpha08 contiene questi commit.

Nuove funzionalità

  • Aggiungi ViewModelScenario.recreate per simulare l'interruzione di un processo di sistema ricreando ViewModel in fase di test e tutti i componenti associati. (Id6a69, b/381063087)
  • Le istanze LifecycleOwner e ViewModelStoreOwner recuperate tramite le rispettive API findViewTree ora possono essere risolte tramite i genitori disgiunti di una vista, ad esempio un ViewOverlay. Per ulteriori informazioni sui genitori della visualizzazione disgiunta, consulta le note di rilascio di core o la documentazione in ViewTree.setViewTreeDisjointParent. (I800f4)

Modifiche alle API

  • Rendere i nomi e l'organizzazione dei pacchetti più coerenti con SavedStateRegistryOwnerDelegate (I8c135, b/376026744)

Correzioni di bug

  • Questa libreria ora utilizza le annotazioni di nullabilità JSpecify, che sono di tipo use. Gli sviluppatori Kotlin devono utilizzare il seguente argomento del compilatore per imporre l'utilizzo corretto: -Xjspecify-annotations=strict (questo è il valore predefinito a partire dalla versione 2.1.0 del compilatore Kotlin). (Ie4340, b/326456246)
  • Sequenza di compensazione ViewModel.onCleared dei documenti. (I586c7, b/363984116)

Versione 2.9.0-alpha07

13 novembre 2024

androidx.lifecycle:lifecycle-*:2.9.0-alpha07 viene ritirata. La versione 2.9.0-alpha07 contiene questi commit.

Compatibilità con Kotlin Multiplatform

  • Lifecycle ViewModel SavedState ora è compatibile con KMP. In questo modo puoi utilizzare SavedStateHandle nel codice comune. (Ib6394, b/334076622)

Supporto della serializzazione KotlinX

  • Con il supporto di KotlinX Serialization aggiunto in SavedState 1.3.0-alpha05, abbiamo introdotto saved, un delegato di proprietà lazy, per semplificare l'archiviazione delle classi @Serializable in un SavedStateHandle e il ripristino automatico di queste classi in caso di interruzione e ricreazione del processo. Tieni presente che il delegato saved è pigro e non chiamerà la lambda init né salverà nulla in SavedStateHandle finché non viene eseguito l'accesso. (I47a88, b/376026744)

    @Serializable
    data class Person(val firstName: String, val lastName: String)
    
    class MyViewModel(handle: SavedStateHandle) : ViewModel() {
        var person by handle.saved { Person("John", "Doe") }
    
        fun onPersonChanged(person: Person) {
            this.person = person
        }
    }
    

Modifiche alle API

  • Aggiungi getMutableStateFlow a SavedStateHandle per restituire un MutableStateFlow. Questa nuova funzione è esclusiva per le chiavi e non può essere utilizzata con getLiveData. Se provi a utilizzarli entrambi per accedere allo stesso stato, verrà generata un'eccezione. (I04a4f, b/375408415)

Versione 2.9.0-alpha06

30 ottobre 2024

androidx.lifecycle:lifecycle-*:2.9.0-alpha06 viene ritirata. La versione 2.9.0-alpha06 contiene questi commit.

Modifiche al comportamento

  • Lo stato Lifecycle.DESTROYED è terminale e qualsiasi tentativo di spostare un Lifecycle da questo stato a un altro ora comporterà un IllegalStateException. (I116c4, b/370577987)
  • SavedStateHandle non include più SavedStateProvider.saveState() in cui Bundle restituito è vuoto. (I910b5, b/370577987)

Correzioni di bug

  • Lifecycle.eventFlow ora viene completato correttamente quando Lifecycle è DESTROYED (I293b2, b/374043130)

Versione 2.9.0-alpha05

16 ottobre 2024

androidx.lifecycle:lifecycle-*:2.9.0-alpha05 viene rilasciato senza modifiche significative. La versione 2.9.0-alpha05 contiene questi commit.

Versione 2.9.0-alpha04

2 ottobre 2024

androidx.lifecycle:lifecycle-*:2.9.0-alpha04 viene ritirata. La versione 2.9.0-alpha04 contiene questi commit.

Kotlin Multiplatform

  • Il modulo lifecycle-viewmodel-savedstate è ora configurato per essere compatibile con KMP in preparazione alla disponibilità di API come SavedStateHandle nel set di origini comuni in una release futura. (I503ed, I48764, b/334076622)

Versione 2.9.0-alpha03

18 settembre 2024

androidx.lifecycle:lifecycle-*:2.9.0-alpha03 viene ritirata. La versione 2.9.0-alpha03 contiene questi commit.

Correzioni di bug

Aggiornamenti delle dipendenze

Versione 2.9.0-alpha02

4 settembre 2024

androidx.lifecycle:lifecycle-*:2.9.0-alpha02 viene ritirata. La versione 2.9.0-alpha02 contiene questi commit.

Correzioni di bug

Contributo esterno

  • Sposta androidx.compose.ui.platform.LocalLifecycleOwner nel set di origini comune (KMP). Grazie a Ivan Matkov di JetBrains per il contributo. (8cd5d03)
  • Da Lifecycle 2.8.5: il delegato di estensione `SavedStateHandle.saveable` ora supporta i valori nullabili. Grazie a Roman Kalukiewicz per il suo contributo. (0d78ea6)

Versione 2.9.0-alpha01

7 agosto 2024

androidx.lifecycle:lifecycle-*:2.9.0-alpha01 viene ritirata. La versione 2.9.0-alpha01 contiene questi commit.

Kotlin Multiplatform

  • lifecycle-testing ora è compatibile con KMP. (Iea41e)
  • Aggiungi il supporto per la destinazione multipiattaforma Kotlin linuxArm64 (I139d3, b/338268719)

Nuove funzionalità

  • È disponibile un nuovo artefatto KMP androidx.lifecycle:lifecycle-viewmodel-testing che fornisce una classe ViewModelScenario per testare i ViewModel in isolamento, con supporto per onCleared (tutte le piattaforme) e SavedStateHandle (solo Android). (337f68d, c9b3409, 9799a95c, b/264602919)
  • La creazione di un ViewModel con ViewModelProvider ora è thread-safe; le annotazioni @MainThread sono state rimosse. (Ifd978, b/237006831)

Modifiche alle API

  • Aggiungi la funzione di fabbrica CreationExtras.Key() per semplificare la creazione di oggetti CreationExtras.Key anonimi. (I970ee)
  • CreationExtras ora include sovraccarichi di operatori simili a mappe per consentire la manipolazione idiomatica dei contenuti in Kotlin. Consente l'utilizzo di in, += e + con CreationExtras. (Ib4353)
  • CreationExtras ora implementa i metodi equals, hashCode e toString. (Ib4353)
  • NewInstanceFactory è ora disponibile su JVM Desktop e Android. (d3d0892)
  • Proprietà di estensione inline per esporre in modo sicuro l'applicazione sottostante nella versione 2.0 del linguaggio Kotlin (I39df2)

Correzioni di bug

  • È stata rimossa la definizione manuale dell'accesso alle nuove API della piattaforma, poiché questa avviene automaticamente tramite la modellazione delle API quando si utilizza R8 con AGP 7.3 o versioni successive (ad es. R8 versione 3.3) e per tutte le build quando si utilizza AGP 8.1 o versioni successive (ad es. D8 versione 8.1). I client che non utilizzano AGP sono invitati a eseguire l'aggiornamento alla versione 8.1 o successive di D8. Consulta questo articolo per ulteriori dettagli. (If6b4c, b/345472586)

Versione 2.8

Versione 2.8.7

30 ottobre 2024

androidx.lifecycle:lifecycle-*:2.8.7 viene ritirata. La versione 2.8.7 contiene questi commit.

Modifiche alle API

  • androidx.compose.ui.platform.LocalLifecycleOwner è ora disponibile nel set di origini comuni (KMP). (6a3f5b3)
  • lifecycle-runtime-compose: sono stati rimossi desktop elementi e sono stati aggiunti -jvmStubs e -linuxx64Stubs elementi. Nessuno di questi target è destinato all'uso, sono segnaposto per supportare gli sforzi di Jetbrains Compose. (6a3f5b3)

Versione 2.8.6

18 settembre 2024

androidx.lifecycle:lifecycle-*:2.8.6 viene ritirata. La versione 2.8.6 contiene questi commit.

Correzioni di bug

  • L'NullSafeMutableLiveData errore Lint ha un supporto migliorato per i cast intelligenti, evitando falsi positivi. (85fed6, b/181042665)

Aggiornamenti delle dipendenze

Versione 2.8.5

4 settembre 2024

androidx.lifecycle:lifecycle-*:2.8.5 viene ritirata. La versione 2.8.5 contiene questi commit.

Correzioni di bug

  • Aggiorna le regole di androidx.lifecycle.ReportFragment ProGuard per consentire l'offuscamento . (ff898e1)

Contributo esterno

  • Il delegato dell'estensione SavedStateHandle.saveable ora supporta i valori nullabili. Grazie a Roman Kalukiewicz per il suo contributo. (0d78ea6)

Versione 2.8.4

24 luglio 2024

androidx.lifecycle:lifecycle-*:2.8.4 viene ritirata. La versione 2.8.4 contiene questi commit.

Correzioni di bug

  • LiveData.asFlow() ora gestisce correttamente i casi in cui il flusso restituito viene completato immediatamente dopo aver ricevuto un valore già impostato su LiveData (ad esempio, quando si utilizza take(1)). (I9c566)
  • Il completamento di Lifecycle*Effect ora è idempotente (ovvero, se onStopOrDispose è stato chiamato perché il ciclo di vita è stato interrotto, non verrà chiamato una seconda volta al momento dello smaltimento, a meno che il ciclo di vita non torni a STARTED). (I5f607, b/352364595)

Versione 2.8.3

July 1, 2024

androidx.lifecycle:lifecycle-*:2.8.3 viene ritirata. La versione 2.8.3 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema relativo alla compatibilità con le versioni precedenti di Lifecycle 2.8 con Compose 1.6.0 e versioni precedenti durante l'utilizzo della riduzione del codice. (aosp/3133056, b/346808608)

Versione 2.8.2

12 giugno 2024

androidx.lifecycle:lifecycle-*:2.8.2 viene ritirata. La versione 2.8.2 contiene questi commit.

Correzioni di bug

  • Sono stati corretti gli errori CompositionLocal LocalLifecycleOwner not present quando si utilizza Lifecycle 2.8.X con Compose 1.6.X o versioni precedenti. Ora puoi utilizzare Lifecycle 2.8.2 con qualsiasi versione di Compose senza soluzioni alternative. (aosp/3105647, b/336842920)
  • ViewModelProvider non si arresterà più in modo anomalo quando si combinano versioni precedenti delle dipendenze del ciclo di vita di compileOnly con le versioni 2.8 e successive, risolvendo i problemi relativi a librerie come LeakCanary. (I80383, b/341792251)

Versione 2.8.1

29 maggio 2024

androidx.lifecycle:lifecycle-*:2.8.1 viene ritirata. La versione 2.8.1 contiene questi commit.

Correzioni di bug

  • lifecycle-viewmodel-compose ora ha solo una dipendenza comune da compose-runtime, rimuovendo la dipendenza comune da compose-ui. L'artefatto Android mantiene il suo compose-ui per la compatibilità. (aosp/3079334, b/339562627)
  • L'integrazione di ViewModel con saveable che utilizza i delegati delle proprietà ora utilizza il nome della classe come parte della chiave generata automaticamente, evitando conflitti se più classi utilizzano lo stesso SavedStateHandle. (aosp/3063463)

Versione 2.8.0

14 maggio 2024

androidx.lifecycle:lifecycle-*:2.8.0 viene ritirata. La versione 2.8.0 contiene questi commit.

Modifiche importanti dalla versione 2.7.0

  • LocalLifecycleOwner è stato spostato dall'interfaccia utente Compose a lifecycle-runtime-compose in modo che le relative API helper basate su Compose possano essere utilizzate al di fuori dell'interfaccia utente Compose.
  • L'artefatto lifecycle-runtime-compose ora contiene le API dropUnlessResumed e dropUnlessStarted, che ti consentono di eliminare i clic o altri eventi che si verificano anche dopo che LifecycleOwner è sceso al di sotto del Lifecycle.State specificato. Ad esempio, può essere utilizzato con Navigation Compose per evitare la gestione degli eventi di clic dopo l'inizio di una transizione a un'altra schermata: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
  • ViewModel.viewModelScope è ora un parametro del costruttore di cui è possibile eseguire l'override, il che ti consente di inserire il tuo dispatcher e SupervisorJob() o di eseguire l'override del valore predefinito utilizzando backgroundScope disponibile in runTest. (I2817c, b/264598574)

    class MyViewModel(
      // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate
      viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob()
    ) : ViewModel(viewModelScope) {
      // Use viewModelScope as before, without any code changes
    }
    
    // Allows overriding the viewModelScope in a test
    fun Test() = runTest {
      val viewModel = MyViewModel(backgroundScope)
    }
    
  • ViewModel è stato riscritto in Kotlin e ora utilizza AutoClosable anziché Closeable. Ora supporta l'aggiunta di oggetti AutoCloseable con un key che consente di recuperarli tramite getCloseable().

  • La chiamata di LifecycleStartEffect e LifecycleResumeEffect senza una chiave ora genera un errore, seguendo la stessa convenzione dell'API DisposableEffect che queste API rispecchiano.

  • LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) deprecato a favore di LiveData.toPublisher(lifecycleOwner).

  • Le estensioni Kotlin lifecycle-livedata-core-ktx sono state spostate nel modulo lifecycle-livedata-core.

  • NullSafeMutableLiveData è stato sottoposto a refactoring per evitare molti falsi positivi.

Compatibilità del ciclo di vita di Kotlin Multiplatform

Le API del ciclo di vita principali in Lifecycle, LifecycleOwner, LifecycleObserver, Lifecycle.State, Lifecycle.Event e LifecycleRegistry ora vengono fornite in artefatti compatibili con Kotlin Multiplatform.

Artefatti interessati:

  • lifecycle-common sposta la maggior parte delle API su common e supporta JVM e iOS oltre ad Android.
  • lifecycle-runtime sposta la maggior parte delle API su common e supporta JVM e iOS oltre ad Android.
  • lifecycle-runtime-ktx ora è vuoto e tutte le API sono state spostate in lifecycle-runtime.
  • lifecycle-runtime-compose sposta tutte le API su common e fornisce un artefatto Android, in linea con il supporto multipiattaforma di androidx.compose.

Compatibilità multipiattaforma Kotlin di ViewModel

L'artefatto lifecycle-viewmodel e le API come ViewModel, ViewModelStore, ViewModelStoreOwner e ViewModelProvider ora vengono spediti in artefatti compatibili con Kotlin Multiplatform.

Per adattarsi a questa modifica, i metodi come quelli su ViewModelProvider che richiedevano un java.lang.Class<T> ora hanno un metodo equivalente che richiede un kotlin.reflect.KClass<T>.

La compatibilità binaria su Android è stata mantenuta, ma ci sono alcune modifiche degne di nota se si confronta la superficie dell'API Android con la superficie dell'API comune:

  • La creazione di un'istanza ViewModelProvider viene ora eseguita tramite i metodi ViewModelProvider.create() anziché chiamando direttamente il relativo costruttore.
  • ViewModelProvider.NewInstanceFactory e ViewModelProvider.AndroidViewModelFactory sono disponibili solo su Android.
    • È consigliabile che le fabbriche personalizzate estendano ViewModelProvider.Factory e utilizzino il metodo create che accetta un CreationExtras o utilizzino il DSL Kotlin viewModelFactory.
  • L'utilizzo di ViewModelProvider senza una fabbrica personalizzata su piattaforme non JVM genera un UnsupportedOperationException. Sulle piattaforme JVM, la compatibilità viene mantenuta utilizzando il costruttore ViewModel senza argomenti se non viene fornita una factory personalizzata.
  • viewModelScope verrà eseguito il fallback a un EmptyCoroutineContext nelle piattaforme in cui Dispatchers.Main non è disponibile (ad es. Linux).

Artefatti interessati:

  • lifecycle-viewmodel sposta la maggior parte delle API su common e supporta JVM e iOS oltre ad Android.
  • lifecycle-viewmodel-ktx ora è vuoto e tutte le API sono state spostate in lifecycle-viewmodel.
  • lifecycle-viewmodel-compose sposta tutte le API su common e fornisce un artefatto Android, in linea con il supporto multipiattaforma di androidx.compose.

Modifiche al comportamento

  • InitializerViewModelFactory (inclusa la funzione di creazione viewModelFactory) ora genererà un errore IllegalArgumentException se è già stato aggiunto un initializer con lo stesso clazz: KClass<VM : ViewModel>. (Ic3a36)

Problemi noti

Versione 2.8.0-rc01

1° maggio 2024

androidx.lifecycle:lifecycle-*:2.8.0-rc01 viene ritirata. La versione 2.8.0-rc01 contiene questi commit.

Correzioni di bug

  • Risolto un problema per cui il profilo di base per le classi lifecycle-common non veniva pacchettizzato correttamente. Ora sono inclusi nell'AAR lifecycle-runtime. (aosp/3038274, b/322382422)
  • È stata corretta una modifica involontaria dell'ordine di cancellazione delle istanze AutoCloseable associate a un ViewModel: è stato ripristinato l'ordine precedente di addCloseable(String, AutoCloseable), poi addClosable(AutoCloseable) e infine onCleared(). (aosp/3041632)
  • Migliora il comportamento di creazione predefinito per viewModelScope per gli ambienti desktop nativi e JVM. (aosp/3039221)

Contributo esterno

  • Grazie a Victor Kropp per aver migliorato il controllo del thread principale su JVM Desktop. (aosp/3037116)

Versione 2.8.0-beta01

17 aprile 2024

androidx.lifecycle:lifecycle-*:2.8.0-beta01 viene ritirata. La versione 2.8.0-beta01 contiene questi commit.

Nuove funzionalità

  • L'artefatto lifecycle-runtime-compose ora è compatibile con Kotlin Multiplatform, il cui codice è stato spostato in common e viene fornito un artefatto Android, in linea con il supporto multipiattaforma per androidx.compose. (If7a71, I4f4a0, b/331769623)

Versione 2.8.0-alpha04

3 aprile 2024

androidx.lifecycle:lifecycle-*:2.8.0-alpha04 viene ritirata. La versione 2.8.0-alpha04 contiene questi commit.

Nuove funzionalità

  • L'artefatto lifecycle-viewmodel-compose ora è compatibile con Kotlin Multiplatform, il cui codice è stato spostato in common e viene fornito un artefatto Android, in linea con il supporto multipiattaforma di androidx.compose. Per adattarsi a questa modifica, il metodo viewModel di Composable ora accetta un KClass oltre a un java.lang.Class. (b/330323282)

Correzioni di bug

  • NullSafeMutableLiveData è stato sottoposto a refactoring per evitare molti falsi positivi. (I2d8c1, Iafb18, I03463, I7ecef)

Aggiornamento delle dipendenze

  • L'artefatto lifecycle-viewmodel-compose ora dipende da Compose 1.6.0.
  • Il ciclo di vita ora dipende da Profile Installer 1.3.1.

Versione 2.8.0-alpha03

20 marzo 2024

androidx.lifecycle:lifecycle-*:2.8.0-alpha03 viene ritirata. La versione 2.8.0-alpha03 contiene questi commit.

Nuove funzionalità

  • ViewModel.viewModelScope è ora un parametro del costruttore di cui è possibile eseguire l'override, il che ti consente di inserire il tuo dispatcher e SupervisorJob() o di eseguire l'override del valore predefinito utilizzando backgroundScope disponibile in runTest. (I2817c, b/264598574)

    class MyViewModel(
      // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate
      viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob()
    ) : ViewModel(viewModelScope) {
      // Use viewModelScope as before, without any code changes
    }
    
    // Allows overriding the viewModelScope in a test
    fun Test() = runTest {
      val viewModel = MyViewModel(backgroundScope)
    }
    

Compatibilità con Kotlin Multiplatform

L'artefatto lifecycle-viewmodel e le API come ViewModel, ViewModelStore, ViewModelStoreOwner e ViewModelProvider ora vengono spediti in artefatti compatibili con Kotlin Multiplatform. (b/214568825)

Per adattarsi a questa modifica, i metodi come quelli su ViewModelProvider che richiedevano un java.lang.Class<T> ora hanno un metodo equivalente che richiede un kotlin.reflect.KClass<T>.

La compatibilità binaria su Android è stata mantenuta, ma ci sono alcune modifiche degne di nota se si confronta la superficie dell'API Android con la superficie dell'API comune:

  • La creazione di un'istanza ViewModelProvider viene ora eseguita tramite i metodi ViewModelProvider.create() anziché chiamando direttamente il relativo costruttore.
  • ViewModelProvider.NewInstanceFactory e ViewModelProvider.AndroidViewModelFactory sono disponibili solo su Android.
    • È consigliabile che le fabbriche personalizzate estendano ViewModelProvider.Factory e utilizzino il metodo create che accetta un CreationExtras o utilizzino il DSL Kotlin viewModelFactory.
  • L'utilizzo di ViewModelProvider senza una fabbrica personalizzata su piattaforme non JVM genera un UnsupportedOperationException. Sulle piattaforme JVM, la compatibilità viene mantenuta utilizzando il costruttore ViewModel senza argomenti se non viene fornita una factory personalizzata.
  • viewModelScope verrà eseguito il fallback a un EmptyCoroutineContext nelle piattaforme in cui Dispatchers.Main non è disponibile (ad es. Linux).

Modifiche al comportamento

  • InitializerViewModelFactory (inclusa la funzione di creazione viewModelFactory) ora genererà un errore IllegalArgumentException se è già stato aggiunto un initializer con lo stesso clazz: KClass<VM : ViewModel>. (Ic3a36)

Correzioni di bug

  • ViewModel.getCloseable ora gestisce le chiavi duplicate: se key ha già una risorsa AutoCloseable associata, la vecchia risorsa verrà sostituita e chiusa immediatamente. (Ibeb67)
  • L'accesso a viewModelScope di un ViewModel ora è thread-safe. (If4766, b/322407038)

Contributo esterno

  • LocalLifecycleOwner è stato spostato da Compose UI a lifecycle-runtime-compose in modo che le relative API helper basate su Compose possano essere utilizzate al di fuori di Compose UI. Grazie a Jake Wharton per il suo contributo. (I6c41b, b/328263448)

Versione 2.8.0-alpha02

21 febbraio 2024

androidx.lifecycle:lifecycle-*:2.8.0-alpha02 viene ritirata. La versione 2.8.0-alpha02 contiene questi commit.

Nuove funzionalità

  • Sono state aggiunte le API dropUnlessResumed e dropUnlessStarted, che consentono di eliminare i clic o altri eventi che si verificano anche dopo che LifecycleOwner è sceso al di sotto del valore Lifecycle.State specificato. Ad esempio, può essere utilizzato con Navigation Compose per evitare la gestione degli eventi di clic dopo l'inizio di una transizione a un'altra schermata: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) } (Icba83, b/317230685)

Conversioni Kotlin

  • ViewModel è ora scritto in Kotlin (I16f26, b/214568825)
  • Le estensioni Kotlin lifecycle-viewmodel-ktx sono state spostate nel modulo del ciclo di vita di base. (Id787b, b/274800183)
  • Le estensioni Kotlin lifecycle-runtime-ktx sono state spostate nel modulo del ciclo di vita di base. (Ic3686, b/274800183)
  • Le estensioni Kotlin lifecycle-livedata-core-ktx sono state spostate nel modulo del ciclo di vita di base. (I54a3d, b/274800183)

Compatibilità con Kotlin Multiplatform

  • Le API del ciclo di vita principali in Lifecycle, LifecycleOwner, LifecycleObserver, Lifecycle.State, Lifecycle.Event e LifecycleRegistry ora vengono fornite in artefatti compatibili con Kotlin Multiplatform. (b/317249252)

Modifiche alle API

  • La chiamata di LifecycleStartEffect e LifecycleResumeEffect senza una chiave ora genera un errore, seguendo la stessa convenzione dell'API DisposableEffect che queste API rispecchiano. (Ib0e0c, b/323518079)
  • ViewModel ora utilizza AutoCloseable anziché Closeable. Si tratta di una modifica compatibile con le versioni precedenti. (I27f8e, b/214568825)
  • LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) deprecato a favore di LiveData.toPublisher(lifecycleOwner). (Iabe29, b/262623005)

Contributo esterno

  • Grazie a Ivan Matkov di Jetbrains per aver contribuito a trasferire Lifecycle su Kotlin Multiplatform. (aosp/2926690, I0c5ac, If445d)

Versione 2.8.0-alpha01

24 gennaio 2024

androidx.lifecycle:lifecycle-*:2.8.0-alpha01 viene ritirata. La versione 2.8.0-alpha01 contiene questi commit.

Nuove funzionalità

  • ViewModel ora supporta l'aggiunta di oggetti Closeable con un key che consente di recuperarli tramite getCloseable(). (I3cf63)

Versione 2.7

Versione 2.7.0

10 gennaio 2024

androidx.lifecycle:lifecycle-*:2.7.0 viene ritirata. La versione 2.7.0 contiene questi commit.

Modifiche importanti dalla versione 2.6.0

  • TestLifecycleOwner ora include una funzione di sospensione setCurrentState() che garantisce che la modifica dello stato e tutti i callback LifecycleObserver vengano completati prima di tornare. In particolare, a differenza dell'impostazione diretta della proprietà currentState, questa non utilizza runBlocking, il che la rende sicura da usare all'interno di una coroutine come quella fornita da runTest.
  • Le estensioni LiveData di map e switchMap ora rispecchiano il comportamento di distinctUntilChanged: se LiveData ha un valore value impostato, la funzione map/switchMap verrà chiamata immediatamente per compilare il valore value del valore LiveData restituito. In questo modo, il valore iniziale verrà impostato nell'ambito della prima composizione (se utilizzato con observeAsState()), ma non cambia il comportamento di osservazione: gli aggiornamenti dei valori dell'origine LiveData verranno applicati solo dopo l'inizio dell'osservazione di LiveData.
  • Questa release corregge un problema per cui SavedStateHandle non ripristinava correttamente le classi Parcelable personalizzate dopo l'interruzione e la ricreazione del processo. A causa delle informazioni sul tipo perse dal framework Android, gli array di Parcelable personalizzati richiedono un lavoro aggiuntivo (creazione manuale di un array tipizzato del tipo corretto) e la documentazione su get, getLiveData e getStateFlow ora indica specificamente questa limitazione.
  • Le regole di conservazione di ProGuard associate a LifecycleObserver sono state rimosse. Ciò significa che il codice protetto che vuole utilizzare le API tramite reflection (ad esempio utilizzando l'annotazione @OnLifecycleEvent da tempo deprecata) dovrà fornire le proprie regole di conservazione per il caso d'uso specifico.

Osservabilità degli eventi del ciclo di vita

  • In alternativa all'utilizzo di un LifecycleEventObserver, ora puoi osservare un Flow di Lifecycle.Event tramite il metodo di estensione Lifecycle.asFlow().
  • Gli utenti di Jetpack Compose ora possono utilizzare LifecycleEventEffect per eseguire effetti collaterali di Compose in base a Lifecycle.Event.
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
    viewModel.refreshData()
  }
  // …
}
  • Gli utenti di Jetpack Compose possono utilizzare LifecycleStartEffect e LifecycleResumeEffect per gestire coppie di eventi, rispettivamente da avviato a interrotto e da ripreso a messo in pausa. Questa API rispecchia quella presente in DisposableEffect ed è adatta ai casi in cui la modifica apportata quando lo stato aumenta deve essere invertita quando diminuisce.
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleStartEffect(viewModel) {
    val timeTracking = viewModel.startTrackingTimeOnScreen()
    onStopOrDispose {
      timeTracking.stopTrackingTimeOnScreen()
    }
  }
  // …
}

Per saperne di più, consulta Eseguire il codice sugli eventi del ciclo di vita.

Osservabilità dello stato del ciclo di vita

  • L'attuale Lifecycle.State può ora essere osservato tramite la proprietà Lifecycle.currentStateFlow, che restituisce un StateFlow in cui value è l'attuale Lifecycle.State.
  • Gli utenti di Jetpack Compose possono utilizzare l'estensione Lifecycle.currentStateAsState() per esporre direttamente Lifecycle.State come State di Compose. È equivalente (e un'alternativa più breve) a lifecycle.currentStateFlow.collectAsState().

Per saperne di più, consulta Raccogliere lo stato del ciclo di vita con i flussi.

Versione 2.7.0-rc02

13 dicembre 2023

androidx.lifecycle:lifecycle-*:2.7.0-rc02 viene ritirata. La versione 2.7.0-rc02 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema per cui SavedStateHandle non ripristinava correttamente le classi Parcelable personalizzate dopo l'interruzione e la ricreazione del processo. A causa delle informazioni sul tipo perse dal framework Android, gli array di Parcelable personalizzati richiedono un lavoro aggiuntivo (creazione manuale di un array tipizzato del tipo corretto) e la documentazione su get, getLiveData e getStateFlow ora indica specificamente questa limitazione. (I0b55a)

Versione 2.7.0-rc01

15 novembre 2023

androidx.lifecycle:lifecycle-*:2.7.0-rc01 viene ritirata. La versione 2.7.0-rc01 contiene questi commit.

Correzioni di bug

  • LifecycleStartEffect e LifecycleResumeEffect ora eliminano e ricreano correttamente il blocco degli effetti se viene modificato LifecycleOwner. (Ia25c6)

Versione 2.7.0-beta01

1° novembre 2023

androidx.lifecycle:lifecycle-*:2.7.0-beta01 viene rilasciato senza modifiche. La versione 2.7.0-beta01 contiene questi commit.

  • Aumento della versione beta, nessuna modifica importante a questa versione.

Versione 2.7.0-alpha03

18 ottobre 2023

androidx.lifecycle:lifecycle-*:2.7.0-alpha03 viene ritirata. La versione 2.7.0-alpha03 contiene questi commit.

Nuove funzionalità

  • lifecycle-runtime-testing ora contiene un nuovo controllo Lint per evitare di impostare Lifecycle.State di TestLifecycleOwner utilizzando il campo currentState all'interno di una coroutine. Il controllo Lint ora suggerisce la sospensione di setCurrentState, che consente di impostare Lifecycle.State senza blocchi. (Icf728, b/297880630)

Correzioni di bug

  • È stato risolto un problema con LiveData.switchMap per cui la restituzione della stessa istanza di LiveData sia nella chiamata iniziale che in una chiamata successiva impediva l'aggiunta dell'istanza di LiveData come origine. (Ibedcba7)

Versione 2.7.0-alpha02

6 settembre 2023

androidx.lifecycle:lifecycle-*:2.7.0-alpha02 viene ritirata. La versione 2.7.0-alpha02 contiene questi commit.

Nuove funzionalità

  • TestLifecycleOwner ora include la funzione di sospensione setCurrentState() per dare agli utenti la possibilità di utilizzare TestLifecycleOwner all'interno di una coroutine come quella fornita da runTest. (I329de, b/259344129)

Modifiche alle API

  • Tutti i file dei moduli lifecycle-livedata-ktx sono stati spostati nel modulo principale lifecycle-livedata. (I10c6f, b/274800183)

Modifiche al comportamento

  • Le estensioni LiveData.map() e LiveData.switchMap() ora impostano value di LiveData restituito se LiveData precedente ha un valore impostato, garantendo che l'utilizzo di LiveData risultante in Jetpack Compose abbia lo stato corretto nella composizione iniziale. (I91d2b, b/269479952)
  • L'addCloseable() di ViewModel ora chiude immediatamente Closeable se ViewModel ha già ricevuto una chiamata a onCleared(). (I4712e, b/280294730)

Correzioni di bug

  • Da Lifecycle 2.6.2: è stato risolto un problema per cui SavedStateHandle non veniva ripristinato correttamente dopo l'interruzione del processo se lo stato veniva ripristinato, save() veniva chiamato senza salvare effettivamente lo stato nel SavedStateRegistry principale e poi lo stato veniva ripristinato di nuovo. Questo corregge l'interazione tra rememberSaveable e NavHost di Navigation Compose. (aosp/2729289)

Versione 2.7.0-alpha01

26 luglio 2023

androidx.lifecycle:lifecycle-*:2.7.0-alpha01 viene ritirata. La versione 2.7.0-alpha01 contiene questi commit.

Modifiche alle API

  • Lifecycle.State ora è osservabile tramite Compose tramite Lifecycle.currentStateFlow, che restituisce un StateFlow in cui value è l'attuale Lifecycle.State. (Ib212d, b/209684871)
  • Ora gli Lifecycle.Event possono essere osservati come Flow con Lifecycle.asFlow(). (If2c0f, b/176311030)
  • È stata aggiunta l'API LifecycleResumeEffect per eseguire i SideEffect di Compose in base ai callback degli eventi Lifecycle.Event.ON_RESUME e Lifecycle.Event.ON_PAUSE. (I60386, b/235529345)
  • È stata aggiunta l'API LifecycleStartEffect per eseguire i callback degli eventi SideEffect basati su Lifecycle.Event.ON_START e Lifecycle.Event.ON_STOP. (I5a8d1, b/235529345)
  • È stata aggiunta l'API LifecycleEventEffect per eseguire SideEffect di Compose in base a Lifecycle.Event. (Ic9794, b/235529345)
  • L'estensione Lifecycle.collectAsState() è stata aggiunta per esporre direttamente Lifecycle.State come State di Compose. È equivalente (e un'alternativa più breve) a lifecycle.currentStateFlow.collectAsState(). (I11015, b/235529345)

Correzioni di bug

  • L'estensione LiveData.distinctUntilChanged() ora imposta value del LiveData restituito se il LiveData precedente ha un valore impostato. Ciò non modifica il comportamento di osservazione: i valori aggiornati della sorgente LiveData verranno applicati solo dopo che avrai iniziato a osservare LiveData restituito da distinctUntilChanged(). (Ib482f)
  • Le regole di conservazione di ProGuard associate a LifecycleObserver sono state rimosse. Ciò significa che il codice protetto che vuole utilizzare le API tramite reflection dovrà fornire le proprie regole di conservazione per il caso d'uso specifico. (Ia12fd)

Versione 2.6

Versione 2.6.2

6 settembre 2023

androidx.lifecycle:lifecycle-*:2.6.2 viene ritirata. La versione 2.6.2 contiene questi commit.

Correzioni di bug

  • È stato corretto un problema a causa del quale SavedStateHandle non veniva ripristinato correttamente dopo l'interruzione del processo se lo stato veniva ripristinato, save() veniva chiamato senza salvare effettivamente lo stato nel SavedStateRegistry principale e poi lo stato veniva ripristinato di nuovo. Questo corregge l'interazione tra rememberSaveable e NavHost di Navigation Compose. (aosp/2729289)

Versione 2.6.1

22 marzo 2023

androidx.lifecycle:lifecycle-*:2.6.1 viene ritirata. La versione 2.6.1 contiene questi commit.

Aggiornamenti delle dipendenze

Versione 2.6.0

8 marzo 2023

androidx.lifecycle:lifecycle-*:2.6.0 viene ritirata. La versione 2.6.0 contiene questi commit.

Modifiche importanti dalla versione 2.5.0

  • LiveData ora include una nuova proprietà isInitialized che indica se è mai stato impostato un valore esplicito per LiveData, consentendoti di distinguere tra liveData.value che restituisce null perché non è mai stato impostato alcun valore o un valore null esplicito.
  • MediatorLiveData ora include un costruttore per impostare un valore iniziale.
  • È stata aggiunta una nuova estensione il giorno StateFlow e il giorno Flow di collectAsStateWithLifecycle() che raccoglie i dati dai flussi e ne rappresenta l'ultimo valore come stato di composizione in modo consapevole del ciclo di vita.
  • I metodi Lifecycle.launchWhenX e Lifecycle.whenX sono stati ritirati perché l'utilizzo di un dispatcher di pausa può comportare uno spreco di risorse in alcuni casi. Ti consigliamo di utilizzare Lifecycle.repeatOnLifecycle. Per ulteriori informazioni sulla sospensione temporanea del lavoro, consulta questa spiegazione sul motivo per cui questa operazione è intrinsecamente non sicura.
  • Conversione di Kotlin: un numero elevato di classi del ciclo di vita è stato convertito in Kotlin. Tutti i corsi convertiti mantengono la compatibilità binaria con le versioni precedenti. Le seguenti classi hanno modifiche incompatibili con l'origine per le classi scritte in Kotlin: ViewTreeLifecycleOwner, LiveDataReactiveStreams, HasDefaultViewModelProviderFactory, ViewTreeViewModelStoreOwner, Transformations, ViewModelStoreOwner, LifecycleOwner

La tabella seguente fornisce le conversioni di origine per la nuova versione del ciclo di vita.

Ciclo di vita 2.5 Lifecycle 2.5 (KTX) Ciclo di vita 2.6
Transformations.switchMap(liveData) {...} liveData.switchMap {...} liveData.switchMap {...}
Transformations.map(liveData) {...} liveData.map {...} liveData.map {...}
Transformations.distinctUntilChanged(liveData) {...} liveData.distinctUntilChanged{...} liveData.distinctUntilChanged{...}
LiveDataReactiveStreams.fromPublisher(publisher) publisher.toLiveData() publisher.toLiveData()
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) liveData.toPublisher(lifecycleOwner) liveData.toPublisher(lifecycleOwner)
override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory override val defaultViewModelProviderFactory = factory
override fun getDefaultViewModelCreationExtras(): CreationExtras = extras override fun getDefaultViewModelCreationExtras(): CreationExtras = extras override val defaultViewModelProviderCreationExtras = extras
ViewTreeLifecycleOwner.set(view, owner) ViewTreeLifecycleOwner.set(view, owner) view.setViewTreeLifecycleOwner(owner)
ViewTreeLifecycleOwner.get(view) view.findViewTreeLifecycleOwner() view.findViewTreeLifecycleOwner()
override fun getViewModelStore(): ViewModelStore = store override fun getViewModelStore(): ViewModelStore = store override val viewModelStore: ViewModelStore = store
override fun getLifecycle(): Lifecycle = registry override fun getLifecycle(): Lifecycle = registry override val lifecycle: Lifecycle get() = registry
  • La nullabilità del metodo onChanged di un Observer creato in Kotlin ora corrisponde alla nullabilità del tipo generico. Se vuoi che Observer.onChanged() accetti un tipo nullable, devi creare un'istanza di Observer con un tipo nullable.
  • Anche queste classi sono state convertite in Kotlin, ma rimangono compatibili con l'origine: DefaultLifecycleObserver, LifecycleEventObserver, Lifecycle, LifecycleRegistry, LifecycleObserver, ViewModelStore, AndroidViewModel, AbstractSavedStateViewModelFactory, LifecycleService, ServiceLifecycleDispatcher e ProcessLifecycleOwner

Versione 2.6.0-rc01

22 febbraio 2023

androidx.lifecycle:lifecycle-*:2.6.0-rc01 viene ritirata. La versione 2.6.0-rc01 contiene questi commit.

Correzioni di bug

  • L'estensione LiveData.distinctUntilChanged() ora imposta value del LiveData restituito se il LiveData precedente ha un valore impostato. Ciò non modifica il comportamento di osservazione: i valori aggiornati della sorgente LiveData verranno applicati solo dopo che avrai iniziato a osservare LiveData restituito da distinctUntilChanged(). (Ib482f)

Versione 2.6.0-beta01

8 febbraio 2023

androidx.lifecycle:lifecycle-*:2.6.0-beta01 viene ritirata. La versione 2.6.0-beta01 contiene questi commit.

Conversioni Kotlin

  • LifecycleOwner è ora scritto in Kotlin. Si tratta di una modifica incompatibile con l'origine per le classi scritte in Kotlin: ora devono eseguire l'override della proprietà lifecycle anziché implementare la funzione getLifecycle() precedente. (I75b4b, b/240298691)
  • ViewModelStoreOwner è ora in Kotlin. Si tratta di una modifica incompatibile con l'origine per le classi scritte in Kotlin: ora devono eseguire l'override della proprietà viewModelStore anziché implementare la funzione getViewModelStore() precedente. (I86409, b/240298691)
  • L'estensione Kotlin su LifecycleOwner che fornisce il campo lifecycleScope è stata spostata nell'artefatto lifecycle-common da lifecycle-runtime-ktx. (I41d78, b/240298691)
  • L'estensione Kotlin su Lifecycle che fornisce il campo coroutineScope è stata spostata nell'artefatto lifecycle-common da lifecycle-runtime-ktx. (Iabb91, b/240298691)

Versione 2.6.0-alpha05

25 gennaio 2023

androidx.lifecycle:lifecycle-*:2.6.0-alpha05 viene ritirata. La versione 2.6.0-alpha05 contiene questi commit.

Conversioni Kotlin

  • Transformations è ora scritto in Kotlin. Si tratta di una modifica incompatibile con l'origine per le classi scritte in Kotlin che utilizzavano direttamente una sintassi come Transformations.map. Il codice Kotlin deve ora utilizzare la sintassi del metodo di estensione Kotlin, che in precedenza era disponibile solo quando si utilizzava lifecycle-livedata-ktx. Quando si utilizza il linguaggio di programmazione Java, le versioni di questi metodi che accettano un metodo androidx.arch.core.util.Function sono obsolete e sostituite dalle versioni che accettano un Function1 Kotlin. Questa modifica mantiene la compatibilità binaria. (I8e14f)
  • ViewTreeViewModelStoreOwner è ora scritto in Kotlin. Si tratta di una modifica incompatibile con l'origine per le classi scritte in Kotlin: ora devi importare e utilizzare direttamente i metodi di estensione Kotlin su View di androidx.lifecycle.setViewTreeViewModelStoreOwner e androidx.lifecycle.findViewTreeViewModelStoreOwner per impostare e trovare un proprietario impostato in precedenza. È compatibile a livello binario e rimane compatibile a livello di codice sorgente per le implementazioni scritte nel linguaggio di programmazione Java. (Ia06d8, Ib22d8, b/240298691)
  • L'interfaccia HasDefaultViewModelProviderFactory è ora scritta in Kotlin. Si tratta di una modifica incompatibile con l'origine per le classi scritte in Kotlin, che ora devono eseguire l'override delle proprietà defaultViewModelProviderFactory e defaultViewModelCreationExtras anziché implementare le funzioni corrispondenti precedenti. (Iaed9c, b/240298691)
  • Observer è ora scritto in Kotlin. Il suo metodo onChanged() ora utilizza il nome value per il parametro. (Iffef2, I4995e, b/240298691)
  • AndroidViewModel, AbstractSavedStateViewModelFactory, LifecycleService, ServiceLifecycleDispatcher e ProcessLifecycleOwner sono ora scritti in Kotlin (I2e771, Ibae40, I160d7, I08884, I1cda7, b/240298691)

Versione 2.6.0-alpha04

11 gennaio 2023

androidx.lifecycle:lifecycle-*:2.6.0-alpha04 viene ritirata. La versione 2.6.0-alpha04 contiene questi commit.

Nuove funzionalità

  • LiveData ora include una nuova proprietà isInitialized che indica se è mai stato impostato un valore esplicito per LiveData, consentendoti di distinguere tra liveData.value che restituisce null perché non è mai stato impostato alcun valore o un valore null esplicito. (Ibd018)

Modifiche alle API

  • Le API collectAsStateWithLifecycle() di lifecycle-runtime-compose non sono più in stato sperimentale. (I09d42, b/258835424)
  • I metodi Lifecycle.launchWhenX e Lifecycle.whenX sono stati ritirati perché l'utilizzo di un dispatcher di pausa può comportare uno spreco di risorse in alcuni casi. Ti consigliamo di utilizzare Lifecycle.repeatOnLifecycle. (Iafc54, b/248302832)

Conversioni Kotlin

  • ViewTreeLifecycleOwner è ora scritto in Kotlin. Si tratta di una modifica incompatibile con l'origine per le classi scritte in Kotlin: ora devi importare e utilizzare direttamente i metodi di estensione Kotlin su View di androidx.lifecycle.setViewTreeLifecycleOwner e androidx.lifecycle.findViewTreeLifecycleOwner per impostare e trovare un proprietario impostato in precedenza. Questa sostituisce l'estensione Kotlin precedente in lifecycle-runtime-ktx. È compatibile a livello binario e rimane compatibile a livello di codice sorgente per le implementazioni scritte nel linguaggio di programmazione Java. (I8a77a, I5234e, b/240298691)
  • LiveDataReactiveStreams è ora scritto in Kotlin. Le estensioni Kotlin precedentemente presenti in lifecycle-reactivestreams-ktx sono state spostate nel modulo lifecycle-reactivestreams e sono diventate la superficie principale per il codice scritto in Kotlin. Si tratta di una modifica incompatibile con l'origine per il codice scritto in Kotlin se non utilizzavi già le API dei metodi di estensione Kotlin. (I2b1b9, I95d22, b/240298691)
  • DefaultLifecycleObserver, LifecycleEventObserver, Lifecycle, LifecycleRegistry, LifecycleObserver e ViewModelStore sono ora scritti in Kotlin (Iadffd, (I60034, I8c52c, I9593d, I01fe1, I59a23, b/240298691)

Correzioni di bug

  • SavedStateHandle non si arresta più in modo anomalo con un ClassCastException quando chiama get() con il tipo di classe errato. (I6ae7c)

Versione 2.6.0-alpha03

24 ottobre 2022

androidx.lifecycle:lifecycle-*:2.6.0-alpha03 viene ritirata. La versione 2.6.0-alpha03 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema per cui i vincoli tra diversi moduli del ciclo di vita non funzionavano come previsto. (I18d0d, b/249686765)
  • Gli errori generati da LifecycleRegistry.moveToState() ora includono messaggi di errore più utili che informano gli sviluppatori del componente che causa l'errore. (Idf4b2, b/244910446)

Versione 2.6.0-alpha02

7 settembre 2022

androidx.lifecycle:lifecycle-*:2.6.0-alpha02 viene ritirata. La versione 2.6.0-alpha02 contiene questi commit.

Modifiche alle API

  • MediatorLiveData ora include un costruttore per impostare un valore iniziale. (Ib6cc5, b/151244085)

Correzioni di bug

  • Gli artefatti Lifecycle ora includono vincoli che garantiscono che tutti gli artefatti del ciclo di vita interdipendenti utilizzino la stessa versione, eseguendo automaticamente l'upgrade delle altre dipendenze quando viene eseguito l'upgrade di una. b/242871265
  • Ora FlowLiveData.asFlow() crea un callbackFlow anziché utilizzare la propria implementazione Channel per garantire la sicurezza dei thread e la conservazione del contesto. (I4a8b2, b/200596935)
  • La funzione FlowLiveData di asLiveData ora manterrà il valore iniziale di un StateFlow durante la creazione del nuovo oggetto LiveData. (I3f530, b/157380488)
  • Da Lifecycle 2.5.1: le implementazioni personalizzate di AndroidViewModelFactory ora chiamano correttamente la funzione create(modelClass) quando si utilizza il costruttore stateful con Lifecycle 2.4+ (I5b315, b/238011621)

Versione 2.6.0-alpha01

29 giugno 2022

androidx.lifecycle:lifecycle-*:2.6.0-alpha01 viene ritirata. La versione 2.6.0-alpha01 contiene questi commit.

Nuove funzionalità

  • È stata aggiunta una nuova estensione il giorno StateFlow e il giorno Flow di collectAsStateWithLifecycle che raccoglie i dati dai flussi e ne rappresenta l'ultimo valore come stato di composizione in modo consapevole del ciclo di vita. Il flusso viene raccolto e la nuova emissione viene impostata sul valore dello stato quando il ciclo di vita si trova almeno in un determinato Lifecycle.State. Quando il ciclo di vita scende al di sotto di Lifecycle.State, la raccolta del flusso si interrompe e il valore dello stato non viene aggiornato. (I1856e, b/230557927)

Versione 2.5

Versione 2.5.1

27 luglio 2022

androidx.lifecycle:lifecycle-*:2.5.1 viene ritirata. La versione 2.5.1 contiene questi commit.

Correzioni di bug

  • Le implementazioni personalizzate di AndroidViewModelFactory ora chiamano correttamente la funzione create(modelClass) quando utilizzano il costruttore con stato AndroidViewModelFactory con Lifecycle 2.4+. (I5b315, b/238011621)

Versione 2.5.0

29 giugno 2022

androidx.lifecycle:lifecycle-*:2.5.0 viene ritirata. La versione 2.5.0 contiene questi commit.

Modifiche importanti dalla versione 2.4.0

  • SavedStateHandle ora offre un'API getStateFlow() che restituisce un StateFlow Kotlin per monitorare le modifiche dei valori in alternativa all'utilizzo di LiveData.

  • ViewModel CreationExtras: quando scrivi un ViewModelProvider.Factory personalizzato, non è più necessario estendere AndroidViewModelFactory o AbstractSavedStateViewModelFactory per accedere rispettivamente a un Application o a un SavedStateHandle. Questi campi vengono invece forniti a ogni sottoclasse ViewModelProvider.Factory come CreationExtras tramite il nuovo overload di create: create(Class<T>, CreationExtras). Questi extra vengono forniti automaticamente dall'attività o dal fragment quando utilizzi rispettivamente Activity 1.5.0 e Fragment 1.5.0.

    class CustomFactory : ViewModelProvider.Factory {
        override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
            return when (modelClass) {
                HomeViewModel::class -> {
                    // Get the Application object from extras
                    val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY])
                    // Pass it directly to HomeViewModel
                    HomeViewModel(application)
                }
                DetailViewModel::class -> {
                    // Create a SavedStateHandle for this ViewModel from extras
                    val savedStateHandle = extras.createSavedStateHandle()
                    DetailViewModel(savedStateHandle)
                }
                else -> throw IllegalArgumentException("Unknown class $modelClass")
            } as T
        }
    }
    
  • lifecycle-viewmodel ora fornisce un viewModelFactory DSL Kotlin che ti consente di definire ViewModelProvider.Factory in termini di uno o più inizializzatori lambda, uno per ogni classe ViewModel specifica supportata dalla tua factory personalizzata, utilizzando CreationExtras come origine dati principale.

    val customFactory = viewModelFactory {
        // The return type of the lambda automatically sets what class this lambda handles
        initializer {
            // Get the Application object from extras provided to the lambda
            val application = checkNotNull(get(ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY))
            HomeViewModel(application)
        }
        initializer {
            val savedStateHandle = createSavedStateHandle()
            DetailViewModel(savedStateHandle)
        }
    }
    
  • lifecycle-viewmodel-compose ora offre un'API viewModel() che accetta una factory lambda per la creazione di un'istanza ViewModel senza richiedere la creazione di un ViewModelProvider.Factory personalizzato.

    // Within a @Composable, you can now skip writing a custom Factory
    // and instead write a lambda to do the initialization of your ViewModel
    val detailViewModel = viewModel {
      // This lambda is only called the first time the ViewModel is created
      // and all CreationExtras are available inside the lambda
      val savedStateHandle = createSavedStateHandle()
      DetailViewModel(savedStateHandle)
    }
    
  • Integrazione di SavedStateHandle Compose Saver: l'artefatto lifecycle-viewmodel-compose ora contiene nuove API sperimentali in SavedStateHandle.saveable che consentono un comportamento simile a rememberSaveable supportato da SavedStateHandle di un oggetto `ViewModel`.

    class ListScreenViewModel(handle: SavedStateHandle): ViewModel() {
        // This value survives both configuration changes and process death and recreation
        val editMode by handle.saveable { mutableStateOf(false) }
    }
    
  • Sono state aggiunte un'API addCloseable() e un nuovo overload del costruttore che consentono di aggiungere uno o più oggetti Closeable all'ViewModel che verrà chiuso quando l'ViewModel viene cancellato senza richiedere alcun intervento manuale in onCleared().

    Ad esempio, per creare un ambito di coroutine che puoi inserire in un ViewModel, ma controllare tramite i test, puoi creare un CoroutineScope che implementa Closeable:

    class CloseableCoroutineScope(
        context: CoroutineContext = SupervisorJob() + Dispatchers.Main.immediate
    ) : Closeable, CoroutineScope {
        override val coroutineContext: CoroutineContext = context
        override fun close() {
            coroutineContext.cancel()
       }
    }
    

    che può essere utilizzato nel costruttore ViewModel mantenendo la stessa durata di viewModelScope:

    class TestScopeViewModel(
        val customScope: CloseableCoroutineScope = CloseableCoroutineScope()
    ) : ViewModel(customScope) {
        // You can now use customScope in the same way as viewModelScope
    }
    

Modifiche al funzionamento

  • Il tentativo di spostare Lifecycle.State da INITIALIZED a DESTROYED ora genererà sempre un IllegalStateException indipendentemente dal fatto che Lifecycle abbia un osservatore allegato.
  • LifecycleRegistry ora cancellerà i suoi osservatori quando raggiunge lo stato DESTROYED.

Versione 2.5.0-rc02

15 giugno 2022

androidx.lifecycle:lifecycle-*:2.5.0-rc02 viene ritirata. La versione 2.5.0-rc02 contiene questi commit.

Correzioni di bug

  • ViewModelProvider non si arresterà più in modo anomalo quando si combinano versioni precedenti delle dipendenze del ciclo di vita compileOnly con le versioni 2.5 e successive. (I81a66, b/230454566)

Versione 2.5.0-rc01

11 maggio 2022

androidx.lifecycle:lifecycle-*:2.5.0-rc01 viene ritirata. La versione 2.5.0-rc01 contiene questi commit.

Correzioni di bug

  • MediatorLiveData.addSource() ora genera un NullPointerException quando viene passata un'origine null anziché propagare l'origine null agli osservatori.(Ibd0fb, b/123085232)

Versione 2.5.0-beta01

20 aprile 2022

androidx.lifecycle:lifecycle-*:2.5.0-beta01 viene ritirata. La versione 2.5.0-beta01 contiene questi commit.

Modifiche alle API

  • Sono stati aggiunti delegati della proprietà SavedStateHandle.saveable per utilizzare i nomi delle proprietà come chiavi per rendere persistente lo stato in SavedStateHandle (I8bb86, b/225014345)

Correzioni di bug

  • È stato risolto un problema per cui l'annidamento di un NavHost all'interno di un altro NavHost in una scheda di navigazione inferiore non principale comportava un IllegalStateException quando si utilizzavano più back stack. (I11bd5, b/228865698)

Versione 2.5.0-alpha06

6 aprile 2022

androidx.lifecycle:lifecycle-*:2.5.0-alpha06 viene ritirata. La versione 2.5.0-alpha06 contiene questi commit.

Nuove funzionalità

  • Aggiungi l'overload sperimentale di MutableState a SavedStateHandle.saveable per parità con rememberSaveable (I38cfe, b/224565154)

Modifiche alle API

  • CreationExtras ora è astratto anziché sigillato. (Ib8a7a)

Correzioni di bug

  • È stato corretto un errore IllegalStateException: Already attached to lifecycleOwner causato da SavedStateHandleController. (I7ea47, b/215406268)

Versione 2.5.0-alpha05

23 marzo 2022

androidx.lifecycle:lifecycle-*:2.5.0-alpha05 viene ritirata. La versione 2.5.0-alpha05 contiene questi commit.

Nuove funzionalità

  • Il modulo lifecycle-viewmodel-compose ora fornisce SavedStateHandleSaver, un'API sperimentale che garantisce che i valori in un SavedStateHandle siano integrati correttamente con lo stesso stato dell'istanza salvata utilizzato da rememberSaveable. (Ia88b7, b/195689777)

Modifiche alle API

  • È stato risolto un problema di compatibilità con Lifecycle 2.3 e versioni successive di Lifecycle in Java. (I52c8a, b/219545060)

Correzioni di bug

  • SavedStateViewFactory ora supporta l'utilizzo di CreationExtras anche se è stato inizializzato con un SavedStateRegistryOwner. Se vengono forniti extra, gli argomenti inizializzati vengono ignorati. (I6c43b, b/224844583)

Versione 2.5.0-alpha04

9 marzo 2022

androidx.lifecycle:lifecycle-*:2.5.0-alpha04 viene ritirata. La versione 2.5.0-alpha04 contiene questi commit.

Modifiche alle API

  • SavedStateHandle ora offre un'API getStateFlow() che restituisce un StateFlow Kotlin per monitorare le modifiche dei valori come alternativa all'utilizzo di LiveData. (Iad3ab, b/178037961)

Versione 2.5.0-alpha03

23 febbraio 2022

androidx.lifecycle:lifecycle-*:2.5.0-alpha03 viene ritirata. La versione 2.5.0-alpha03 contiene questi commit.

Nuove funzionalità

  • È stata aggiunta un'API addCloseable() e un nuovo sovraccarico del costruttore che consente di aggiungere uno o più oggetti Closeable a ViewModel che verrà chiuso quando ViewModel viene cancellato senza richiedere alcun intervento manuale in onCleared(). (I55ea0)
  • lifecycle-viewmodel ora fornisce un InitializerViewModelFactory che ti consente di aggiungere lambda per la gestione di particolari classi ViewModel, utilizzando CreationExtras come origine dati principale. (If58fc, b/216687549)
  • lifecycle-viewmodel-compose ora offre un'API viewModel() che accetta una factory lambda per creare un'istanza ViewModel senza richiedere la creazione di un ViewModelProvider.Factory personalizzato. (I97fbb, b/216688927)

Modifiche alle API

  • Ora puoi creare un ViewModel con CreationExtras tramite lifecycle-viewmodel-compose. (I08887, b/216688927)

Modifiche al funzionamento

  • Il tentativo di spostare Lifecycle.State da INITIALIZED a DESTROYED ora genererà sempre un IllegalStateException indipendentemente dal fatto che Lifecycle abbia un osservatore collegato. (I7c390, b/177924329)
  • LifecycleRegistry ora cancellerà i propri osservatori quando raggiungerà lo stato DESTROYED. (I4f8dd, b/142925860)

Versione 2.5.0-alpha02

9 febbraio 2022

androidx.lifecycle:lifecycle-*:2.5.0-alpha02 viene ritirata. La versione 2.5.0-alpha02 contiene questi commit.

Modifiche alle API

  • SavedStateHandle e SavedStateViewModelFactory sono stati convertiti in Kotlin. Ciò ha migliorato l'annullabilità dei generici in entrambe le classi. (Ib6ce2, b/216168263, I9647a, b/177667711)
  • Il parametro della funzione LiveData switchMap ora può avere un output Nullable. (I40396, b/132923666)
  • Le estensioni LiveData -ktx ora sono annotate con @CheckResult per garantire che il risultato venga utilizzato quando vengono chiamate queste funzioni. (Ia0f05, b/207325134)

Modifiche al funzionamento

  • Ora SavedStateHandle memorizza correttamente defaultValue quando non esiste alcun valore per la chiave specificata. (I1c6ce, b/178510877)

Correzioni di bug

  • Da Lifecycle 2.4.1: è stato aggiornato lifecycle-process in modo che dipenda da Startup 1.1.1 per garantire che le correzioni che impediscono a ProcessLifecycleInitializer di generare un StartupException siano disponibili per impostazione predefinita. (Ib01df, b/216490724)
  • Ora viene visualizzato un messaggio di errore migliorato quando le classi AndroidViewModel personalizzate hanno parametri nell'ordine errato e si tenta di creare un ViewModel. (I340f7, b/177667711)
  • Ora puoi creare un modello di visualizzazione tramite CreationExtras utilizzando AndroidViewModelFactory senza impostare un'applicazione. (I6ebef, b/217271656)

Versione 2.5.0-alpha01

26 gennaio 2022

androidx.lifecycle:lifecycle-*:2.5.0-alpha01 viene ritirata. La versione 2.5.0-alpha01 contiene questi commit.

ViewModel CreationExtras

Con questa release, stiamo gettando le basi per la ristrutturazione della modalità di creazione di un ViewModel. Anziché un insieme rigido di sottoclassi di ViewModelProvider.Factory che aggiungono ciascuna funzionalità aggiuntive (consentendo un parametro del costruttore Application tramite AndroidViewModelFactory, un parametro del costruttore SavedStateHandle tramite SavedStateViewModelFactory e AbstractSavedStateViewModelFactory e così via), stiamo passando a un mondo di fabbriche stateless che si basano su un nuovo concetto, CreationExtras. (Ia7343, b/188691010, b/188541057)

Con questa modifica, ViewModelProvider non effettua più chiamate dirette al metodo create(Class<T>) precedente di ViewModelProvider.Factory. Chiama invece un nuovo overload di create: create(Class<T>, CreationExtras). Ciò significa che qualsiasi implementazione diretta dell'istanza ViewModelProvider.Factory ora ha accesso a ciascuno di questi nuovi CreationExtras:

  • ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY: questo String fornisce l'accesso alla chiave personalizzata che hai passato a ViewModelProvider.get().
  • ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY fornisce l'accesso al corso Application.
  • SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY fornisce l'accesso a SavedStateRegistryOwner utilizzato per creare questo ViewModel.
  • SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY fornisce l'accesso a ViewModelStoreOwner utilizzato per creare questo ViewModel.
  • SavedStateHandleSupport.DEFAULT_ARGS_KEY fornisce l'accesso all'Bundle degli argomenti che devono essere utilizzati per costruire un SavedStateHandle.

Questi extra vengono forniti per impostazione predefinita quando utilizzi Attività 1.5.0-alpha01, Frammento 1.5.0-alpha01 e Navigazione 2.5.0-alpha01. Se utilizzi una versione precedente di queste librerie, il tuo CreationExtras sarà vuoto. Tutte le sottoclassi esistenti di ViewModelProvider.Factory sono state riscritte per supportare sia il percorso di creazione legacy utilizzato dalle versioni precedenti di queste librerie sia il percorso CreationExtras che verrà utilizzato in futuro.

Questi CreationExtras ti consentono di creare un ViewModelProvider.Factory che trasmette solo le informazioni necessarie a ogni ViewModel senza fare affidamento su una gerarchia rigida di sottoclassi Factory:

class CustomFactory : ViewModelProvider.Factory {
    override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
        return when (modelClass) {
            HomeViewModel::class -> {
                // Get the Application object from extras
                val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY])
                // Pass it directly to HomeViewModel
                HomeViewModel(application)
            }
            DetailViewModel::class -> {
                // Create a SavedStateHandle for this ViewModel from extras
                val savedStateHandle = extras.createSavedStateHandle()
                DetailViewModel(savedStateHandle)
            }
            else -> throw IllegalArgumentException("Unknown class $modelClass")
        } as T
    }
}

Utilizziamo la funzione di estensione Kotlin createSavedStateHandle() su CreationExtras da SavedStateHandleSupport per creare un SavedStateHandle solo per il ViewModel che ne ha bisogno. (Ia6654, b/188541057)

I CreationExtras personalizzati possono essere forniti sostituendo getDefaultViewModelCreationExtras() in ComponentActivity o Fragment, rendendoli così disponibili per il ViewModelProvider.Factory personalizzato come forma integrata di inserimento assistito. Questi componenti aggiuntivi verranno resi disponibili automaticamente per la tua Factory personalizzata se utilizzati direttamente con ViewModelProvider o se utilizzi le estensioni delle proprietà Kotlin by viewModels() e by activityViewModels(). (I79f2b, b/207012584, b/207012585, b/207012490)

Correzioni di bug

  • È stato risolto un problema per cui il valore predefinito fornito a un SavedStateHandle veniva visualizzato di nuovo dopo l'interruzione e la ricreazione del processo, anche se era stato rimosso specificamente dal SavedStateHandle. Di conseguenza, SavedStateHandle non unirà più i valori predefiniti e i valori ripristinati, ma utilizzerà solo i valori ripristinati come fonte di verità. (I53a4b)

Versione 2.4

Versione 2.4.1

9 febbraio 2022

androidx.lifecycle:lifecycle-*:2.4.1 viene ritirata. La versione 2.4.1 contiene questi commit.

Correzioni di bug

  • Portato da Lifecycle 2.5.0-alpha01: è stato risolto un problema per cui il valore predefinito fornito a un SavedStateHandle veniva visualizzato di nuovo dopo l'interruzione e la ricreazione del processo, anche se era stato rimosso in modo specifico dal SavedStateHandle. Di conseguenza, SavedStateHandle non unirà più i valori predefiniti e i valori ripristinati, ma utilizzerà solo i valori ripristinati come fonte di verità. (I53a4b)
  • lifecycle-process ora dipende da Androidx Startup 1.1.1, che ha corretto una regressione in cui l'utilizzo di ProcessLifecycleInitializer causava un StartupException. (b/216490724)

Versione 2.4.0

27 ottobre 2021

androidx.lifecycle:lifecycle-*:2.4.0 viene ritirata. La versione 2.4.0 contiene questi commit.

Modifiche importanti dalla versione 2.3.0

  • @OnLifecycleEvent è stato ritirato. Utilizza invece LifecycleEventObserver o DefaultLifecycleObserver.
  • È stata aggiunta la raccolta androidx.lifecycle:lifecycle-viewmodel-compose. Fornisce viewModel() componibili e LocalViewModelStoreOwner.
    • Modifica che causa interruzione della compatibilità con il codice sorgente: ViewModelProvider è stato riscritto in Kotlin. Il metodo ViewModelProvider.Factory.create non consente più i generici annullabili.
  • Sono state aggiunte nuove API coroutine a androidx.lifecycle:lifecycle-runtime-ktx:
  • Lifecycle.repeatOnLifecycle, API che esegue un blocco di codice in una coroutine quando il ciclo di vita si trova almeno in un determinato stato. Il blocco verrà annullato e riavviato man mano che il ciclo di vita entra ed esce dallo stato di destinazione.
  • Flow.flowWithLifecycle, API che emette valori dal flusso upstream quando il ciclo di vita si trova almeno in un determinato stato.
  • DefaultLifecycleObserver è stato spostato da lifecycle.lifecycle-common-java8 a lifecycle.lifecycle-common. lifecycle.lifecycle-common-java8 non fornisce più funzionalità aggiuntive rispetto a lifecycle.lifecycle-common, pertanto la dipendenza da questo elemento può essere sostituita da lifecycle.lifecycle-common.
  • L'API non coroutine di lifecycle-viewmodel-ktx è stata spostata nel modulo lifecycle-viewmodel.
  • lifecycle-process ora utilizza androidx.startup per inizializzare ProcessLifecycleOwner.

    In precedenza, questa operazione veniva eseguita da androidx.lifecycle.ProcessLifecycleOwnerInitializer.

    Se in passato hai utilizzato tools:node="remove" ContentProvider per inizializzare il ciclo di vita del processo, devi invece 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.lifecycle.ProcessLifecycleInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
     </provider>
    

    (oppure)

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

Versione 2.4.0-rc01

29 settembre 2021

androidx.lifecycle:lifecycle-*:2.4.0-rc01 viene rilasciato senza modifiche rispetto a Lifecycle 2.4.0-beta01. La versione 2.4.0-rc01 contiene questi commit.

Versione 2.4.0-beta01

15 settembre 2021

androidx.lifecycle:lifecycle-*:2.4.0-beta01 viene ritirata. La versione 2.4.0-beta01 contiene questi commit.

Modifiche alle API

  • @OnLifecycleEvent è stato ritirato. LifecycleEventObserver o DefaultLifecycleObserver. (I5a8fa)
  • DefaultLifecycleObserver è stato spostato da androidx.lifecycle.lifecycle-common-java8 a androidx.lifecycle.lifecycle-common. androidx.lifecycle.lifecycle-common-java8 non fornisce più funzionalità aggiuntive rispetto a androidx.lifecycle.lifecycle-common, pertanto la dipendenza da questo può essere sostituita da androidx.lifecycle.lifecycle-common. (I021aa)
  • L'API non coroutine di lifecycle-viewmodel-ktx è stata spostata nel modulo lifecycle-viewmodel. (I6d5b2)

Contributo esterno

  • Grazie dmitrilc per aver corretto un errore di battitura nella documentazione di ViewModel. (#221)

Versione 2.4.0-alpha03

4 agosto 2021

androidx.lifecycle:lifecycle-*:2.4.0-alpha03 viene ritirata. La versione 2.4.0-alpha03 contiene questi commit.

Modifiche alle API

  • Modifica che causa interruzioni a livello di codice sorgente: ViewModelProvider è stato riscritto in Kotlin. Il metodo ViewModelProvider.Factory.create non consente più i generici che accettano valori null. (I9b9f6)

Modifiche al comportamento

  • Lifecycle.repeatOnLifecycle: block ora viene sempre richiamato in serie durante l'esecuzione ripetuta. (Ibab33)

Contributo esterno

  • Grazie chao2zhang per aver corretto gli snippet di codice nella documentazione di repeatOnLifecycle. #205.

Versione 2.4.0-alpha02

16 giugno 2021

androidx.lifecycle:lifecycle-*:2.4.0-alpha02 viene ritirata. La versione 2.4.0-alpha02 contiene questi commit.

Nuove funzionalità

  • È stato aggiunto un nuovo controllo lint RepeatOnLifecycleWrongUsage a lifecycle-runtime-ktx che rileva quando repeateOnLifecycle viene utilizzato in modo errato in onStart() o onResume(). (706078, b/187887400)

Modifiche alle API

  • L'API LifecycleOwner.addRepeatingJob viene rimossa a favore di Lifecycle.repeatOnLifecycle che rispetta la concorrenza strutturata ed è più facile da gestire. (I4a3a8)
  • Rendi pubblico ProcessLifecycleInitializer in modo che altri androidx.startup.Initializer possano utilizzarli come dipendenze. (I94c31)

Correzioni di bug

  • È stato risolto un problema con il controllo lint di NullSafeMutableLiveData quando il campo ha modificatori. (#147, b/183696616)
  • È stato risolto un altro problema con il controllo lint NullSafeMutableLiveData quando si utilizzano i generici. (#161, b/184830263)

Contributo esterno

Versione 2.4.0-alpha01

24 marzo 2021

androidx.lifecycle:lifecycle-*:2.4.0-alpha01 viene ritirata. La versione 2.4.0-alpha01 contiene questi commit.

Modifiche al comportamento

  • lifecycle-process ora utilizza androidx.startup per inizializzare ProcessLifecycleOwner.

    In precedenza, questa operazione veniva eseguita da androidx.lifecycle.ProcessLifecycleOwnerInitializer.

    Se in passato hai utilizzato tools:node="remove" ContentProvider per inizializzare il ciclo di vita del processo, devi invece 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.lifecycle.ProcessLifecycleInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
     </provider>
    

    (oppure)

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

Modifiche alle API

  • È stata aggiunta un'API Flow.flowWithLifecycle che emette valori dal flusso upstream quando il ciclo di vita si trova almeno in un determinato stato utilizzando l'API Lifecycle.repeatOnLifecycle. Si tratta di un'alternativa alla nuova API LifecycleOwner.addRepeatinJob. (I0f4cd)

Correzioni di bug

  • Da Lifecycle 2.3.1: la regola di linting NonNullableMutableLiveData ora può distinguere correttamente le variabili di campo con diversi valori nullabili. (b/169249668)

Lifecycle Viewmodel Compose Version 1.0.0

Versione 1.0.0-alpha07

16 giugno 2021

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07 viene ritirata. La versione 1.0.0-alpha07 contiene questi commit.

Modifiche alle API che causano interruzioni

  • viewModel() ora accetta un ViewModelStoreOwner facoltativo, semplificando la collaborazione con proprietari diversi da LocalViewModelStoreOwner. Ad esempio, ora puoi utilizzare viewModel(navBackStackEntry) per recuperare un ViewModel associato a un particolare grafico di navigazione. (I2628d, b/188693123)

Versione 1.0.0-alpha06

2 giugno 2021

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06 viene ritirata. La versione 1.0.0-alpha06 contiene questi commit.

Aggiornato per essere compatibile con Compose versione 1.0.0-beta08.

Versione 1.0.0-alpha05

18 maggio 2021

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05 viene ritirata. La versione 1.0.0-alpha05 contiene questi commit.

Nuove funzionalità

  • Aggiornato per essere compatibile con Compose versione 1.0.0-beta07.

Correzioni di bug

  • I file AndroidManifest di ui-test-manifest e ui-tooling-data ora sono compatibili con Android 12 (I6f9de, b/184718994)

Versione 1.0.0-alpha04

7 aprile 2021

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04 viene ritirata. La versione 1.0.0-alpha04 contiene questi commit.

Modifiche alle dipendenze

  • Questa versione consente a androidx.hilt:hilt-navigation-compose e androidx.navigation:navigation-compose di sincronizzare le dipendenze su androidx.compose.compiler:compiler:1.0.0-beta04 e androidx.compose.runtime:runtime:1.0.0-beta04. Per la versione 1.0.0, è necessario che il compilatore e il runtime corrispondano.

Versione 1.0.0-alpha03

10 marzo 2021

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha03 viene ritirata. La versione 1.0.0-alpha03 contiene questi commit.

Modifiche alle API

  • LocalViewModelStoreOwner.current ora restituisce un ViewModelStoreOwner annullabile per determinare meglio se un ViewModelStoreOwner è disponibile nella composizione corrente. Le API che richiedono un ViewModelStoreOwner, ad esempio viewModel() e NavHost, generano comunque un'eccezione se non è impostato un ViewModelStoreOwner. (Idf39a)

Lifecycle-Viewmodel-Compose versione 1.0.0-alpha02

24 febbraio 2021

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02 viene ritirata. La versione 1.0.0-alpha02 contiene questi commit.

Modifiche alle API

  • LocalViewModelStoreOwner ora dispone di provides funzioni che possono essere utilizzate con CompositionLocalProvider, sostituendo l'API asProvidableCompositionLocal(). (I45d24)

Lifecycle-Viewmodel-Compose versione 1.0.0-alpha01

10 febbraio 2021

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01 viene ritirata. La versione 1.0.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Il componente componibile viewModel() e LocalViewModelStoreOwner sono stati spostati da androidx.compose.ui.viewinterop a questo artefatto nel pacchetto androidx.lifecycle.viewmodel.compose. (I7a374)

Versione 2.3.1

Lifecycle Version 2.3.1

24 marzo 2021

androidx.lifecycle:lifecycle-*:2.3.1 viene ritirata. La versione 2.3.1 contiene questi commit.

Correzioni di bug

  • La regola di lint NonNullableMutableLiveData ora può distinguere correttamente le variabili di campo con valori nullabili diversi. (b/169249668)

Versione 2.3.0

Versione 2.3.0

10 febbraio 2021

androidx.lifecycle:lifecycle-*:2.3.0 viene ritirata. La versione 2.3.0 contiene questi commit.

Modifiche importanti dalla versione 2.2.0

  • Supporto di SavedStateHandle per le classi non serializzabili: SavedStateHandle ora supporta la serializzazione differita consentendoti di chiamare setSavedStateProvider() per una determinata chiave, fornendo un SavedStateProvider che riceverà un callback a saveState() quando a SavedStateHandle viene chiesto di salvare il proprio stato. Consulta la sezione Salvataggio di classi non serializzabili.
  • Applicazione del comportamento del ciclo di vita:
    • LifecycleRegistry ora applica DESTROYED come stato terminale.
    • LifecycleRegistry ora verifica che i suoi metodi vengano chiamati sul thread principale. È sempre stato un requisito per i cicli di vita di attività, frammenti e così via. L'aggiunta di osservatori da thread non principali ha causato arresti anomali difficili da rilevare in fase di runtime. Per gli oggetti LifecycleRegistry di proprietà dei tuoi componenti, puoi disattivare esplicitamente i controlli utilizzando LifecycleRegistry.createUnsafe(...), ma devi assicurarti che sia in atto una sincronizzazione corretta quando si accede a questo LifecycleRegistry da thread diversi.
  • Helper per lo stato del ciclo di vita e gli eventi: sono stati aggiunti metodi helper statici di downFrom(State), downTo(State), upFrom(State), upTo(State) a Lifecycle.Event per generare Event dato un State e la direzione di transizione. È stato aggiunto il metodo getTargetState() che fornisce lo stato State a cui il ciclo di vita passerà immediatamente dopo lo stato Event.
  • withStateAtLeast: sono state aggiunte le API Lifecycle.withStateAtLeast che attendono uno stato del ciclo di vita ed eseguono un blocco di codice non sospensivo in modo sincrono al momento del cambio di stato, per poi riprendere con il risultato. Queste API differiscono dai metodi when* esistenti in quanto non consentono l'esecuzione di codice di sospensione e non utilizzano un dispatcher personalizzato. (aosp/1326081)
  • API ViewTree: una nuova API ViewTreeLifecycleOwner.get(View) e ViewTreeViewModelStoreOwner.get(View) ti consente di recuperare rispettivamente LifecycleOwner e ViewModelStoreOwner, data un'istanza View. Per compilare correttamente questo campo, devi eseguire l'upgrade ad Activity 1.2.0 e Fragment 1.3.0 e ad AppCompat 1.3.0-alpha01 o versioni successive. Le estensioni Kotlin findViewTreeLifecycleOwner e findViewTreeViewModelStoreOwner sono disponibili rispettivamente in lifecycle-runtime-ktx e lifecycle-viewmodel-ktx.
  • LiveData.observe()Ritiro dell'estensione Kotlin: l'estensione Kotlin LiveData.observe() necessaria per utilizzare la sintassi lambda è ora ritirata in quanto non è necessaria quando si utilizza Kotlin 1.4.

Versione 2.3.0-rc01

16 dicembre 2020

androidx.lifecycle:lifecycle-*:2.3.0-rc01 viene ritirata. La versione 2.3.0-rc01 contiene questi commit.

Correzioni di bug

  • Il metodo keys() di SavedStateHandle ora è coerente prima e dopo il salvataggio dello stato: ora include le chiavi utilizzate in precedenza con setSavedStateProvider(), oltre a quelle utilizzate con set() e getLiveData(). (aosp/1517919, b/174713653)

Contributo esterno

Versione 2.3.0-beta01

1° ottobre 2020

androidx.lifecycle:lifecycle-*:2.3.0-beta01 viene ritirata. La versione 2.3.0-beta01 contiene questi commit.

Modifiche alle API

  • L'estensione Kotlin LiveData.observe() necessaria per utilizzare la sintassi lambda è ora deprecata in quanto non è necessaria quando si utilizza Kotlin 1.4. (I40d3f)

Correzioni di bug

Modifiche alla documentazione

  • Il generatore liveData e la documentazione asLiveData() sono stati aggiornati per includere i dettagli sulla modifica dei valori di timeout specificati. (aosp/1122324)

Versione 2.3.0-alpha07

19 agosto 2020

androidx.lifecycle:lifecycle-*:2.3.0-alpha07 viene ritirata. La versione 2.3.0-alpha07 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema di arresto anomalo nel controllo Lint di NullSafeMutableLiveData. (aosp/1395367)

Versione 2.3.0-alpha06

22 luglio 2020

androidx.lifecycle:lifecycle-*:2.3.0-alpha06 viene ritirata. La versione 2.3.0-alpha06 contiene questi commit.

Nuove funzionalità

  • Sono stati aggiunti metodi helper statici di downFrom(State), downTo(State), upFrom(State), upTo(State) a Lifecycle.Event per generare Event dato un State e la direzione della transizione. È stato aggiunto il metodo getTargetState() che fornisce lo stato State a cui il ciclo di vita passerà immediatamente dopo lo stato Event. (I00887)
  • Sono state aggiunte le API Lifecycle.withStateAtLeast che attendono uno stato del ciclo di vita ed eseguono un blocco di codice non sospeso in modo sincrono al momento del cambio di stato, per poi riprendere con il risultato. Queste API differiscono dai metodi when* esistenti in quanto non consentono l'esecuzione di codice di sospensione e non utilizzano un dispatcher personalizzato. (aosp/1326081)

Modifiche al comportamento

  • LifecycleRegistry ora applica DESTROYED come stato terminale. (I00887)
  • LifecycleRegistry ora verifica che i suoi metodi vengano chiamati sul thread principale. È sempre stato un requisito per i cicli di vita di attività, frammenti e così via. L'aggiunta di osservatori da thread non principali ha causato arresti anomali difficili da rilevare in fase di runtime. Per gli oggetti LifecycleRegistry di proprietà dei tuoi componenti, puoi disattivare esplicitamente i controlli utilizzando LifecycleRegistry.createUnsafe(...), ma devi assicurarti che sia in atto una sincronizzazione corretta quando si accede a questo LifecycleRegistry da thread diversi (Ie7280, b/137392809).

Correzioni di bug

  • È stato risolto un arresto anomalo in NullSafeMutableLiveData. (b/159987480)
  • È stato corretto un ObsoleteLintCustomCheck per i controlli Lint inclusi in lifecycle-livedata-core-ktx (e in particolare NullSafeMutableLiveData). (b/158699265)

Versione 2.3.0-alpha05

24 giugno 2020

androidx.lifecycle:lifecycle-*:2.3.0-alpha05 viene ritirata. La versione 2.3.0-alpha05 contiene questi commit.

Correzioni di bug

  • LiveData ora gestisce meglio i casi di rientro, evitando chiamate duplicate a onActive() o onInactive(). (b/157840298)
  • Risolto un problema per cui i controlli Lint non venivano eseguiti quando si utilizzava Android Studio 4.1 Canary 6 o versioni successive. (aosp/1331903)

Versione 2.3.0-alpha04

10 giugno 2020

androidx.lifecycle:lifecycle-*:2.3.0-alpha04 viene ritirata. La versione 2.3.0-alpha04 contiene questi commit.

Correzioni di bug

  • Risolto un arresto anomalo nel controllo NonNullableMutableLiveData Lint. (b/157294666)
  • Il controllo NonNullableMutableLiveData Lint ora copre molti più casi in cui è stato impostato un valore null su un MutableLiveData con un parametro di tipo non nullo. (b/156002218)

Versione 2.3.0-alpha03

20 maggio 2020

androidx.lifecycle:lifecycle-*:2.3.0-alpha03 vengono rilasciati. La versione 2.3.0-alpha03 contiene questi commit.

Nuove funzionalità

  • SavedStateHandle ora supporta la serializzazione differita consentendoti di chiamare setSavedStateProvider() per una determinata chiave, fornendo un SavedStateProvider che riceverà un callback a saveState() quando a SavedStateHandle viene chiesto di salvare il suo stato. (b/155106862)
  • Una nuova API ViewTreeViewModelStoreOwner.get(View) ti consente di recuperare il ViewModelStoreOwner contenitore dato un'istanza View. Per compilare correttamente questo campo, devi eseguire l'upgrade ad Activity 1.2.0-alpha05, Fragment 1.3.0-alpha05 e AppCompat 1.3.0-alpha01. È stata aggiunta un'estensione Kotlin findViewModelStoreOwner() a lifecycle-viewmodel-ktx. (aosp/1295522)

Correzioni di bug

  • È stato risolto un problema che impediva la pubblicazione dei controlli lint rilasciati in Lifecycle 2.3.0-alpha01 insieme all'artefatto lifecycle-livedata-core-ktx.MutableLiveData (b/155323109)

Versione 2.3.0-alpha02

29 aprile 2020

androidx.lifecycle:lifecycle-*:2.3.0-alpha02 viene ritirata. La versione 2.3.0-alpha02 contiene questi commit.

Modifiche alle API

  • SavedStateViewModelFactory ora ti consente di passare un Application nullo al suo costruttore per supportare meglio i casi in cui non è immediatamente disponibile e non è necessario il supporto per AndroidViewModel. (aosp/1285740)

Correzioni di bug

  • Miglioramento delle prestazioni di avvio a freddo evitando l'errore di verifica della classe sui dispositivi con API 28 e versioni precedenti. (aosp/1282118)

Versione 2.3.0-alpha01

4 marzo 2020

androidx.lifecycle:lifecycle-*:2.3.0-alpha01 viene ritirata. La versione 2.3.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Una nuova API ViewTreeLifecycleOwner.get(View) ti consente di recuperare il LifecycleOwner contenitore dato un'istanza View. Per compilare correttamente questo campo, devi eseguire l'upgrade ad Attività 1.2.0-alpha01 e Frammento 1.3.0-alpha01. Un'estensione Kotlin findViewTreeLifecycleOwner è disponibile in lifecycle-runtime-ktx. (aosp/1182361, aosp/1182956)
  • È stato aggiunto un nuovo controllo Lint che ti avvisa quando imposti un valore null su un MutableLiveData definito in Kotlin come non null. Questa opzione è disponibile quando utilizzi gli artefatti livedata-core-ktx o livedata-ktx. (aosp/1154723, aosp/1159092)
  • È disponibile un nuovo artefatto lifecycle-runtime-testing che fornisce un TestLifecycleOwner che implementa LifecycleOwner e fornisce un Lifecycle modificabile e thread-safe. (aosp/1242438)

Correzioni di bug

  • L'artefatto lifecycle-runtime ora ha un nome del pacchetto univoco. (aosp/1187196)
2.2.0

Versione 2.2.0

ViewModel-Savedstate versione 2.2.0

5 febbraio 2020

androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0 viene ritirata. La versione 2.2.0 contiene questi commit.

Lifecycle ViewModel SavedState ora condivide la stessa versione degli altri artefatti del ciclo di vita. Il comportamento di 2.2.0 è identico a quello di 1.0.0.

Versione 2.2.0

22 gennaio 2020

androidx.lifecycle:lifecycle-*:2.2.0 viene ritirata. La versione 2.2.0 contiene questi commit.

Modifiche importanti dalla versione 2.1.0

  • Integrazione delle coroutine del ciclo di vita: il nuovo artefatto lifecycle-runtime-ktx aggiunge l'integrazione tra il ciclo di vita e le coroutine Kotlin. Anche lifecycle-livedata-ktx è stato ampliato per sfruttare le coroutine. Per maggiori dettagli, consulta Utilizzare le coroutine Kotlin con i componenti dell'architettura.
  • Deprecazione di ViewModelProviders.of(): ViewModelProviders.of() è stato ritirato. Puoi passare un Fragment o un FragmentActivity al nuovo costruttore ViewModelProvider(ViewModelStoreOwner) per ottenere la stessa funzionalità quando utilizzi Fragment 1.2.0.
  • lifecycle-extensions Ritiro dell'artefatto: con il ritiro di ViewModelProviders.of() sopra indicato, questa release segna il ritiro dell'ultima API in lifecycle-extensions e questo artefatto deve ora essere considerato ritirato nella sua interezza. Ti consigliamo vivamente di utilizzare gli artefatti del ciclo di vita specifici di cui hai bisogno (ad esempio lifecycle-service se utilizzi LifecycleService e lifecycle-process se utilizzi ProcessLifecycleOwner) anziché lifecycle-extensions, in quanto non verrà rilasciata una versione futura di 2.3.0 di lifecycle-extensions.
  • Gradle Incremental Annotation Processor: il processore di annotazioni di Lifecycle è incrementale per impostazione predefinita. Se la tua app è scritta nel linguaggio di programmazione Java 8, puoi utilizzare DefautLifecycleObserver; se è scritta nel linguaggio di programmazione Java 7, puoi utilizzare LifecycleEventObserver.

Versione 2.2.0-rc03

4 dicembre 2019

androidx.lifecycle:lifecycle-*:2.2.0-rc03 viene ritirata. La versione 2.2.0-rc03 contiene questi commit.

Correzioni di bug

  • È stato corretto un errore che si verificava quando un ViewModel simulato veniva archiviato in ViewModelStore e interrogato in un secondo momento con la factory predefinita.
  • Correggi un utilizzo di Dispatchers.Main.immediate in launchWhenCreated e metodi simili da chiamare in modo sincrono durante l'evento del ciclo di vita corrispondente. (aosp/1156203)

Contributi esterni

  • Grazie ad Anders Järleberg per aver contribuito alla correzione. (aosp/1156203)
  • Grazie a Vsevolod Tolstopyatov di Jetbrains per aver esaminato un'implementazione dell'esecuzione in linea.

Modifiche alle dipendenze

  • Lifecycle Extensions ora dipende da Fragment 1.2.0-rc03.

Versione 2.2.0-rc02

7 novembre 2019

androidx.lifecycle:lifecycle-*:2.2.0-rc02 viene ritirata. La versione 2.2.0-rc02 contiene questi commit.

Correzioni di bug

  • È stato corretto un bug nella configurazione di ProGuard della libreria che interessava i dispositivi con API 28+ se l'API di destinazione è inferiore a 29. (b/142778206)

Versione 2.2.0-rc01

23 ottobre 2019

androidx.lifecycle:lifecycle-*:2.2.0-rc01 viene ritirata. La versione 2.2.0-rc01 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema per cui launchWhenCreated e i metodi correlati venivano eseguiti un frame dopo il metodo del ciclo di vita associato a causa dell'utilizzo di Dispatchers.Main anziché di Dispatchers.Main.immediate. (aosp/1145596)

Contributi esterni

  • Grazie a Nicklas Ansman per aver contribuito alla correzione. (aosp/1145596)

Versione 2.2.0-beta01

9 ottobre 2019

androidx.lifecycle:lifecycle-*:2.2.0-beta01 viene ritirata. La versione 2.2.0-beta01 contiene questi commit.

Correzioni di bug

  • È stato corretto un problema di regressione introdotto in Lifecycle 2.2.0-alpha05 nell'ordinamento di ProcessLifecycleOwner e nel passaggio di LifecycleOwner dell'attività a stato avviato e ripreso sui dispositivi Android 10. (aosp/1128132)
  • È stata corretta una regressione introdotta in Lifecycle 2.2.0-alpha05 che causava un NullPointerException quando si utilizzava la versione 2.0.0 o 2.1.0 di lifecycle-process. (b/141536990)

Versione 2.2.0-alpha05

18 settembre 2019

androidx.lifecycle:lifecycle-*:2.2.0-alpha05 viene ritirata. La versione 2.2.0-alpha05 contiene questi commit.

Correzioni di bug

  • È stata corretta una race condition nel builder di LiveData delle coroutine. b/140249349

Versione 2.2.0-alpha04

5 settembre 2019

androidx.lifecycle:lifecycle-*:2.2.0-alpha04 viene ritirata. I commit inclusi in questa versione sono disponibili qui.

Nuove funzionalità

  • lifecycleScope, whenCreated, whenStarted, whenResumed, viewModelScope e l'implementazione sottostante di liveData ora utilizzano Dispatchers.Main.immediate anziché Dispatchers.Main. (b/139740492)

Contributi esterni

  • Grazie a Nicklas Ansman per aver contribuito al passaggio a Dispatchers.Main.immediate. (aosp/1106073)

Versione 2.2.0-alpha03

7 agosto 2019

androidx.lifecycle:lifecycle-*:2.2.0-alpha03 viene ritirata. I commit inclusi in questa versione sono disponibili qui.

Nuove funzionalità

Modifiche all'API

  • ViewModelProviders.of() è stato ritirato. Puoi passare un Fragment o un FragmentActivity al nuovo costruttore ViewModelProvider(ViewModelStoreOwner) per ottenere la stessa funzionalità. (aosp/1009889)

Versione 2.2.0-alpha02

2 luglio 2019

androidx.lifecycle:*:2.2.0-alpha02 viene ritirata. I commit inclusi in questa versione sono disponibili qui.

Modifiche all'API

  • LiveDataScope.initialValue è stato sostituito con LiveDataScope.latestValue, che monitorerà il valore emesso corrente del blocco liveData.
  • È stato aggiunto un nuovo overload al builder liveData che riceve il parametro timeout come tipo Duration

Versione 2.2.0-alpha01

7 maggio 2019

androidx.lifecycle:*:2.2.0-alpha01 viene ritirata. I commit inclusi in questa versione sono disponibili qui.

Nuove funzionalità

  • Questa release aggiunge nuove funzionalità che supportano le coroutine Kotlin per Lifecycle e LiveData. La documentazione dettagliata è disponibile qui.

ViewModel-SavedState versione 1.0.0

Versione 1.0.0

22 gennaio 2020

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0 viene ritirata. La versione 1.0.0 contiene questi commit.

Funzionalità importanti nella versione 1.0.0

  • È stata aggiunta la nuova classe SavedStateHandle. Consente ai tuoi corsi ViewModel di accedere allo stato salvato e di contribuire. Questo oggetto può essere ricevuto nel costruttore della classe ViewModel e le fabbriche fornite per impostazione predefinita da Fragment e AppCompatActivity inseriranno SavedStateHandle automaticamente.
  • È stata aggiunta AbstractSavedStateViewModelFactory. Ti consente di creare fabbriche personalizzate per i tuoi ViewModel e di fornire loro l'accesso a SavedStateHandle.

ViewModel-Savedstate versione 1.0.0-rc03

4 dicembre 2019

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03 viene ritirata. La versione 1.0.0-rc03 contiene questi commit.

Modifiche alle dipendenze

  • Lifecycle ViewModel SavedState ora dipende da Lifecycle 2.2.0-rc03.

Viewmodel-Savedstate versione 1.0.0-rc02

7 novembre 2019

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc02 viene ritirata. La versione 1.0.0-rc02 contiene questi commit.

Modifiche alle dipendenze

  • Ora dipende dal ciclo di vita 2.2.0-rc02.

ViewModel-SavedState versione 1.0.0-rc01

23 ottobre 2019

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01 viene rilasciato senza modifiche rispetto a 1.0.0-beta01. La versione 1.0.0-rc01 contiene questi commit.

ViewModel-Savedstate versione 1.0.0-beta01

9 ottobre 2019

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01 viene ritirata. La versione 1.0.0-beta01 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema per cui l'accesso a un ViewModel SavedState per la prima volta in Activity.onActivityResult() generava un IllegalStateException. (b/139093676)
  • È stato corretto un IllegalStateException durante l'utilizzo di AbstractSavedStateViewModelFactory. (b/141225984)

ViewModel-SavedState versione 1.0.0-alpha05

18 settembre 2019

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha05 viene ritirata. La versione 1.0.0-alpha05 contiene questi commit.

Modifiche all'API

  • SavedStateViewModelFactory non estende più AbstractSavedStateViewModelFactory e SavedStateHandle viene creato solo per i ViewModels che lo hanno richiesto (aosp/1113593)

ViewModel-SavedState versione 1.0.0-alpha03

7 agosto 2019

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03 viene ritirata. I commit inclusi in questa versione sono disponibili qui.

Modifiche che provocano un errore

ViewModel-SavedState versione 1.0.0-alpha02

2 luglio 2019

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha02 viene ritirata. I commit inclusi in questa versione sono disponibili qui.

Nuove funzionalità

  • È stato aggiunto l'overload SavedStateHandle.getLiveData() che accetta un valore predefinito.

Modifiche alle API

  • SavedStateVMFactory è stato rinominato in SavedStateViewModelFactory.
  • AbstractSavedStateVMFactory è stato rinominato in AbstractSavedStateViewModelFactory.

ViewModel-Savedstate versione 1.0.0-alpha01

13 marzo 2019

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01 viene ritirata. Il log completo dei commit per questa release iniziale è disponibile qui.

Nuove funzionalità

  • Ora ViewModels può contribuire a savedstate. Per farlo, utilizza la factory SavedStateVMFactory del view model appena introdotto e il tuo ViewModel deve avere un costruttore che riceve l'oggetto SavedStateHandle come parametro.

Versione 2.1.0

Modifiche importanti dalla versione 2.0.0

  • È stato aggiunto LifecycleEventObserver per i casi in cui è necessario un flusso di eventi del ciclo di vita. Si tratta di un'API pubblica anziché di una classe GenericLifecycleObserver nascosta.
  • Sono state aggiunte estensioni KTX per i metodi LiveData.observe e Transformations.*.
  • È stato aggiunto Transformations.distinctUntilChanged, che crea un nuovo oggetto LiveData che non emette un valore finché il valore dell'origine LiveData non è stato modificato.
  • È stato aggiunto il supporto delle coroutine in ViewModels aggiungendo la proprietà di estensione ViewModel.viewModelScope.

Versione 2.1.0

5 settembre 2019

androidx.lifecycle:lifecycle-*:2.1.0 viene ritirata. I commit inclusi in questa versione sono disponibili qui.

Versione 2.1.0-rc01

2 luglio 2019

androidx.lifecycle:*:2.1.0-rc01 viene rilasciato senza modifiche rispetto a androidx.lifecycle:*:2.1.0-beta01. I commit inclusi in questa versione sono disponibili qui.

Versione 2.1.0-beta01

7 maggio 2019

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

Nuove funzionalità

  • I cicli di vita sono stati portati alla versione beta: le API introdotte nelle versioni alpha precedenti, come le funzioni di estensione liveData per trasformazioni e osservazioni, l'inizializzazione ViewModel con delega di proprietà e altre, sono state stabilizzate e non verranno modificate.

Versione 2.1.0-alpha04

3 aprile 2019

androidx.lifecycle:*:2.1.0-alpha04 viene ritirata. I commit inclusi in questa versione sono disponibili qui.

Modifiche all'API

  • Modifica che provoca un errore: l'API sottostante by viewModels() e by activityViewModels() è stata modificata per supportare direttamente un ViewModelStore anziché solo un ViewModelStoreOwner. (aosp/932932)

Versione 2.1.0-alpha03

13 marzo 2019

androidx.lifecycle:*:2.1.0-alpha03 viene ritirata. L'elenco completo dei commit inclusi in questa versione è disponibile qui.

Modifiche all'API

  • La carta ViewModelProvider.KeyedFactory è stata rimossa. La seconda interfaccia oltre a ViewModelProvider.Factory non si integrava bene con le nuove funzionalità, come la delega di proprietà in Kotlin by viewmodels {}. (aosp/914133)

Versione 2.1.0-alpha02

30 gennaio 2019

androidx.lifecycle 2.1.0-alpha02 viene ritirata.

Modifiche all'API

  • LifecycleRegistry ora contiene un metodo setCurrentState() che sostituisce il metodo setState(), ora deprecato. (aosp/880715)

Correzioni di bug

  • È stato risolto un problema per cui le istanze di mock ViewModel si arrestavano in modo anomalo quando veniva cancellato il ViewModelStore contenitore. b/122273087

Versione 2.1.0-alpha01

17 dicembre 2018

androidx.lifecycle 2.1.0-alpha01 viene ritirata.

Nuove funzionalità

  • È stato aggiunto LifecycleEventObserver per i casi in cui è necessario un flusso di eventi del ciclo di vita. Si tratta di un'API pubblica anziché di una classe GenericLifecycleObserver nascosta.
  • Sono state aggiunte estensioni KTX per i metodi LiveData.observe e Transformations.*.
  • È stato aggiunto il metodo Transformations.distinctUntilChanged. Crea un nuovo oggetto LiveData che non emette un valore finché il valore LiveData di origine non è stato modificato.
  • Supporto delle coroutine in ViewModels: è stata aggiunta la proprietà di estensione ViewModel.viewModelScope.
  • È stato aggiunto ViewModelProvider.KeyedFactory, una factory per ViewModels che riceve key e Class nel metodo create.

Versione 2.0.0

Versione 2.0.0

21 settembre 2018

Lifecycle 2.0.0 viene rilasciato con una correzione di bug da 2.0.0-rc01 in ViewModel.

Correzioni di bug

  • Correzione di una regola ProGuard di ViewModel che rimuoveva in modo errato i costruttori b/112230489

Versione 2.0.0-beta01

2 luglio 2018

Correzioni di bug

  • Regola ProGuard di LifecycleObserver corretta per mantenere solo le implementazioni, non le sottointerfacce b/71389427
  • Regole ProGuard di ViewModel corrette per consentire l'offuscamento e la riduzione

Versioni precedenti ad AndroidX

Per le versioni precedenti di Lifecycle di AndroidX che seguono, includi queste dipendenze:

dependencies {
    def lifecycle_version = "1.1.1"

    // ViewModel and LiveData
    implementation "android.arch.lifecycle:extensions:$lifecycle_version"
    // alternatively - just ViewModel
    implementation "android.arch.lifecycle:viewmodel:$lifecycle_version" // For Kotlin use viewmodel-ktx
    // alternatively - just LiveData
    implementation "android.arch.lifecycle:livedata:$lifecycle_version"
    // alternatively - Lifecycles only (no ViewModel or LiveData).
    //     Support library depends on this lightweight import
    implementation "android.arch.lifecycle:runtime:$lifecycle_version"

    annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version" // For Kotlin use kapt instead of annotationProcessor
    // alternately - if using Java8, use the following instead of compiler
    implementation "android.arch.lifecycle:common-java8:$lifecycle_version"

    // optional - ReactiveStreams support for LiveData
    implementation "android.arch.lifecycle:reactivestreams:$lifecycle_version"

    // optional - Test helpers for LiveData
    testImplementation "android.arch.core:core-testing:$lifecycle_version"
}

Versione 1.1.1

21 marzo 2018

Solo una piccola modifica: android.arch.core.util.Function è stato spostato da arch:runtime a arch:common. Ciò consente di utilizzarlo senza la dipendenza di runtime, ad esempio in paging:common di seguito.

lifecycle:common è una dipendenza di lifecycle:runtime, quindi questa modifica non influisce direttamente su lifecycle:runtime, ma solo sui moduli che dipendono direttamente da lifecycle:common, come la paginazione.

Versione 1.1.0

22 gennaio 2018

Modifiche all'imballaggio

Sono ora disponibili nuove dipendenze molto più piccole:

  • android.arch.lifecycle:livedata:1.1.0
  • android.arch.lifecycle:viewmodel:1.1.0

Modifiche alle API

  • I campi LifecycleActivity e LifecycleFragment ritirati sono stati rimossi. Utilizza FragmentActivity, AppCompatActivity o supporta Fragment.
  • Sono state aggiunte @NonNull annotazioni a ViewModelProviders e ViewModelStores
  • Il costruttore ViewModelProviders è stato ritirato. Utilizza direttamente i relativi metodi statici.
  • ViewModelProviders.DefaultFactory è stato ritirato. Utilizza ViewModelProvider.AndroidViewModelFactory.
  • È stato aggiunto il metodo statico ViewModelProvider.AndroidViewModelFactory.getInstance(Application) per recuperare un Factory statico adatto alla creazione di istanze ViewModel e AndroidViewModel.