Cykl życia

Komponenty uwzględniające cykl życia wykonują działania w odpowiedzi na zmianę stanu cyklu życia innego komponentu, np. aktywności i fragmentów. Te komponenty pomagają tworzyć lepiej zorganizowany, a często lżejszy kod, który jest łatwiejszy w utrzymaniu.

Ta tabela zawiera listę wszystkich artefaktów w grupie androidx.lifecycle.

Artefakt Wersja stabilna Wersja kandydująca do publikacji Wersja Beta Wersja alfa
lifecycle-* 2.9.1 - - -
lifecycle-viewmodel-navigation3 - - - 1.0.0-alpha03
Ostatnia aktualizacja tej biblioteki: 2 lipca 2025 r.

Deklarowanie zależności

Aby dodać zależność od komponentu Lifecycle, musisz dodać repozytorium Google Maven do projektu. Więcej informacji znajdziesz w repozytorium Maven Google.

Dodaj zależności dotyczące potrzebnych artefaktów w pliku build.gradle aplikacji lub modułu:

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")
    }
    

Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.

Opinia

Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli odkryjesz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nową kartę, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz dodać swój głos do istniejącego problemu, klikając przycisk gwiazdki.

Tworzenie nowego problemu

Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.

Lifecycle ViewModel Navigation3 w wersji 1.0.0

Wersja 1.0.0-alpha03

2 lipca 2025 r.

androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha03androidx.lifecycle:lifecycle-viewmodel-navigation3-android:1.0.0-alpha03 zostały opublikowane. Wersja 1.0.0-alpha03 zawiera te commity.

Zmiany zależności

Wersja 1.0.0-alpha02

18 czerwca 2025 r.

androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha02androidx.lifecycle:lifecycle-viewmodel-navigation3-android:1.0.0-alpha02 zostały opublikowane. Wersja 1.0.0-alpha02 zawiera te zmiany.

Aktualizacje zależności

Wersja 1.0.0-alpha01

23 maja 2025 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha01 Wersja 1.0.0-alpha01 zawiera te zmiany.

Nowe funkcje

  • Lifecycle ViewModel Navigation3 to nowa biblioteka stworzona obok Navigation3, która zapewnia integrację z ViewModels. androidx.lifecycle:lifecycle-viewmodel-navigation3 artefakt zawiera ViewModelStoreNavEntryDecorator, który zapewnia unikalny ViewModelStoreOwner dla zawartości każdego NavEntry. Zawiera też rememberViewModelStoreNavEntryDecorator(), aby mieć pewność, że dekorator jest prawidłowo obsługiwany przez zmiany konfiguracji.
val viewModelDecorator = rememberViewModelStoreNavEntryDecorator()

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

Wersja 2.9

Wersja 2.9.1

4 czerwca 2025 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.1 Wersja 2.9.1 zawiera te zmiany.

Poprawki błędów

  • Naprawiono problem z nieusuwaniem stanów SavedStateHandle.remove(key) przez SavedStateHandle.getMutableStateFlow(key). (d5f939, b/418746333)

Wersja 2.9.0

7 maja 2025 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0 Wersja 2.9.0 zawiera te zmiany.

Ważne zmiany od wersji 2.8.0

  • Dostępny jest nowy artefakt androidx.lifecycle:lifecycle-viewmodel-testing KMP, który zawiera klasę ViewModelScenario do testowania ViewModels w izolacji, z obsługą onClearedSavedStateHandle, a także testowania procesu zakończenia i ponownego utworzenia za pomocą recreate().
  • Dodaj getMutableStateFlow do SavedStateHandle, aby zwrócić MutableStateFlow. Ta nowa funkcja jest dostępna tylko w przypadku kluczy i nie można jej używać z getLiveData. Jeśli spróbujesz użyć obu tych metod do uzyskania dostępu do tego samego stanu, zostanie zgłoszony wyjątek.
  • CreationExtras zawiera teraz przeciążenia operatorów podobne do map, które umożliwiają idiomatyczną manipulację treściami w języku Kotlin. Umożliwia używanie właściwości in, +=+ z właściwością CreationExtras.

Obsługa serializacji KotlinX

  • Dzięki obsłudze serializacji KotlinX dodanej w SavedState 1.3.0 wprowadziliśmy saved, delegata właściwości leniwej, aby ułatwić przechowywanie klas @SerializableSavedStateHandle i automatyczne przywracanie tych klas po zakończeniu i ponownym utworzeniu procesu. Pamiętaj, że saved delegat jest leniwy i nie wywoła init lambdy ani nie zapisze niczego w SavedStateHandle, dopóki nie zostanie do niego uzyskany dostęp.

    @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

  • Moduł lifecycle-testing jest teraz zgodny z KMP, w tym z interfejsami API, takimi jak TestLifecycleOwner.
  • Moduł lifecycle-viewmodel-savedstate jest teraz zgodny z KMP, w tym z interfejsami API, takimi jak SavedStateHandle.
  • androidx.compose.ui.platform.LocalLifecycleOwner jest teraz dostępny w wspólnym zestawie źródeł.
  • NewInstanceFactory jest teraz dostępny na platformach JVM Desktop i Android.

Zmiany w zachowaniu

  • Stan Lifecycle.DESTROYED jest stanem końcowym i każda próba przeniesienia Lifecycle z tego stanu do innego stanu spowoduje teraz wystąpienie błędu IllegalStateException.
  • SavedStateHandle nie zawiera już żadnych SavedStateProvider.saveState(), w przypadku których zwrócona wartość Bundle jest pusta.

Wersja 2.9.0-rc01

23 kwietnia 2025 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0-rc01 Wersja 2.9.0-rc01 zawiera te zmiany.

Wersja 2.9.0-beta01

9 kwietnia 2025 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0-beta01 Wersja 2.9.0-beta01 zawiera te zmiany.

Zmiany w interfejsie API

  • Lifecycle ViewModel Compose korzysta teraz z tej samej konfiguracji Kotlin Multiplatform co Compose Runtime w wersji 1.7.1 i nowszej – artefakty -desktop zostały usunięte, a dodano artefakty -jvmStubs-linuxx64Stubs. Żaden z tych celów nie jest przeznaczony do użytku. Są to symbole zastępcze, które mają pomóc w pracach nad Jetbrains Compose. (I5cb14, b/406592090)

Aktualizacje zależności

  • Ta biblioteka jest teraz kierowana na poziom języka Kotlin 2.0 i wymaga KGP w wersji 2.0.0 lub nowszej. (Idb6b5)
  • Lifecycle ViewModel Compose zależy teraz od Compose w wersji 1.7.8. (I5cb14, b/406592090)

Wersja 2.9.0-alpha13

26 marca 2025 r.

androidx.lifecycle:lifecycle-*:2.9.0-alpha13 została wydana bez znaczących zmian publicznych. Wersja 2.9.0-alpha13 zawiera te zmiany.

Wersja 2.9.0-alpha12

12 marca 2025 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0-alpha12 Wersja 2.9.0-alpha12 zawiera te zmiany.

Zmiany w interfejsie API

  • Dodaj adnotację @MainThread do ViewModelProvider.get na wszystkich obsługiwanych platformach KMP. (I7e8dd, b/397736115)
  • Zmień nazwę SavedState*Delegates na SavedState*Delegate. (I8589b, b/399629301)

Wersja 2.9.0-alpha11

26 lutego 2025 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0-alpha11 Wersja 2.9.0-alpha11 zawiera te zmiany.

Zmiany w interfejsie API

  • Dodaj parametr SavedStateConfig do delegatów saved() (I39b3a)

Wersja 2.9.0-alpha10

12 lutego 2025 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0-alpha10 Wersja 2.9.0-alpha10 zawiera te zmiany.

Zmiany w interfejsie API

  • Przenieś MutableStateSerializer do savedstate-composelifecycle-viewmodel-compose. (I4f690, b/378895074)

Wkład zewnętrzny

  • Dodaje nowy problem Lint dotyczący wywoływania funkcji Lifecycle::currentState w kompozycji, zamiast tego sugeruje użycie funkcji currentStateAsalue().value, aby mieć pewność, że zmiany stanu cyklu życia prawidłowo powodują ponowne komponowanie. Dziękujemy Stevenowi Schoenowi! (Iad484)

Wersja 2.9.0-alpha09

29 stycznia 2025 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0-alpha09 Wersja 2.9.0-alpha09 zawiera te zmiany.

Nowe funkcje

  • Dodaj MutableStateSerializer do serializacji androidx.compose.runtime.MutableState. (Idfc48, b/378895074)

Zmiany w interfejsie API

  • Zastąpienie przeciążonych funkcji delegata SavedStateHandle.saved() parametrami domyślnymi (Icd1c1)
  • AbstractSavedStateViewModelFactory jest wycofana, ponieważ tworzy SavedStateHandle dla każdego ViewModel, co powoduje niepotrzebne obciążenie. Aby skuteczniej tworzyć ViewModel, używaj zamiast tego atrybutu ViewModelProvider.Factory z atrybutem CreationExtras.createSavedStateHandle. (Ia920b, b/388590327)

Wersja 2.9.0-alpha08

11 grudnia 2024 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0-alpha08 Wersja 2.9.0-alpha08 zawiera te zmiany.

Nowe funkcje

  • Dodaj ViewModelScenario.recreate, aby zasymulować zakończenie procesu systemowego, odtwarzając ViewModel poddany testowi i wszystkie powiązane komponenty. (Id6a69, b/381063087)
  • Instancje LifecycleOwnerViewModelStoreOwner pobrane za pomocą odpowiednich interfejsów API findViewTree można teraz rozwiązywać za pomocą rozłącznych elementów nadrzędnych widoku, np. ViewOverlay. Więcej informacji o rozłącznych elementach nadrzędnych widoku znajdziesz w informacjach o wersji podstawowej lub w dokumentacji w ViewTree.setViewTreeDisjointParent. (I800f4)

Zmiany w interfejsie API

  • Ujednolicenie nazewnictwa i organizacji pakietów zgodnie z SavedStateRegistryOwnerDelegate (I8c135, b/376026744)

Poprawki błędów

  • Ta biblioteka używa teraz adnotacji o wartości null JSpecify, które są używane w typach. Deweloperzy korzystający z języka Kotlin powinni używać tego argumentu kompilatora, aby wymusić prawidłowe użycie: -Xjspecify-annotations=strict (jest to domyślne ustawienie od wersji 2.1.0 kompilatora Kotlin). (Ie4340, b/326456246)
  • Sekwencja czyszczenia dokumentu ViewModel.onCleared. (I586c7, b/363984116)

Wersja 2.9.0-alpha07

13 listopada 2024 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0-alpha07 Wersja 2.9.0-alpha07 zawiera te zmiany.

Zgodność z Kotlin Multiplatform

  • Biblioteka Lifecycle ViewModel SavedState jest teraz zgodna z KMP. Dzięki temu możesz używać SavedStateHandle w kodzie wspólnym. (Ib6394, b/334076622)

Obsługa serializacji KotlinX

  • Dzięki obsłudze serializacji KotlinX dodanej w SavedState 1.3.0-alpha05 wprowadziliśmy saved, delegata właściwości leniwej, aby ułatwić przechowywanie klas @SerializableSavedStateHandle i automatyczne przywracanie tych klas po zakończeniu i ponownym utworzeniu procesu. Pamiętaj, że saved delegat jest leniwy i nie wywoła init lambdy ani nie zapisze niczego w SavedStateHandle, dopóki nie zostanie do niego uzyskany dostęp. (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
        }
    }
    

Zmiany w interfejsie API

  • Dodaj getMutableStateFlow do SavedStateHandle, aby zwrócić MutableStateFlow. Ta nowa funkcja jest dostępna tylko w przypadku kluczy i nie można jej używać z getLiveData. Jeśli spróbujesz użyć obu tych metod do uzyskania dostępu do tego samego stanu, zostanie zgłoszony wyjątek. (I04a4f, b/375408415)

Wersja 2.9.0-alpha06

30 października 2024 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0-alpha06 Wersja 2.9.0-alpha06 zawiera te zmiany.

Zmiany w zachowaniu

  • Stan Lifecycle.DESTROYED jest stanem końcowym i każda próba przeniesienia Lifecycle z tego stanu do innego stanu spowoduje teraz wystąpienie błędu IllegalStateException. (I116c4, b/370577987)
  • SavedStateHandle nie zawiera już żadnych SavedStateProvider.saveState(), w przypadku których zwrócona wartość Bundle jest pusta. (I910b5, b/370577987)

Poprawki błędów

  • Lifecycle.eventFlow teraz prawidłowo kończy się, gdy Lifecycle ma wartość DESTROYED (I293b2, b/374043130)

Wersja 2.9.0-alpha05

16 października 2024 r.

Wersja androidx.lifecycle:lifecycle-*:2.9.0-alpha05 nie zawiera znaczących zmian. Wersja 2.9.0-alpha05 zawiera te zmiany.

Wersja 2.9.0-alpha04

2 października 2024 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0-alpha04 Wersja 2.9.0-alpha04 zawiera te zmiany.

Kotlin Multiplatform

  • Moduł lifecycle-viewmodel-savedstate jest teraz skonfigurowany tak, aby był zgodny z KMP. Przygotowujemy się w ten sposób do udostępnienia w przyszłej wersji interfejsów API takich jak SavedStateHandle w wspólnym zestawie źródeł. (I503ed, I48764, b/334076622)

Wersja 2.9.0-alpha03

18 września 2024 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0-alpha03 Wersja 2.9.0-alpha03 zawiera te zmiany.

Poprawki błędów

  • Z sekcji Cykl życia2.8.6: NullSafeMutableLiveData błąd Lint ma ulepszoną obsługę inteligentnego rzutowania, co pozwala uniknąć fałszywych alarmów. (85fed6, b/181042665)

Aktualizacje zależności

Wersja 2.9.0-alpha02

4 września 2024 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0-alpha02 Wersja 2.9.0-alpha02 zawiera te zmiany.

Poprawki błędów

  • W sekcji Cykl życia2.8.5: zaktualizuj androidx.lifecycle.ReportFragment reguły ProGuard, aby zezwalały na zaciemnianie . (ff898e1)

Wkład zewnętrzny

  • Przenieś androidx.compose.ui.platform.LocalLifecycleOwner do wspólnego zestawu źródeł (KMP). Dziękujemy Ivanowi Matkovowi z JetBrains za pomoc. (8cd5d03)
  • cyklu życia2.8.5: delegat rozszerzenia SavedStateHandle.saveable` obsługuje teraz wartości dopuszczające wartość null. Dziękujemy Romanowi Kalukiewiczowi za pomoc. (0d78ea6)

Wersja 2.9.0-alpha01

7 sierpnia 2024 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0-alpha01 Wersja 2.9.0-alpha01 zawiera te zmiany.

Kotlin Multiplatform

  • lifecycle-testing jest teraz zgodne z KMP. (Iea41e)
  • Dodanie obsługi linuxArm64 platformy wieloplatformowej Kotlin (I139d3, b/338268719)

Nowe funkcje

  • Dostępny jest nowy artefakt KMP, który zawiera klasę ViewModelScenario do testowania elementów ViewModel w izolacji, z obsługą onCleared (wszystkie platformy) i SavedStateHandle (tylko Android).androidx.lifecycle:lifecycle-viewmodel-testing (337f68d, c9b3409, 9799a95c, b/264602919)
  • Tworzenie obiektu ViewModel za pomocą obiektu ViewModelProvider jest teraz bezpieczne dla wątków. Usunięto adnotacje @MainThread. (Ifd978, b/237006831)

Zmiany w interfejsie API

  • Dodaj funkcję fabryczną CreationExtras.Key(), aby uprościć tworzenie anonimowych obiektów CreationExtras.Key. (I970ee)
  • CreationExtras zawiera teraz przeciążenia operatorów podobne do map, które umożliwiają idiomatyczną manipulację treściami w języku Kotlin. Umożliwia używanie właściwości in, +=+ z właściwością CreationExtras. (Ib4353)
  • CreationExtras implementuje teraz metody equals, hashCodetoString. (Ib4353)
  • NewInstanceFactory jest teraz dostępny na platformach JVM Desktop i Android. (d3d0892)
  • Właściwość rozszerzenia wbudowanego, która bezpiecznie udostępnia bazową aplikację w języku Kotlin w wersji 2.0 (I39df2)

Poprawki błędów

  • Usunęliśmy ręczne określanie dostępu do nowych interfejsów API platformy, ponieważ odbywa się to automatycznie za pomocą modelowania interfejsu API podczas korzystania z R8 z AGP 7.3 lub nowszym (np. R8 w wersji 3.3) oraz w przypadku wszystkich kompilacji podczas korzystania z AGP 8.1 lub nowszego (np. D8 w wersji 8.1). Klienci, którzy nie korzystają z AGP, powinni zaktualizować D8 do wersji 8.1 lub nowszej. Więcej szczegółów znajdziesz w tym artykule. (If6b4c, b/345472586)

Wersja 2.8

Wersja 2.8.7

30 października 2024 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.7 Wersja 2.8.7 zawiera te zmiany.

Zmiany w interfejsie API

  • androidx.compose.ui.platform.LocalLifecycleOwner jest teraz dostępny w zestawie wspólnych źródeł (KMP). (6a3f5b3)
  • lifecycle-runtime-compose: usunięto desktop artefaktów, a dodano -jvmStubs-linuxx64Stubs artefakty. Żaden z tych celów nie jest przeznaczony do użytku. Są to symbole zastępcze, które mają pomóc w pracach nad Jetbrains Compose. (6a3f5b3)

Wersja 2.8.6

18 września 2024 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.6 Wersja 2.8.6 zawiera te zmiany.

Poprawki błędów

  • NullSafeMutableLiveDataBłąd Lint ma ulepszoną obsługę inteligentnego rzutowania, co pozwala uniknąć fałszywych trafień. (85fed6, b/181042665)

Aktualizacje zależności

Wersja 2.8.5

4 września 2024 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.5 Wersja 2.8.5 zawiera te zmiany.

Poprawki błędów

  • Zaktualizuj reguły androidx.lifecycle.ReportFragment ProGuard, aby zezwalały na zaciemnianie . (ff898e1)

Wkład zewnętrzny

  • Delegat rozszerzenia SavedStateHandle.saveable obsługuje teraz wartości dopuszczające wartość null. Dziękujemy Romanowi Kalukiewiczowi za pomoc. (0d78ea6)

Wersja 2.8.4

24 lipca 2024 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.4 Wersja 2.8.4 zawiera te zmiany.

Poprawki błędów

  • LiveData.asFlow() teraz prawidłowo obsługuje przypadki, w których zwrócony przepływ jest natychmiast kończony po otrzymaniu wartości już ustawionej w LiveData (np. podczas korzystania z take(1)). (I9c566)
  • Metoda Lifecycle*Effect jest teraz idempotentna (tzn. jeśli została wywołana z powodu zatrzymania cyklu życia, nie zostanie wywołana po raz drugi po usunięciu, chyba że cykl życia wróci do stanu STARTED).onStopOrDispose (I5f607, b/352364595)

Wersja 2.8.3

1 lipca 2024 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.3 Wersja 2.8.3 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem ze wsteczną zgodnością biblioteki Lifecycle 2.8 z Compose 1.6.0 i starszymi wersjami podczas używania zmniejszania kodu. (aosp/3133056, b/346808608)

Wersja 2.8.2

12 czerwca 2024 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.2 Wersja 2.8.2 zawiera te zmiany.

Poprawki błędów

  • Naprawiono błędy CompositionLocal LocalLifecycleOwner not present podczas korzystania z Lifecycle w wersji 2.8.X z Compose w wersji 1.6.X lub starszej. Teraz możesz używać Lifecycle w wersji 2.8.2 z dowolną wersją Compose bez konieczności stosowania obejść. (aosp/3105647, b/336842920)
  • ViewModelProvider nie będzie już ulegać awarii w przypadku łączenia poprzednich wersji zależności cyklu życia compileOnly z wersjami 2.8 lub nowszymi, co rozwiązuje problemy z bibliotekami takimi jak LeakCanary. (I80383, b/341792251)

Wersja 2.8.1

29 maja 2024 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.1 Wersja 2.8.1 zawiera te zmiany.

Poprawki błędów

  • lifecycle-viewmodel-compose ma teraz tylko wspólną zależność od compose-runtime, co usuwa wspólną zależność od compose-ui. Artefakt Androida zachowuje compose-ui ze względu na zgodność. (aosp/3079334, b/339562627)
  • Integracja ViewModel z użyciem delegatów właściwości saveable korzysta teraz z nazwy klasy jako części automatycznie generowanego klucza, co pozwala uniknąć konfliktów, jeśli wiele klas używa tego samego SavedStateHandle. (aosp/3063463)

Wersja 2.8.0

14 maja 2024 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.0 Wersja 2.8.0 zawiera te zmiany.

Ważne zmiany od wersji 2.7.0

  • LocalLifecycleOwner został przeniesiony z interfejsu Compose do lifecycle-runtime-compose, aby jego interfejsy API pomocnicze oparte na Compose mogły być używane poza interfejsem Compose.
  • Artefakt lifecycle-runtime-compose zawiera teraz interfejsy API dropUnlessResumeddropUnlessStarted, które umożliwiają pomijanie kliknięć lub innych zdarzeń występujących nawet po tym, jak wartość LifecycleOwner spadnie poniżej podanej wartości Lifecycle.State. Można go na przykład używać w przypadku Navigation Compose, aby uniknąć obsługi zdarzeń kliknięcia po rozpoczęciu przejścia na inny ekran: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
  • ViewModel.viewModelScope jest teraz parametrem konstruktora, który można zastępować. Umożliwia to wstrzykiwanie własnego dyspozytora i SupervisorJob() lub zastępowanie domyślnego dyspozytora za pomocą backgroundScope dostępnego w 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 został przepisany w Kotlinie i używa teraz AutoClosable zamiast Closeable. Umożliwia teraz dodawanie AutoCloseable obiektów z key, które pozwalają na pobieranie ich za pomocą getCloseable().

  • Wywoływanie funkcji LifecycleStartEffectLifecycleResumeEffect bez klucza jest teraz błędem, zgodnie z tą samą konwencją co w przypadku interfejsu DisposableEffect API, którego te interfejsy API są kopią.

  • Wycofano LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) na rzecz LiveData.toPublisher(lifecycleOwner).

  • lifecycle-livedata-core-ktx rozszerzenia Kotlin zostały przeniesione do modułu lifecycle-livedata-core.

  • NullSafeMutableLiveData został zmodyfikowany, aby uniknąć wielu fałszywych dopasowań.

Zgodność z Kotlin Multiplatform w zakresie cyklu życia

Podstawowe interfejsy API cyklu życia w Lifecycle, LifecycleOwner, LifecycleObserver, Lifecycle.State, Lifecycle.EventLifecycleRegistry są teraz dostarczane w artefaktach zgodnych z Kotlin Multiplatform.

Artefakty, których to dotyczy:

  • lifecycle-common przenosi większość interfejsów API do common i obsługuje jvm oraz iOS oprócz Androida.
  • lifecycle-runtime przenosi większość interfejsów API do common i obsługuje jvm oraz iOS oprócz Androida.
  • lifecycle-runtime-ktx jest teraz pusta, ponieważ wszystkie interfejsy API zostały przeniesione do lifecycle-runtime.
  • lifecycle-runtime-compose przenosi wszystkie interfejsy API do common i udostępnia artefakt Androida, który jest zgodny z obsługą wielu platform w androidx.compose.

Zgodność ViewModel z Kotlin Multiplatform

Artefakt lifecycle-viewmodel i interfejsy API, takie jak ViewModel, ViewModelStore, ViewModelStoreOwnerViewModelProvider, są teraz dostarczane w artefaktach zgodnych z Kotlin Multiplatform.

Aby uwzględnić tę zmianę, metody takie jak te w ViewModelProvider, które przyjmowały wartość java.lang.Class<T>, mają teraz odpowiednik przyjmujący wartość kotlin.reflect.KClass<T>.

Zachowaliśmy zgodność binarną w Androidzie, ale w porównaniu z wspólnym interfejsem API wprowadziliśmy kilka istotnych zmian w interfejsie API Androida:

  • Tworzenie instancji ViewModelProvider odbywa się teraz za pomocą metod ViewModelProvider.create(), a nie przez bezpośrednie wywoływanie jej konstruktora.
  • Wartości ViewModelProvider.NewInstanceFactoryViewModelProvider.AndroidViewModelFactory są dostępne tylko na Androidzie.
    • W przypadku fabryk niestandardowych zalecamy rozszerzenie klasy ViewModelProvider.Factory i użycie metody create, która przyjmuje wartość CreationExtras, lub użycie języka Kotlin DSL viewModelFactory.
  • Użycie ViewModelProvider bez niestandardowej fabryki na platformach innych niż JVM spowoduje wystąpienie błędu UnsupportedOperationException. Na platformach JVM zgodność jest zachowywana przez użycie konstruktora ViewModel bez argumentów, jeśli nie podano niestandardowej fabryki.
  • viewModelScope zostanie zastąpiony przez EmptyCoroutineContext na platformach, na których Dispatchers.Main nie jest dostępny (np. Linux).

Artefakty, których to dotyczy:

  • lifecycle-viewmodel przenosi większość interfejsów API do common i obsługuje jvm oraz iOS oprócz Androida.
  • lifecycle-viewmodel-ktx jest teraz pusta, ponieważ wszystkie interfejsy API zostały przeniesione do lifecycle-viewmodel.
  • lifecycle-viewmodel-compose przenosi wszystkie interfejsy API do common i udostępnia artefakt Androida, który jest zgodny z obsługą wielu platform w androidx.compose.

Zmiany w zachowaniu

  • InitializerViewModelFactory (w tym funkcja viewModelFactory) będzie teraz zwracać błąd IllegalArgumentException, jeśli dodano już initializer o tym samym clazz: KClass<VM : ViewModel>. (Ic3a36)

Znane problemy

Wersja 2.8.0-rc01

1 maja 2024 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.0-rc01 Wersja 2.8.0-rc01 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że profil podstawowy dla klas lifecycle-common nie był prawidłowo pakowany. Są one teraz spakowane w lifecycle-runtime AAR. (aosp/3038274, b/322382422)
  • Naprawiliśmy niezamierzoną zmianę kolejności usuwania instancji AutoCloseable dołączonych do ViewModelu – przywróciliśmy poprzednią kolejność: addCloseable(String, AutoCloseable), addClosable(AutoCloseable), onCleared(). (aosp/3041632)
  • Ulepsz domyślne działanie tworzenia viewModelScope w środowiskach natywnych i JVM Desktop. (aosp/3039221)

Wkład zewnętrzny

  • Dziękujemy Victorowi Kroppowi za ulepszenie sprawdzania wątku głównego na komputerach z JVM. (aosp/3037116)

Wersja 2.8.0-beta01

17 kwietnia 2024 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.0-beta01 Wersja 2.8.0-beta01 zawiera te zmiany.

Nowe funkcje

  • Artefakt lifecycle-runtime-compose jest teraz zgodny z Kotlin Multiplatform, a jego kod został przeniesiony do common. Zawiera on artefakt Androida, który jest zgodny z wieloplatformową obsługą androidx.compose. (If7a71, I4f4a0, b/331769623)

Wersja 2.8.0-alpha04

3 kwietnia 2024 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.0-alpha04 Wersja 2.8.0-alpha04 zawiera te zmiany.

Nowe funkcje

  • Artefakt lifecycle-viewmodel-compose jest teraz zgodny z Kotlin Multiplatform, a jego kod został przeniesiony do common. Zawiera on artefakt Androida, co odpowiada obsłudze wielu platform w androidx.compose. Aby uwzględnić tę zmianę, funkcja Composable viewModel akceptuje teraz wartość KClass oprócz wartości java.lang.Class. (b/330323282)

Poprawki błędów

  • NullSafeMutableLiveData został zmodyfikowany, aby uniknąć wielu fałszywych dopasowań. (I2d8c1, Iafb18, I03463, I7ecef)

Aktualizacja zależności

Wersja 2.8.0-alpha03

20 marca 2024 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.0-alpha03 Wersja 2.8.0-alpha03 zawiera te zmiany.

Nowe funkcje

  • ViewModel.viewModelScope jest teraz parametrem konstruktora, który można zastępować. Umożliwia to wstrzykiwanie własnego dyspozytora i SupervisorJob() lub zastępowanie domyślnego dyspozytora za pomocą backgroundScope dostępnego w 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)
    }
    

Zgodność z Kotlin Multiplatform

Artefakt lifecycle-viewmodel i interfejsy API, takie jak ViewModel, ViewModelStore, ViewModelStoreOwnerViewModelProvider, są teraz dostarczane w artefaktach zgodnych z Kotlin Multiplatform. (b/214568825)

Aby uwzględnić tę zmianę, metody takie jak te w ViewModelProvider, które przyjmowały wartość java.lang.Class<T>, mają teraz odpowiednik przyjmujący wartość kotlin.reflect.KClass<T>.

Zachowaliśmy zgodność binarną w Androidzie, ale w porównaniu z wspólnym interfejsem API wprowadziliśmy kilka istotnych zmian w interfejsie API Androida:

  • Tworzenie instancji ViewModelProvider odbywa się teraz za pomocą metod ViewModelProvider.create(), a nie przez bezpośrednie wywoływanie jej konstruktora.
  • Wartości ViewModelProvider.NewInstanceFactoryViewModelProvider.AndroidViewModelFactory są dostępne tylko na Androidzie.
    • W przypadku fabryk niestandardowych zalecamy rozszerzenie klasy ViewModelProvider.Factory i użycie metody create, która przyjmuje wartość CreationExtras, lub użycie języka Kotlin DSL viewModelFactory.
  • Użycie ViewModelProvider bez niestandardowej fabryki na platformach innych niż JVM spowoduje wystąpienie błędu UnsupportedOperationException. Na platformach JVM zgodność jest zachowywana przez użycie konstruktora ViewModel bez argumentów, jeśli nie podano niestandardowej fabryki.
  • viewModelScope zostanie zastąpiony przez EmptyCoroutineContext na platformach, na których Dispatchers.Main nie jest dostępny (np. Linux).

Zmiany w zachowaniu

  • InitializerViewModelFactory (w tym funkcja viewModelFactory) będzie teraz zwracać błąd IllegalArgumentException, jeśli dodano już initializer o tym samym clazz: KClass<VM : ViewModel>. (Ic3a36)

Poprawki błędów

  • ViewModel.getCloseable obsługuje teraz zduplikowane klucze: jeśli key ma już powiązany zasób AutoCloseable, stary zasób zostanie zastąpiony i natychmiast zamknięty. (Ibeb67)
  • Dostęp do viewModelScopeViewModel jest teraz bezpieczny wątkowo. (If4766, b/322407038)

Wkład zewnętrzny

  • LocalLifecycleOwner został przeniesiony z Compose UI do lifecycle-runtime-compose, aby jego interfejsy API pomocnicze oparte na Compose można było używać poza Compose UI. Dziękujemy Jake’owi Whartonowi za pomoc. (I6c41b, b/328263448)

Wersja 2.8.0-alpha02

21 lutego 2024 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.0-alpha02 Wersja 2.8.0-alpha02 zawiera te zmiany.

Nowe funkcje

  • Dodaliśmy interfejsy API dropUnlessResumeddropUnlessStarted, które umożliwiają pomijanie kliknięć lub innych zdarzeń występujących nawet wtedy, gdy wartość LifecycleOwner spadnie poniżej podanej wartości Lifecycle.State. Można go na przykład używać w przypadku Navigation Compose, aby uniknąć obsługi zdarzeń kliknięcia po rozpoczęciu przejścia do innego ekranu: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) } (Icba83, b/317230685).

Konwersje w Kotlinie

  • ViewModel jest teraz napisany w języku Kotlin (I16f26, b/214568825)
  • Rozszerzenia Kotlin lifecycle-viewmodel-ktx zostały przeniesione do podstawowego modułu cyklu życia. (Id787b, b/274800183)
  • Rozszerzenia Kotlin lifecycle-runtime-ktx zostały przeniesione do podstawowego modułu cyklu życia. (Ic3686, b/274800183)
  • Rozszerzenia Kotlin lifecycle-livedata-core-ktx zostały przeniesione do podstawowego modułu cyklu życia. (I54a3d, b/274800183)

Zgodność z Kotlin Multiplatform

  • Podstawowe interfejsy API cyklu życia w Lifecycle, LifecycleOwner, LifecycleObserver, Lifecycle.State, Lifecycle.EventLifecycleRegistry są teraz dostarczane w artefaktach zgodnych z Kotlin Multiplatform. (b/317249252)

Zmiany w interfejsie API

  • Wywoływanie funkcji LifecycleStartEffectLifecycleResumeEffect bez klucza jest teraz błędem, zgodnie z tą samą konwencją co w przypadku interfejsu DisposableEffect API, którego te interfejsy API są kopią. (Ib0e0c, b/323518079)
  • ViewModel korzysta teraz z AutoCloseable zamiast z Closeable. Jest to zmiana zgodna wstecznie. (I27f8e, b/214568825)
  • Wycofano LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) na rzecz LiveData.toPublisher(lifecycleOwner). (Iabe29, b/262623005)

Wkład zewnętrzny

  • Dziękujemy Ivanowi Matkovowi z Jetbrains za pomoc w przeniesieniu komponentu Lifecycle na Kotlin Multiplatform. (aosp/2926690, I0c5ac, If445d)

Wersja 2.8.0-alpha01

24 stycznia 2024 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.0-alpha01 Wersja 2.8.0-alpha01 zawiera te zmiany.

Nowe funkcje

  • ViewModel obsługuje teraz dodawanie obiektów Closeablekey, które umożliwiają pobieranie ich za pomocą getCloseable(). (I3cf63)

Wersja 2.7

Wersja 2.7.0

10 stycznia 2024 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.7.0 Wersja 2.7.0 zawiera te zmiany.

Ważne zmiany od wersji 2.6.0

  • TestLifecycleOwner zawiera teraz funkcję zawieszania setCurrentState(), która zapewnia, że przed zwróceniem wartości zakończy się zmiana stanu i wszystkie wywołania zwrotne LifecycleObserver. W przeciwieństwie do bezpośredniego ustawiania właściwości currentState nie używa ona funkcji runBlocking, dzięki czemu można jej bezpiecznie używać w korutynie, np. w korutynie dostarczanej przez runTest.
  • Rozszerzenia LiveData funkcji mapswitchMap działają teraz tak samo jak rozszerzenie distinctUntilChanged – jeśli rozszerzenie LiveData ma ustawioną wartość value, funkcja map/switchMap zostanie natychmiast wywołana, aby wypełnić wartość value zwróconego rozszerzenia LiveData. Dzięki temu wartość początkowa zostanie ustawiona w ramach pierwszej kompozycji (gdy jest używana z observeAsState()), ale nie zmieni to sposobu obserwacji – aktualizacje wartości ze źródła LiveData będą nadal stosowane dopiero po rozpoczęciu obserwacji LiveData.
  • W tej wersji rozwiązano problem polegający na tym, że po zakończeniu i ponownym utworzeniu procesu nie można było prawidłowo przywrócić niestandardowych klas Parcelable.SavedStateHandle Ze względu na informacje o typach, które są tracone przez platformę Android, tablice niestandardowych obiektów Parcelable wymagają dodatkowej pracy (ręcznego tworzenia tablicy typów odpowiedniego typu), a dokumentacja dotycząca get, getLiveDatagetStateFlow wyraźnie wskazuje to ograniczenie.
  • Usunięto reguły proguard keep powiązane z LifecycleObserver. Oznacza to, że kod chroniony za pomocą ProGuard, który chce używać interfejsów API za pomocą odbicia (np. za pomocą dawno już wycofanej adnotacji @OnLifecycleEvent), będzie musiał podać własne reguły zachowywania w swoim konkretnym przypadku użycia.

Obserwowanie zdarzeń cyklu życia

  • Zamiast używać LifecycleEventObserver, możesz teraz obserwować Flow Lifecycle.Event za pomocą metody rozszerzenia Lifecycle.asFlow().
  • Użytkownicy Jetpack Compose mogą teraz używać funkcji LifecycleEventEffect do uruchamiania efektów ubocznych Compose na podstawie funkcji Lifecycle.Event.
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
    viewModel.refreshData()
  }
  // …
}
  • Użytkownicy Jetpack Compose mogą używać funkcji LifecycleStartEffectLifecycleResumeEffect do obsługi par zdarzeń – od rozpoczęcia do zatrzymania i od wznowienia do wstrzymania. Ten interfejs API jest podobny do tego, który znajduje się w DisposableEffect, i jest odpowiedni w przypadkach, gdy zmiana wprowadzana w momencie zwiększania stanu musi zostać cofnięta, gdy stan się zmniejsza.
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleStartEffect(viewModel) {
    val timeTracking = viewModel.startTrackingTimeOnScreen()
    onStopOrDispose {
      timeTracking.stopTrackingTimeOnScreen()
    }
  }
  // …
}

Więcej informacji znajdziesz w artykule Uruchamianie kodu w przypadku zdarzeń cyklu życia.

Obserwowanie stanu cyklu życia

  • Bieżący Lifecycle.State można teraz obserwować za pomocą właściwości Lifecycle.currentStateFlow, która zwraca StateFlow, gdzie value to bieżący Lifecycle.State.
  • Użytkownicy Jetpack Compose mogą użyć rozszerzenia Lifecycle.currentStateAsState(), aby bezpośrednio udostępnić Lifecycle.State jako State w Compose. Jest to odpowiednik (i krótsza alternatywa) funkcji lifecycle.currentStateFlow.collectAsState().

Więcej informacji znajdziesz w artykule Zbieranie informacji o stanie cyklu życia za pomocą przepływów.

Wersja 2.7.0-rc02

13 grudnia 2023 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.7.0-rc02 Wersja 2.7.0-rc02 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że po zakończeniu i ponownym utworzeniu procesu nie były prawidłowo przywracane niestandardowe klasy Parcelable.SavedStateHandle Ze względu na informacje o typach, które są tracone przez platformę Android, tablice niestandardowych obiektów Parcelable wymagają dodatkowej pracy (ręcznego tworzenia tablicy typów odpowiedniego typu), a dokumentacja dotycząca get, getLiveDatagetStateFlow wyraźnie wskazuje to ograniczenie. (I0b55a)

Wersja 2.7.0-rc01

15 listopada 2023 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.7.0-rc01 Wersja 2.7.0-rc01 zawiera te zmiany.

Poprawki błędów

  • LifecycleStartEffectLifecycleResumeEffect teraz prawidłowo usuwają i ponownie tworzą blok efektu, jeśli zmieni się LifecycleOwner. (Ia25c6)

Wersja 2.7.0-beta01

1 listopada 2023 roku

androidx.lifecycle:lifecycle-*:2.7.0-beta01 zostaje opublikowany bez zmian. Wersja 2.7.0-beta01 zawiera te zmiany.

  • Wersja beta, w której nie wprowadzono większych zmian.

Wersja 2.7.0-alpha03

18 października 2023 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.7.0-alpha03 Wersja 2.7.0-alpha03 zawiera te zmiany.

Nowe funkcje

  • lifecycle-runtime-testing zawiera teraz nowy test Lint, który zapobiega ustawianiu Lifecycle.State elementu TestLifecycleOwner za pomocą pola currentState w przypadku korzystania z korutyny. Sprawdzanie Lint sugeruje teraz zawieszenie setCurrentState, które umożliwia ustawienie Lifecycle.State bez blokowania. (Icf728, b/297880630)

Poprawki błędów

  • Rozwiązaliśmy problem z LiveData.switchMap, który polegał na tym, że zwracanie tej samej instancji LiveData zarówno podczas pierwszego, jak i kolejnego wywołania uniemożliwiało dodanie instancji LiveData jako źródła. (Ibedcba7)

Wersja 2.7.0-alpha02

6 września 2023 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.7.0-alpha02 Wersja 2.7.0-alpha02 zawiera te zmiany.

Nowe funkcje

  • TestLifecycleOwner zawiera teraz funkcję zawieszania setCurrentState(), która umożliwia użytkownikom korzystanie z TestLifecycleOwner w ramach korutyny, np. takiej, jaką zapewnia runTest. (I329de, b/259344129)

Zmiany w interfejsie API

  • Wszystkie pliki z modułów lifecycle-livedata-ktx zostały przeniesione do głównego modułu lifecycle-livedata. (I10c6f, b/274800183)

Zmiany w zachowaniu

  • Rozszerzenia LiveData.map()LiveData.switchMap() ustawiają teraz value zwracanego elementu LiveData, jeśli poprzedni element LiveData miał ustawioną wartość, co zapewnia, że używanie wynikowego elementu LiveData w Jetpack Compose ma odpowiedni stan w początkowej kompozycji. (I91d2b, b/269479952)
  • ViewModeladdCloseable() natychmiast zamyka Closeable, jeśli ViewModel otrzymał już wywołanie funkcji onCleared(). (I4712e, b/280294730)

Poprawki błędów

  • Cykl życia2.6.2: rozwiązaliśmy problem, który powodował, że po zakończeniu procesu nie można było prawidłowo przywrócić wartości SavedStateHandle, jeśli stan został przywrócony, wywołano funkcję save() bez zapisywania stanu w nadrzędnym elemencie SavedStateRegistry, a następnie stan został ponownie przywrócony. Rozwiązuje to problem z interakcją między rememberSaveableNavHost z biblioteki Navigation Compose. (aosp/2729289)

Wersja 2.7.0-alpha01

26 lipca 2023 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.7.0-alpha01 Wersja 2.7.0-alpha01 zawiera te zmiany.

Zmiany w interfejsie API

  • Lifecycle.State można teraz obserwować w Compose za pomocą funkcji Lifecycle.currentStateFlow, która zwraca StateFlow, gdzie value to bieżąca wartość Lifecycle.State. (Ib212d, b/209684871)
  • Lifecycle.Events można teraz obserwować jako FlowLifecycle.asFlow(). (If2c0f, b/176311030)
  • LifecycleResumeEffect Dodaliśmy interfejs API, który umożliwia uruchamianie funkcji Compose SideEffect na podstawie wywołań zwrotnych zdarzeń Lifecycle.Event.ON_RESUMELifecycle.Event.ON_PAUSE. (I60386, b/235529345)
  • LifecycleStartEffect Dodano interfejs API do uruchamiania funkcji Compose SideEffect na podstawie wywołań zwrotnych zdarzeń Lifecycle.Event.ON_STARTLifecycle.Event.ON_STOP. (I5a8d1, b/235529345)
  • Dodaliśmy interfejs API LifecycleEventEffect, aby uruchamiać funkcje SideEffect Compose na podstawie Lifecycle.Event. (Ic9794, b/235529345)
  • Dodano rozszerzenie Lifecycle.collectAsState(), aby bezpośrednio udostępniać Lifecycle.State jako State w Compose. Jest to odpowiednik (i krótsza alternatywa) funkcji lifecycle.currentStateFlow.collectAsState(). (I11015, b/235529345)

Poprawki błędów

  • Rozszerzenie LiveData.distinctUntilChanged() ustawia teraz value zwróconego elementu LiveData, jeśli poprzedni element LiveData miał ustawioną wartość. Nie zmienia to sposobu działania obserwacji – zaktualizowane wartości ze źródła LiveData będą nadal stosowane dopiero po rozpoczęciu obserwacji wartości LiveData zwróconej przez distinctUntilChanged(). (Ib482f)
  • Usunięto reguły proguard keep powiązane z LifecycleObserver. Oznacza to, że kod chroniony za pomocą ProGuard, który chce używać interfejsów API za pomocą odbicia, musi podać własne reguły zachowywania dla konkretnego przypadku użycia. (Ia12fd)

Wersja 2.6

Wersja 2.6.2

6 września 2023 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.6.2 Wersja 2.6.2 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że po zakończeniu procesu nie można było prawidłowo przywrócić stanu SavedStateHandle, jeśli stan został przywrócony, wywołano save() bez zapisywania stanu w nadrzędnym SavedStateRegistry, a następnie stan został ponownie przywrócony. Rozwiązuje to problem z interakcją między rememberSaveableNavHost z biblioteki Navigation Compose. (aosp/2729289)

Wersja 2.6.1

22 marca 2023 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.6.1 Wersja 2.6.1 zawiera te zmiany.

Aktualizacje zależności

Wersja 2.6.0

8 marca 2023 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.6.0 Wersja 2.6.0 zawiera te zmiany.

Ważne zmiany od wersji 2.5.0

  • LiveData zawiera teraz nową właściwość isInitialized, która wskazuje, czy kiedykolwiek ustawiono jawną wartość w LiveData. Dzięki temu możesz odróżnić sytuację, w której liveData.value zwraca wartość null, ponieważ nigdy nie ustawiono żadnej wartości, od sytuacji, w której zwraca jawną wartość null.
  • MediatorLiveData zawiera teraz konstruktor do ustawiania wartości początkowej.
  • Dodano nowe rozszerzenie w przypadku StateFlowFlowcollectAsStateWithLifecycle(), które zbiera dane z przepływów i przedstawia ich najnowszą wartość jako stan Compose w sposób uwzględniający cykl życia.
  • Metody Lifecycle.launchWhenXLifecycle.whenX zostały wycofane, ponieważ użycie wstrzymującego dyspozytora może w niektórych przypadkach prowadzić do marnowania zasobów. Zalecamy użycie Lifecycle.repeatOnLifecycle. Więcej informacji o jednorazowym wstrzymywaniu pracy znajdziesz w tym wyjaśnieniu, które pokazuje, dlaczego jest to z natury niebezpieczne.
  • Konwersja na Kotlin – duża liczba klas cyklu życia została przekonwertowana na Kotlin. Wszystkie przekonwertowane zajęcia zachowują zgodność binarną z poprzednimi wersjami. W przypadku klas napisanych w Kotlinie te klasy mają niezgodne zmiany w kodzie źródłowym: ViewTreeLifecycleOwner, LiveDataReactiveStreams, HasDefaultViewModelProviderFactory, ViewTreeViewModelStoreOwner, Transformations, ViewModelStoreOwner, LifecycleOwner

W tabeli poniżej znajdziesz źródłowe konwersje w przypadku nowej wersji cyklu życia.

Cykl życia 2.5 Cykl życia 2.5 (KTX) Cykl życia 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
  • Wartość dopuszczająca wartość null metody onChanged obiektu Observer utworzonego w Kotlinie jest teraz zgodna z wartością dopuszczającą wartość null typu ogólnego. Jeśli chcesz, aby Observer.onChanged() akceptował typ dopuszczający wartość null, musisz utworzyć instancję Observer z typem dopuszczającym wartość null.
  • Te klasy zostały również przekonwertowane na język Kotlin, ale zachowują zgodność ze źródłem: DefaultLifecycleObserver, LifecycleEventObserver, Lifecycle, LifecycleRegistry, LifecycleObserver, ViewModelStore, AndroidViewModel, AbstractSavedStateViewModelFactory, LifecycleService, ServiceLifecycleDispatcherProcessLifecycleOwner.

Wersja 2.6.0-rc01

22 lutego 2023 roku

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.6.0-rc01 Wersja 2.6.0-rc01 zawiera te zmiany.

Poprawki błędów

  • Rozszerzenie LiveData.distinctUntilChanged() ustawia teraz value zwróconego elementu LiveData, jeśli poprzedni element LiveData miał ustawioną wartość. Nie zmienia to sposobu działania obserwacji – zaktualizowane wartości ze źródła LiveData będą nadal stosowane dopiero po rozpoczęciu obserwacji wartości LiveData zwróconej przez distinctUntilChanged(). (Ib482f)

Wersja 2.6.0-beta01

8 lutego 2023 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.6.0-beta01 Wersja 2.6.0-beta01 zawiera te zmiany.

Konwersje w Kotlinie

  • LifecycleOwner jest teraz napisany w języku Kotlin. W przypadku klas napisanych w Kotlinie jest to zmiana powodująca niezgodność ze źródłem – muszą one teraz zastępować właściwość lifecycle zamiast implementować poprzednią funkcję getLifecycle(). (I75b4b, b/240298691)
  • ViewModelStoreOwner jest teraz w języku Kotlin. W przypadku klas napisanych w Kotlinie jest to zmiana powodująca niezgodność ze źródłem – muszą one teraz zastępować właściwość viewModelStore zamiast implementować poprzednią funkcję getViewModelStore(). (I86409, b/240298691)
  • Rozszerzenie Kotlin w LifecycleOwner, które udostępnia pole lifecycleScope, zostało przeniesione z lifecycle-runtime-ktx do artefaktu lifecycle-common. (I41d78, b/240298691)
  • Rozszerzenie Kotlin w Lifecycle, które udostępnia pole coroutineScope, zostało przeniesione z lifecycle-runtime-ktx do artefaktu lifecycle-common. (Iabb91, b/240298691)

Wersja 2.6.0-alpha05

25 stycznia 2023 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.6.0-alpha05 Wersja 2.6.0-alpha05 zawiera te zmiany.

Konwersje w Kotlinie

  • Transformations jest teraz napisany w języku Kotlin. Jest to zmiana powodująca niezgodność na poziomie kodu źródłowego w przypadku klas napisanych w Kotlinie, które bezpośrednio używały składni takiej jak Transformations.map – kod Kotlin musi teraz używać składni metody rozszerzenia Kotlin, która była wcześniej dostępna tylko w przypadku używania lifecycle-livedata-ktx. W przypadku języka programowania Java wersje tych metod, które przyjmują argument androidx.arch.core.util.Function, są wycofywane i zastępowane wersjami, które przyjmują argument Function1 w języku Kotlin. Ta zmiana zachowuje zgodność binarną. (I8e14f)
  • ViewTreeViewModelStoreOwner jest teraz napisany w języku Kotlin. W przypadku klas napisanych w Kotlinie jest to zmiana powodująca niezgodność ze źródłem – aby ustawić i znaleźć wcześniej ustawionego właściciela, musisz teraz bezpośrednio importować i używać metod rozszerzeń Kotlin na Viewandroidx.lifecycle.setViewTreeViewModelStoreOwnerandroidx.lifecycle.findViewTreeViewModelStoreOwner. Jest on zgodny binarnie i pozostaje zgodny ze źródłem w przypadku implementacji napisanych w języku programowania Java. (Ia06d8, Ib22d8, b/240298691)
  • Interfejs HasDefaultViewModelProviderFactory jest teraz napisany w języku Kotlin. Jest to zmiana niezgodna ze źródłem w przypadku klas napisanych w Kotlinie – muszą one teraz zastępować właściwości defaultViewModelProviderFactorydefaultViewModelCreationExtras zamiast implementować poprzednie odpowiednie funkcje. (Iaed9c, b/240298691)
  • Observer jest teraz napisany w języku Kotlin. Metoda onChanged() używa teraz nazwy value dla swojego parametru. (Iffef2, I4995e, b/240298691)
  • AndroidViewModel, AbstractSavedStateViewModelFactory, LifecycleService, ServiceLifecycleDispatcher i ProcessLifecycleOwner są teraz napisane w języku Kotlin (I2e771, Ibae40, I160d7, I08884, I1cda7, b/240298691)

Wersja 2.6.0-alpha04

11 stycznia 2023 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.6.0-alpha04 Wersja 2.6.0-alpha04 zawiera te zmiany.

Nowe funkcje

  • LiveData zawiera teraz nową właściwość isInitialized, która wskazuje, czy kiedykolwiek ustawiono jawną wartość w LiveData. Dzięki temu możesz odróżnić sytuację, w której liveData.value zwraca wartość null, ponieważ nigdy nie ustawiono żadnej wartości, od sytuacji, w której zwraca jawną wartość null. (Ibd018)

Zmiany w interfejsie API

  • Interfejsy API collectAsStateWithLifecycle() usługi lifecycle-runtime-compose nie są już w stanie eksperymentalnym. (I09d42, b/258835424)
  • Metody Lifecycle.launchWhenXLifecycle.whenX zostały wycofane, ponieważ użycie wstrzymującego dyspozytora może w niektórych przypadkach prowadzić do marnowania zasobów. Zalecamy użycie Lifecycle.repeatOnLifecycle. (Iafc54, b/248302832)

Konwersje w Kotlinie

  • ViewTreeLifecycleOwner jest teraz napisany w języku Kotlin. W przypadku klas napisanych w Kotlinie jest to zmiana powodująca niezgodność ze źródłem – aby ustawić i znaleźć wcześniej ustawionego właściciela, musisz teraz bezpośrednio importować i używać metod rozszerzeń Kotlin na Viewandroidx.lifecycle.setViewTreeLifecycleOwnerandroidx.lifecycle.findViewTreeLifecycleOwner. Zastępuje on poprzednie rozszerzenie Kotlin w lifecycle-runtime-ktx. Jest on zgodny binarnie i pozostaje zgodny ze źródłem w przypadku implementacji napisanych w języku programowania Java. (I8a77a, I5234e, b/240298691)
  • LiveDataReactiveStreams jest teraz napisany w języku Kotlin. Rozszerzenia Kotlin, które wcześniej znajdowały się w lifecycle-reactivestreams-ktx, zostały przeniesione do modułu lifecycle-reactivestreams i stały się głównym interfejsem kodu napisanego w Kotlinie. Jest to zmiana powodująca niezgodność kodu źródłowego w przypadku kodu napisanego w Kotlinie, jeśli nie używasz jeszcze interfejsów API metod rozszerzeń Kotlin. (I2b1b9, I95d22, b/240298691)
  • DefaultLifecycleObserver, LifecycleEventObserver, Lifecycle, LifecycleRegistry, LifecycleObserverViewModelStore są teraz napisane w języku Kotlin (Iadffd, (I60034, I8c52c, I9593d, I01fe1, I59a23, b/240298691)

Poprawki błędów

  • SavedStateHandle nie ulega już awarii z błędem ClassCastException podczas wywoływania funkcji get() z nieprawidłowym typem klasy. (I6ae7c)

Wersja 2.6.0-alpha03

24 października 2022 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.6.0-alpha03 Wersja 2.6.0-alpha03 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem z ograniczeniami między różnymi modułami cyklu życia, które nie działały zgodnie z oczekiwaniami. (I18d0d, b/249686765)
  • Błędy zgłaszane przez LifecycleRegistry.moveToState() zawierają teraz bardziej przydatne komunikaty o błędach, które informują deweloperów o komponencie powodującym błąd. (Idf4b2, b/244910446)

Wersja 2.6.0-alpha02

7 września 2022 roku

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.6.0-alpha02 Wersja 2.6.0-alpha02 zawiera te zmiany.

Zmiany w interfejsie API

  • MediatorLiveData zawiera teraz konstruktor do ustawiania wartości początkowej. (Ib6cc5, b/151244085)

Poprawki błędów

  • Artefakty Lifecycle zawierają teraz ograniczenia, które zapewniają, że wszystkie wzajemnie zależne artefakty cyklu życia używają tej samej wersji, automatycznie uaktualniając inne zależności, gdy jedna z nich zostanie uaktualniona. b/242871265
  • FlowLiveData.asFlow() tworzy teraz callbackFlow zamiast korzystać z własnej implementacji Channel, aby zapewnić bezpieczeństwo wątków i zachowanie kontekstu. (I4a8b2, b/200596935)
  • Funkcja FlowLiveData's asLiveData będzie teraz zachowywać początkową wartość StateFlow podczas tworzenia nowego obiektu LiveData. (I3f530, b/157380488)
  • Cyklu życia2.5.1: niestandardowe implementacje AndroidViewModelFactory prawidłowo wywołują teraz funkcję create(modelClass) podczas korzystania z konstruktora stanowego z Lifecycle w wersji 2.4 lub nowszej (I5b315, b/238011621).

Wersja 2.6.0-alpha01

29 czerwca 2022 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.6.0-alpha01 Wersja 2.6.0-alpha01 zawiera te zmiany.

Nowe funkcje

  • Dodano nowe rozszerzenie w StateFlowFlowcollectAsStateWithLifecycle, które zbiera dane z przepływów i reprezentuje jego najnowszą wartość jako stan Compose w sposób uwzględniający cykl życia. Przepływ jest zbierany, a nowa emisja jest ustawiana na wartość stanu, gdy cykl życia osiągnie co najmniej określony poziom Lifecycle.State. Gdy okres eksploatacji spadnie poniżej wartości Lifecycle.State, zbieranie danych o przepływie zostanie zatrzymane, a wartość stanu nie zostanie zaktualizowana. (I1856e, b/230557927)

Wersja 2.5

Wersja 2.5.1

27 lipca 2022 roku

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.5.1 Wersja 2.5.1 zawiera te zmiany.

Poprawki błędów

  • Niestandardowe implementacje AndroidViewModelFactory prawidłowo wywołują teraz funkcję create(modelClass), gdy używają konstruktora AndroidViewModelFactory z zachowywaniem stanu w przypadku Lifecycle w wersji 2.4 lub nowszej (I5b315, b/238011621).

Wersja 2.5.0

29 czerwca 2022 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.5.0 Wersja 2.5.0 zawiera te zmiany.

Ważne zmiany od wersji 2.4.0

  • SavedStateHandle udostępnia teraz interfejs API getStateFlow(), który zwraca obiekt Kotlin StateFlow do monitorowania zmian wartości jako alternatywę dla używania LiveData.

  • ViewModel CreationExtras – podczas pisania niestandardowego ViewModelProvider.Factory nie trzeba już rozszerzać AndroidViewModelFactory ani AbstractSavedStateViewModelFactory, aby uzyskać dostęp odpowiednio do Application lub SavedStateHandle. Zamiast tego te pola są udostępniane każdej podklasie ViewModelProvider.Factory jako CreationExtras za pomocą nowego przeciążenia create: create(Class<T>, CreationExtras). Te dodatki są udostępniane automatycznie przez aktywność lub fragment podczas korzystania odpowiednio z Activity 1.5.0Fragment 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 udostępnia teraz viewModelFactory Kotlin DSL, który umożliwia definiowanie ViewModelProvider.Factory za pomocą co najmniej 1 inicjatora lambda, po jednym dla każdej klasy ViewModel obsługiwanej przez fabrykę niestandardową, przy użyciu CreationExtras jako głównego źródła danych.

    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 oferuje teraz interfejs viewModel() API, który przyjmuje fabrykę lambda do tworzenia instancji ViewModel bez konieczności tworzenia niestandardowego ViewModelProvider.Factory.

    // 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)
    }
    
  • Integracja SavedStateHandle Compose Saver – artefakt lifecycle-viewmodel-compose zawiera teraz nowe eksperymentalne interfejsy API w SavedStateHandle.saveable, które umożliwiają zachowanie podobne do rememberSaveable, oparte na SavedStateHandle elementu `ViewModel`.

    class ListScreenViewModel(handle: SavedStateHandle): ViewModel() {
        // This value survives both configuration changes and process death and recreation
        val editMode by handle.saveable { mutableStateOf(false) }
    }
    
  • Dodano interfejs API addCloseable() i nowe przeciążenie konstruktora, które umożliwiają dodawanie do obiektu ViewModel co najmniej 1 obiektu Closeable, który zostanie zamknięty po wyczyszczeniu obiektu ViewModel bez konieczności ręcznego wykonywania czynności w onCleared().

    Aby na przykład utworzyć zakres coroutine, który możesz wstrzyknąć do ViewModelu, ale kontrolować za pomocą testowania, możesz utworzyć CoroutineScope, który implementuje Closeable:

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

    Możesz go potem użyć w konstruktorze ViewModel, zachowując ten sam okres istnienia co viewModelScope:

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

Zmiany w działaniu

  • Próba przeniesienia Lifecycle.StateINITIALIZED do DESTROYED zawsze będzie teraz powodować zgłoszenie IllegalStateException, niezależnie od tego, czy do Lifecycle jest dołączony obserwator.
  • LifecycleRegistry będzie teraz usuwać obserwatorów, gdy osiągnie stan DESTROYED.

Wersja 2.5.0-rc02

15 czerwca 2022 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.5.0-rc02 Wersja 2.5.0-rc02 zawiera te zmiany.

Poprawki błędów

  • ViewModelProvider nie będzie już ulegać awarii podczas łączenia poprzednich wersji zależności compileOnly Lifecycle z wersjami 2.5 lub nowszymi. (I81a66, b/230454566)

Wersja 2.5.0-rc01

11 maja 2022 roku

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.5.0-rc01 Wersja 2.5.0-rc01 zawiera te zmiany.

Poprawki błędów

  • MediatorLiveData.addSource() zgłasza teraz błąd NullPointerException, gdy otrzyma źródło null, zamiast przekazywać je do obserwatorów.(Ibd0fb, b/123085232)null

Wersja 2.5.0-beta01

20 kwietnia 2022 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.5.0-beta01 Wersja 2.5.0-beta01 zawiera te zmiany.

Zmiany w interfejsie API

  • Dodano delegaty właściwości SavedStateHandle.saveable, aby używać nazw właściwości jako kluczy do utrwalania stanu w SavedStateHandle (I8bb86, b/225014345).

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że zagnieżdżenie jednego elementu NavHost w innym elemencie NavHost na karcie nawigacji u dołu, która nie jest główną kartą, prowadziło do błędu IllegalStateException podczas korzystania z wielu stosów wstecznych. (I11bd5, b/228865698)

Wersja 2.5.0-alpha06

6 kwietnia 2022 roku

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.5.0-alpha06 Wersja 2.5.0-alpha06 zawiera te zmiany.

Nowe funkcje

  • Dodanie eksperymentalnego przeciążenia MutableState do SavedStateHandle.saveable w celu zapewnienia zgodności z rememberSaveable (I38cfe, b/224565154)

Zmiany w interfejsie API

  • Klasa CreationExtras jest teraz abstrakcyjna, a nie zamknięta. (Ib8a7a)

Poprawki błędów

  • Naprawiono błąd IllegalStateException: Already attached to lifecycleOwner spowodowany przez SavedStateHandleController. (I7ea47, b/215406268)

Wersja 2.5.0-alpha05

23 marca 2022 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.5.0-alpha05 Wersja 2.5.0-alpha05 zawiera te zmiany.

Nowe funkcje

  • Moduł lifecycle-viewmodel-compose udostępnia teraz SavedStateHandleSaver, eksperymentalny interfejs API, który zapewnia prawidłową integrację wartości w SavedStateHandle z tym samym zapisanym stanem instancji, którego używa rememberSaveable. (Ia88b7, b/195689777)

Zmiany w interfejsie API

  • Rozwiązaliśmy problem ze zgodnością z cyklem życia 2.3 i nowszymi wersjami cyklu życia w języku Java. (I52c8a, b/219545060)

Poprawki błędów

  • SavedStateViewFactory obsługuje teraz używanie CreationExtras nawet wtedy, gdy zostało zainicjowane za pomocą SavedStateRegistryOwner. Jeśli podasz dodatkowe informacje, zainicjowane argumenty zostaną zignorowane. (I6c43b, b/224844583)

Wersja 2.5.0-alpha04

9 marca 2022 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.5.0-alpha04 Wersja 2.5.0-alpha04 zawiera te zmiany.

Zmiany w interfejsie API

  • SavedStateHandle udostępnia teraz interfejs API getStateFlow(), który zwraca Kotlin StateFlow do monitorowania zmian wartości jako alternatywę dla używania LiveData. (Iad3ab, b/178037961)

Wersja 2.5.0-alpha03

23 lutego 2022 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.5.0-alpha03 Wersja 2.5.0-alpha03 zawiera te zmiany.

Nowe funkcje

  • Dodano interfejs addCloseable() API i nowe przeciążenie konstruktora, które umożliwiają dodawanie do obiektu ViewModel co najmniej 1 obiektu Closeable. Obiekt ViewModel zostanie zamknięty po wyczyszczeniu bez konieczności ręcznego wykonywania czynności w obiekcie onCleared(). (I55ea0)
  • lifecycle-viewmodel udostępnia teraz InitializerViewModelFactory, które umożliwia dodawanie funkcji lambda do obsługi określonych klas ViewModel przy użyciu CreationExtras jako głównego źródła danych. (If58fc, b/216687549)
  • lifecycle-viewmodel-compose udostępnia teraz interfejs viewModel() API, który przyjmuje fabrykę funkcji lambda do tworzenia instancji ViewModel bez konieczności tworzenia niestandardowego elementu ViewModelProvider.Factory. (I97fbb, b/216688927)

Zmiany w interfejsie API

  • Możesz teraz utworzyć ViewModel z użyciem CreationExtras za pomocą lifecycle-viewmodel-compose. (I08887, b/216688927)

Zmiany w działaniu

  • Próba przeniesienia elementu Lifecycle.StateINITIALIZED do DESTROYED zawsze będzie teraz powodować błąd IllegalStateException, niezależnie od tego, czy element Lifecycle ma dołączony obserwator. (I7c390, b/177924329)
  • LifecycleRegistry będzie teraz usuwać obserwatorów, gdy osiągnie stan DESTROYED. (I4f8dd, b/142925860)

Wersja 2.5.0-alpha02

9 lutego 2022 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.5.0-alpha02 Wersja 2.5.0-alpha02 zawiera te zmiany.

Zmiany w interfejsie API

  • Pliki SavedStateHandleSavedStateViewModelFactory zostały przekonwertowane na Kotlin. Poprawiliśmy możliwość przyjmowania wartości null w przypadku typów ogólnych w obu klasach. (Ib6ce2, b/216168263, I9647a, b/177667711)
  • Parametr funkcji LiveData switchMap może teraz zwracać wartość null. (I40396, b/132923666)
  • Rozszerzenia LiveData-ktx są teraz oznaczone adnotacją @CheckResult, aby wymusić użycie wyniku podczas wywoływania tych funkcji. (Ia0f05, b/207325134)

Zmiany w działaniu

  • SavedStateHandle prawidłowo przechowuje teraz wartość defaultValue, gdy nie ma wartości dla określonego klucza. (I1c6ce, b/178510877)

Poprawki błędów

  • Lifecycle 2.4.1: zaktualizowano lifecycle-process, aby zależał od Startup 1.1.1. Dzięki temu poprawki zapobiegające zgłaszaniu przez ProcessLifecycleInitializer błędu StartupException będą dostępne domyślnie. (Ib01df, b/216490724)
  • Gdy niestandardowe klasy AndroidViewModel mają parametry w niewłaściwej kolejności i próbują utworzyć ViewModel, wyświetlany jest teraz ulepszony komunikat o błędzie. (I340f7, b/177667711)
  • Model widoku możesz teraz utworzyć za pomocą funkcji CreationExtras, korzystając z AndroidViewModelFactory bez konfigurowania aplikacji. (I6ebef, b/217271656)

Wersja 2.5.0-alpha01

26 stycznia 2022 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.5.0-alpha01 Wersja 2.5.0-alpha01 zawiera te zmiany.

ViewModel CreationExtras

W tej wersji tworzymy podstawy do restrukturyzacji sposobu tworzenia ViewModel. Zamiast sztywnego zestawu podklas ViewModelProvider.Factory, z których każda dodaje dodatkowe funkcje (umożliwiając parametr konstruktora Application za pomocą AndroidViewModelFactory, parametr konstruktora SavedStateHandle za pomocą SavedStateViewModelFactoryAbstractSavedStateViewModelFactory itp.), przechodzimy do świata fabryk bezstanowych, które opierają się na nowej koncepcji – CreationExtras. (Ia7343, b/188691010, b/188541057)

W związku z tą zmianą ViewModelProvider nie będzie już bezpośrednio wywoływać poprzedniej metody create(Class<T>) ViewModelProvider.Factory. Zamiast tego wywołuje nowy przeciążony wariant funkcji create: create(Class<T>, CreationExtras). Oznacza to, że każda bezpośrednia implementacja instancji ViewModelProvider.Factory ma teraz dostęp do każdego z tych nowych CreationExtras:

  • ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY: ten String zapewnia dostęp do niestandardowego klucza przekazanego do ViewModelProvider.get().
  • ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY zapewnia dostęp do zajęć Application.
  • SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY zapewnia dostęp do SavedStateRegistryOwner, który jest używany do tworzenia tego obiektu ViewModel.
  • SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY zapewnia dostęp do ViewModelStoreOwner, który jest używany do tworzenia tego obiektu ViewModel.
  • SavedStateHandleSupport.DEFAULT_ARGS_KEY zapewnia dostęp do Bundle argumentów, które powinny być użyte do utworzenia SavedStateHandle.

Te dodatkowe informacje są domyślnie dostępne w przypadku korzystania z aktywności 1.5.0-alpha01, fragmentu 1.5.0-alpha01nawigacji 2.5.0-alpha01. Jeśli używasz starszej wersji tych bibliotek, Twój CreationExtras będzie pusty – wszystkie dotychczasowe podklasy ViewModelProvider.Factory zostały przepisane tak, aby obsługiwać zarówno starszą ścieżkę tworzenia używaną przez starsze wersje tych bibliotek, jak i ścieżkę CreationExtras, która będzie używana w przyszłości.

Te CreationExtras umożliwiają utworzenie ViewModelProvider.Factory, który przekazuje tylko potrzebne informacje do każdego ViewModel bez polegania na ścisłej hierarchii podklas 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
    }
}

Używamy funkcji rozszerzenia createSavedStateHandle() Kotlina w CreationExtrasSavedStateHandleSupport, aby utworzyć SavedStateHandle tylko dla jednego obiektu ViewModel, który tego potrzebuje. (Ia6654, b/188541057)

Niestandardowe CreationExtras można udostępnić, zastępując getDefaultViewModelCreationExtras()ComponentActivity lub Fragment. Dzięki temu będą one dostępne dla niestandardowego ViewModelProvider.Factory jako wbudowana forma wspomaganego wstrzykiwania. Te dodatki będą automatycznie dostępne w niestandardowej fabryce, gdy będą używane bezpośrednio z ViewModelProvider lub z rozszerzeniami właściwości Kotlin by viewModels()by activityViewModels(). (I79f2b, b/207012584, b/207012585, b/207012490)

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że wartość domyślna podana w SavedStateHandle pojawiała się ponownie po zakończeniu procesu i jego ponownym utworzeniu, nawet jeśli została specjalnie usunięta z SavedStateHandle. W związku z tym SavedStateHandle nie będzie już łączyć wartości domyślnych i przywróconych, a jako źródło informacji będzie używać tylko wartości przywróconych. (I53a4b)

Wersja 2.4

Wersja 2.4.1

9 lutego 2022 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.4.1 Wersja 2.4.1 zawiera te zmiany.

Poprawki błędów

  • Wycofano z Lifecycle 2.5.0-alpha01: rozwiązaliśmy problem polegający na tym, że wartość domyślna podana w SavedStateHandle pojawiała się ponownie po zakończeniu i ponownym utworzeniu procesu, nawet jeśli została specjalnie usunięta z SavedStateHandle. W związku z tym SavedStateHandle nie będzie już łączyć wartości domyślnych i przywróconych, a jako źródło informacji będzie używać tylko wartości przywróconych. (I53a4b)
  • lifecycle-process zależy teraz od Androidx Startup 1.1.1, w którym naprawiono regresję polegającą na tym, że użycie ProcessLifecycleInitializer powodowało StartupException. (b/216490724)

Wersja 2.4.0

27 października 2021 roku

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.4.0 Wersja 2.4.0 zawiera te zmiany.

Ważne zmiany od wersji 2.3.0

  • Środowisko wykonawcze @OnLifecycleEvent zostało wycofane. Zamiast tego użyj pola LifecycleEventObserver lub DefaultLifecycleObserver.
  • Dodano bibliotekę androidx.lifecycle:lifecycle-viewmodel-compose. Zapewnia viewModel() komponentów i LocalViewModelStoreOwner.
    • Zmiana powodująca niezgodność z kodem źródłowym: ViewModelProvider został przepisany w języku Kotlin. Metoda ViewModelProvider.Factory.create nie zezwala już na typ ogólny dopuszczający wartość null.
  • Do androidx.lifecycle:lifecycle-runtime-ktx dodano nowe interfejsy API do współprogramów:
  • Lifecycle.repeatOnLifecycle, interfejs API, który wykonuje blok kodu w korutynie, gdy stan cyklu życia jest co najmniej w określonym stanie. Blok zostanie anulowany i ponownie uruchomiony, gdy cykl życia będzie wchodzić w stan docelowy i z niego wychodzić.
  • Flow.flowWithLifecycle, interfejs API, który emituje wartości z obiektu Flow wyższego rzędu, gdy cykl życia jest co najmniej w określonym stanie.
  • Element DefaultLifecycleObserver został przeniesiony z lifecycle.lifecycle-common-java8 do lifecycle.lifecycle-common. lifecycle.lifecycle-common-java8nie zapewnia już żadnych dodatkowych funkcji poza lifecycle.lifecycle-common, więc zależność od niego można zastąpić lifecycle.lifecycle-common.
  • Interfejs API bez korutyn z lifecycle-viewmodel-ktx został przeniesiony do modułu lifecycle-viewmodel.
  • lifecycle-process używa teraz androidx.startup do inicjowania ProcessLifecycleOwner.

    Wcześniej zajmował się tym androidx.lifecycle.ProcessLifecycleOwnerInitializer.

    Jeśli w przeszłości do inicjowania cyklu życia procesu używano tools:node="remove", musisz wykonać te czynności.ContentProvider

     <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>
    

    (lub)

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

Wersja 2.4.0-rc01

29 września 2021 r.

androidx.lifecycle:lifecycle-*:2.4.0-rc01 została wydana bez zmian w porównaniu z wersją Lifecycle 2.4.0-beta01. Wersja 2.4.0-rc01 zawiera te zmiany.

Wersja 2.4.0-beta01

15 września 2021 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.4.0-beta01 Wersja 2.4.0-beta01 zawiera te zmiany.

Zmiany w interfejsie API

  • Środowisko wykonawcze @OnLifecycleEvent zostało wycofane. Zamiast tego należy użyć LifecycleEventObserver lub DefaultLifecycleObserver. (I5a8fa)
  • Interfejs DefaultLifecycleObserver został przeniesiony z androidx.lifecycle.lifecycle-common-java8 do androidx.lifecycle.lifecycle-common. androidx.lifecycle.lifecycle-common-java8 nie zapewnia już żadnych dodatkowych funkcji poza androidx.lifecycle.lifecycle-common, więc zależność od niego można zastąpić androidx.lifecycle.lifecycle-common. (I021aa)
  • Interfejs API bez korutyn z lifecycle-viewmodel-ktx został przeniesiony do modułu lifecycle-viewmodel. (I6d5b2)

Wkład zewnętrzny

  • Dziękujemy dmitrilc za poprawienie błędu w dokumentacji ViewModel. (#221)

Wersja 2.4.0-alpha03

4 sierpnia 2021 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.4.0-alpha03 Wersja 2.4.0-alpha03 zawiera te zmiany.

Zmiany w interfejsie API

  • Zmiana powodująca niezgodność ze źródłem: klasa ViewModelProvider została przepisana w języku Kotlin. Metoda ViewModelProvider.Factory.create nie zezwala już na typ ogólny dopuszczający wartość null. (I9b9f6)

Zmiany w zachowaniu

  • Funkcja Lifecycle.repeatOnLifecycle: block jest teraz zawsze wywoływana szeregowo podczas powtarzania wykonania. (Ibab33)

Wkład zewnętrzny

  • Dziękujemy chao2zhang za poprawienie fragmentów kodu w dokumentacji repeatOnLifecycle. 205.

Wersja 2.4.0-alpha02

16 czerwca 2021 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.4.0-alpha02 Wersja 2.4.0-alpha02 zawiera te zmiany.

Nowe funkcje

  • Dodano nowy test RepeatOnLifecycleWrongUsage do lifecycle-runtime-ktx, który wykrywa nieprawidłowe użycie repeateOnLifecycleonStart() lub onResume(). (706078, b/187887400)

Zmiany w interfejsie API

  • Interfejs API LifecycleOwner.addRepeatingJob został usunięty na rzecz interfejsu Lifecycle.repeatOnLifecycle, który uwzględnia współbieżność strukturalną i jest łatwiejszy w użyciu. (I4a3a8)
  • Udostępnij ProcessLifecycleInitializer publicznie, aby inne androidx.startup.Initializer mogły używać go jako zależności. (I94c31)

Poprawki błędów

  • Rozwiązaliśmy problem z NullSafeMutableLiveData sprawdzaniem kodu, który występował, gdy pole zawierało modyfikatory. (#147, b/183696616)
  • Rozwiązaliśmy kolejny problem z kontrolą jakości NullSafeMutableLiveData podczas używania typów ogólnych. (#161, b/184830263)

Wkład zewnętrzny

Wersja 2.4.0-alpha01

24 marca 2021 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.4.0-alpha01 Wersja 2.4.0-alpha01 zawiera te zmiany.

Zmiany w zachowaniu

  • lifecycle-process używa teraz androidx.startup do inicjowania ProcessLifecycleOwner.

    Wcześniej zajmował się tym androidx.lifecycle.ProcessLifecycleOwnerInitializer.

    Jeśli w przeszłości do inicjowania cyklu życia procesu używano tools:node="remove", musisz wykonać te czynności.ContentProvider

     <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>
    

    (lub)

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

Zmiany w interfejsie API

  • Dodano interfejs Flow.flowWithLifecycle API, który emituje wartości z obiektu Flow wyższego poziomu, gdy cykl życia jest w określonym stanie, za pomocą interfejsu Lifecycle.repeatOnLifecycle API. Jest to alternatywa dla nowego interfejsu API LifecycleOwner.addRepeatinJob. (I0f4cd)

Poprawki błędów

  • Od wersji Lifecycle 2.3.1: reguła lint NonNullableMutableLiveData może teraz prawidłowo rozróżniać zmienne pól o różnej możliwości przyjmowania wartości null. (b/169249668)

Lifecycle Viewmodel Compose w wersji 1.0.0

Wersja 1.0.0-alpha07

16 czerwca 2021 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07 Wersja 1.0.0-alpha07 zawiera te zmiany.

Zmiany w interfejsie API powodujące niezgodność

  • viewModel() przyjmuje teraz opcjonalny parametr ViewModelStoreOwner, co ułatwia współpracę z właścicielami innymi niż LocalViewModelStoreOwner. Możesz na przykład użyć adnotacji viewModel(navBackStackEntry), aby pobrać ViewModel powiązany z określonym wykresem nawigacji. (I2628d, b/188693123)

Wersja 1.0.0-alpha06

2 czerwca 2021 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06 Wersja 1.0.0-alpha06 zawiera te zmiany.

Zaktualizowano, aby była zgodna z wersją Compose 1.0.0-beta08.

Wersja 1.0.0-alpha05

18 maja 2021 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05 Wersja 1.0.0-alpha05 zawiera te zmiany.

Nowe funkcje

  • Zaktualizowano, aby była zgodna z wersją Compose 1.0.0-beta07.

Poprawki błędów

  • Pliki AndroidManifest z ui-test-manifest i ui-tooling-data są teraz zgodne z Androidem 12 (I6f9de, b/184718994).

Wersja 1.0.0-alpha04

7 kwietnia 2021 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04 Wersja 1.0.0-alpha04 zawiera te zmiany.

Zmiany zależności

  • Ta wersja umożliwia synchronizowanie zależności androidx.hilt:hilt-navigation-composeandroidx.navigation:navigation-compose w usługach androidx.compose.compiler:compiler:1.0.0-beta04androidx.compose.runtime:runtime:1.0.0-beta04. W przypadku wersji 1.0.0 wymagane jest, aby kompilator i środowisko wykonawcze były zgodne.

Wersja 1.0.0-alpha03

10 marca 2021 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha03 Wersja 1.0.0-alpha03 zawiera te zmiany.

Zmiany w interfejsie API

  • LocalViewModelStoreOwner.current zwraca teraz wartość dopuszczającą wartość null ViewModelStoreOwner, aby lepiej określać, czy w bieżącej kompozycji jest dostępny element ViewModelStoreOwner. Interfejsy API, które wymagają ViewModelStoreOwner, np. viewModel()NavHost, nadal zgłaszają wyjątek, jeśli nie ustawiono ViewModelStoreOwner. (Idf39a)

Lifecycle-Viewmodel-Compose w wersji 1.0.0-alpha02

24 lutego 2021 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02 Wersja 1.0.0-alpha02 zawiera te zmiany.

Zmiany w interfejsie API

  • LocalViewModelStoreOwner ma teraz funkcje provides, których można używać z CompositionLocalProvider. Zastępują one interfejs asProvidableCompositionLocal() API. (I45d24)

Lifecycle-Viewmodel-Compose w wersji 1.0.0-alpha01

10 lutego 2021 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01 Wersja 1.0.0-alpha01 zawiera te zmiany.

Nowe funkcje

  • Funkcje viewModel()LocalViewModelStoreOwner zostały przeniesione z androidx.compose.ui.viewinterop do tego artefaktu w pakiecie androidx.lifecycle.viewmodel.compose. (I7a374)

Wersja 2.3.1

Cykl życia w wersji 2.3.1

24 marca 2021 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.3.1 Wersja 2.3.1 zawiera te zmiany.

Poprawki błędów

  • Reguła lint NonNullableMutableLiveData może teraz prawidłowo rozróżniać zmienne pól o różnej możliwości przyjmowania wartości null. (b/169249668)

Wersja 2.3.0

Wersja 2.3.0

10 lutego 2021 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.3.0 Wersja 2.3.0 zawiera te zmiany.

Główne zmiany od wersji 2.2.0

  • SavedStateHandle obsługuje klasy, które nie mogą być przekazywane w pakietach: SavedStateHandle obsługuje teraz leniwą serializację, umożliwiając wywołanie setSavedStateProvider() dla danego klucza, co zapewnia SavedStateProvider, które otrzyma wywołanie zwrotne do saveState(), gdy SavedStateHandle zostanie poproszony o zapisanie swojego stanu. Zobacz Zapisywanie klas, których nie można przekształcić w obiekt Parcelable.
  • Wymuszanie zachowań związanych z cyklem życia:
    • LifecycleRegistry wymusza teraz stan końcowy DESTROYED.
    • LifecycleRegistry sprawdza teraz, czy jego metody są wywoływane w głównym wątku. Zawsze było to wymagane w przypadku cykli życia działań, fragmentów itp. Dodanie obserwatorów z wątków innych niż główny powodowało trudne do wykrycia awarie w czasie działania. W przypadku obiektów LifecycleRegistry należących do Twoich komponentów możesz wyraźnie zrezygnować ze sprawdzania za pomocą LifecycleRegistry.createUnsafe(...), ale musisz wtedy zadbać o odpowiednią synchronizację, gdy do tego obiektu LifecycleRegistry uzyskuje się dostęp z różnych wątków.
  • Pomocnicze funkcje stanu cyklu życia i zdarzeń: dodano statyczne metody pomocnicze downFrom(State), downTo(State), upFrom(State), upTo(State) do Lifecycle.Event, aby generować Event na podstawie State i kierunku przejścia. Dodano metodę getTargetState(), która udostępnia State, do którego cykl życia przejdzie bezpośrednio po Event.
  • withStateAtLeast: dodano interfejsy API Lifecycle.withStateAtLeast, które oczekują na etap cyklu życia i synchronicznie wykonują blok kodu niezawieszającego w momencie zmiany stanu, a następnie wznawiają działanie z wynikiem. Te interfejsy API różnią się od dotychczasowych metod when*, ponieważ nie zezwalają na uruchamianie kodu zawieszającego ani nie korzystają z niestandardowego dyspozytora. (aosp/1326081)
  • ViewTree Interfejsy API: nowe interfejsy API ViewTreeLifecycleOwner.get(View)ViewTreeViewModelStoreOwner.get(View) umożliwiają pobieranie odpowiednio kontenerów LifecycleOwnerViewModelStoreOwner na podstawie instancji View. Aby prawidłowo wypełnić te pola, musisz przejść na Activity 1.2.0Fragment 1.3.0 oraz AppCompat 1.3.0-alpha01 lub nowszy. Rozszerzenia Kotlin findViewTreeLifecycleOwnerfindViewTreeViewModelStoreOwner są dostępne odpowiednio w lifecycle-runtime-ktxlifecycle-viewmodel-ktx.
  • LiveData.observe() Wycofanie rozszerzenia Kotlin: rozszerzenie Kotlin LiveData.observe() niezbędne do używania składni lambda zostało wycofane, ponieważ nie jest potrzebne w przypadku Kotlina 1.4.

Wersja 2.3.0-rc01

16 grudnia 2020 roku

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.3.0-rc01 Wersja 2.3.0-rc01 zawiera te zmiany.

Poprawki błędów

  • Metoda keys() obiektu SavedStateHandle jest teraz spójna przed zapisaniem stanu i po jego zapisaniu – obejmuje teraz klucze używane wcześniej z obiektem setSavedStateProvider(), a także klucze używane z obiektami set()getLiveData(). (aosp/1517919, b/174713653)

Wkład zewnętrzny

Wersja 2.3.0-beta01

1 października 2020 roku

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.3.0-beta01 Wersja 2.3.0-beta01 zawiera te zmiany.

Zmiany w interfejsie API

  • LiveData.observe()Rozszerzenie KotlinLiveData.observe() niezbędne do używania składni lambda zostało wycofane, ponieważ nie jest potrzebne w przypadku Kotlina 1.4. (I40d3f)

Poprawki błędów

Zmiany w dokumentacji

  • Zaktualizowaliśmy liveData kreator i asLiveData() dokumenty, aby uwzględnić w nich szczegółowe informacje o zmianie podanych wartości limitu czasu. (aosp/1122324)

Wersja 2.3.0-alpha07

19 sierpnia 2020 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.3.0-alpha07 Wersja 2.3.0-alpha07 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem z awarią w NullSafeMutableLiveDatasprawdzaniu Lint. (aosp/1395367)

Wersja 2.3.0-alpha06

22 lipca 2020 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.3.0-alpha06 Wersja 2.3.0-alpha06 zawiera te zmiany.

Nowe funkcje

  • Dodano statyczne metody pomocnicze downFrom(State), downTo(State), upFrom(State), upTo(State) do Lifecycle.Event do generowania Event na podstawie State i kierunku przejścia. Dodano metodę getTargetState(), która udostępnia State, do którego cykl życia przejdzie bezpośrednio po Event. (I00887)
  • Dodano interfejsy API Lifecycle.withStateAtLeast, które czekają na stan cyklu życia i synchronicznie wykonują blok kodu niezawieszającego w momencie zmiany stanu, a następnie wznawiają działanie z wynikiem. Te interfejsy API różnią się od dotychczasowych metod when*, ponieważ nie zezwalają na uruchamianie kodu zawieszającego ani nie korzystają z niestandardowego dyspozytora. (aosp/1326081)

Zmiany w zachowaniu

  • LifecycleRegistry wymusza teraz stan końcowy DESTROYED. (I00887)
  • LifecycleRegistry sprawdza teraz, czy jego metody są wywoływane w głównym wątku. Zawsze było to wymagane w przypadku cykli życia działań, fragmentów itp. Dodanie obserwatorów z wątków innych niż główny powodowało trudne do wykrycia awarie w czasie działania. W przypadku obiektów LifecycleRegistry należących do Twoich komponentów możesz wyraźnie zrezygnować ze sprawdzania, używając LifecycleRegistry.createUnsafe(...), ale musisz wtedy zadbać o odpowiednią synchronizację, gdy ten obiekt LifecycleRegistry jest dostępny z różnych wątków (Ie7280, b/137392809).

Poprawki błędów

  • Naprawiliśmy awarię w NullSafeMutableLiveData. (b/159987480)
  • Naprawiono ObsoleteLintCustomCheck w przypadku sprawdzania kodu za pomocą narzędzia Lint w pakiecie lifecycle-livedata-core-ktx (a w szczególności NullSafeMutableLiveData). (b/158699265)

Wersja 2.3.0-alpha05

24 czerwca 2020 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.3.0-alpha05 Wersja 2.3.0-alpha05 zawiera te zmiany.

Poprawki błędów

  • LiveData lepiej obsługuje teraz przypadki ponownego wejścia, unikając zduplikowanych wywołań funkcji onActive() lub onInactive(). (b/157840298)
  • Rozwiązaliśmy problem, który powodował, że lintowanie nie działało w Android Studio 4.1 Canary 6 lub nowszej. (aosp/1331903)

Wersja 2.3.0-alpha04

10 czerwca 2020 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.3.0-alpha04 Wersja 2.3.0-alpha04 zawiera te zmiany.

Poprawki błędów

  • Naprawiliśmy błąd w NonNullableMutableLiveData Lint check. (b/157294666)
  • NonNullableMutableLiveData Sprawdzanie kodu obejmuje teraz znacznie więcej przypadków, w których null wartość została ustawiona w MutableLiveData z parametrem typu o wartości innej niż null. (b/156002218)

Wersja 2.3.0-alpha03

20 maja 2020 r.

androidx.lifecycle:lifecycle-*:2.3.0-alpha03. Wersja 2.3.0-alpha03 zawiera te zmiany.

Nowe funkcje

  • SavedStateHandle obsługuje teraz leniwą serializację, umożliwiając wywołanie funkcji setSavedStateProvider() dla danego klucza i udostępniając SavedStateProvider, które otrzyma wywołanie zwrotne do saveState(), gdy SavedStateHandle zostanie poproszony o zapisanie swojego stanu. (b/155106862)
  • Nowy interfejs ViewTreeViewModelStoreOwner.get(View) API umożliwia pobieranie kontenera ViewModelStoreOwner na podstawie instancji View. Aby poprawnie wypełnić te pola, musisz przejść na Activity 1.2.0-alpha05, Fragment 1.3.0-alpha05AppCompat 1.3.0-alpha01. Do lifecycle-viewmodel-ktx dodano rozszerzenie Kotlin findViewModelStoreOwner(). (aosp/1295522)

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że MutableLiveDatasprawdzanie Lint wydane w Lifecycle 2.3.0-alpha01 nie było publikowane razem z artefaktem lifecycle-livedata-core-ktx. (b/155323109)

Wersja 2.3.0-alpha02

29 kwietnia 2020 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.3.0-alpha02 Wersja 2.3.0-alpha02 zawiera te zmiany.

Zmiany w interfejsie API

  • SavedStateViewModelFactory umożliwia teraz przekazywanie wartości null Application do konstruktora, aby lepiej obsługiwać przypadki, w których nie jest on łatwo dostępny i nie jest potrzebna obsługa AndroidViewModel. (aosp/1285740)

Poprawki błędów

  • Poprawiliśmy wydajność uruchamiania „na zimno”, unikając błędu weryfikacji klasy na urządzeniach z API 28 i starszych. (aosp/1282118)

Wersja 2.3.0-alpha01

4 marca 2020 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.3.0-alpha01 Wersja 2.3.0-alpha01 zawiera te zmiany.

Nowe funkcje

  • Nowy interfejs ViewTreeLifecycleOwner.get(View) API umożliwia pobieranie kontenera LifecycleOwner na podstawie instancji View. Aby poprawnie wypełnić te pola, musisz przejść na Aktywność 1.2.0-alpha01Fragment 1.3.0-alpha01. findViewTreeLifecycleOwner rozszerzenie Kotlin jest dostępne w lifecycle-runtime-ktx. (aosp/1182361, aosp/1182956)
  • Dodano nowe sprawdzenie Lint, które ostrzega, gdy ustawisz wartość null w przypadku właściwości MutableLiveData zdefiniowanej w Kotlinie jako niepustej. Jest to dostępne podczas korzystania z artefaktów livedata-core-ktx lub livedata-ktx. (aosp/1154723, aosp/1159092)
  • Dostępny jest nowy artefakt lifecycle-runtime-testing, który udostępnia TestLifecycleOwner implementujący LifecycleOwner i bezpieczny wątkowo modyfikowalny Lifecycle. (aosp/1242438)

Poprawki błędów

  • Artefakt lifecycle-runtime ma teraz unikalną nazwę pakietu. (aosp/1187196)

Wersja 2.2.0

ViewModel-Savedstate w wersji 2.2.0

5 lutego 2020 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0 Wersja 2.2.0 zawiera te zmiany.

Biblioteka Lifecycle ViewModel SavedState ma teraz tę samą wersję co inne artefakty Lifecycle. Działanie 2.2.0 jest identyczne z działaniem 1.0.0.

Wersja 2.2.0

22 stycznia 2020 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.2.0 Wersja 2.2.0 zawiera te zmiany.

Ważne zmiany od wersji 2.1.0

  • Integracja z korutynami cyklu życia: nowy artefakt lifecycle-runtime-ktx dodaje integrację między cyklem życia a korutynami Kotlin. Rozszerzyliśmy też lifecycle-livedata-ktx, aby wykorzystać korutyny. Więcej informacji znajdziesz w artykule Korzystanie z korutyn Kotlin z komponentami architektury.
  • Wycofanie ViewModelProviders.of(): ViewModelProviders.of() zostało wycofane. Możesz przekazać wartość Fragment lub FragmentActivity do nowego konstruktora ViewModelProvider(ViewModelStoreOwner), aby uzyskać tę samą funkcjonalność podczas korzystania z Fragment 1.2.0.
  • lifecycle-extensions Wycofanie artefaktu: w związku z wycofaniem ViewModelProviders.of() ta wersja oznacza wycofanie ostatniego interfejsu API w lifecycle-extensions, dlatego ten artefakt należy teraz uznać za całkowicie wycofany. Zdecydowanie zalecamy korzystanie z konkretnych artefaktów cyklu życia, których potrzebujesz (np. lifecycle-service, jeśli używasz LifecycleService, i lifecycle-process, jeśli używasz ProcessLifecycleOwner), zamiast lifecycle-extensions, ponieważ w przyszłości nie będzie dostępna wersja 2.3.0 lifecycle-extensions.
  • Gradle Incremental Annotation Processor: procesor adnotacji Lifecycle jest domyślnie przyrostowy. Jeśli Twoja aplikacja jest napisana w języku programowania Java 8, możesz użyć DefautLifecycleObserver, a jeśli jest napisana w języku programowania Java 7, możesz użyć LifecycleEventObserver.

Wersja 2.2.0-rc03

4 grudnia 2019

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.2.0-rc03 Wersja 2.2.0-rc03 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że gdy zamockowany obiekt ViewModel był przechowywany w obiekcie ViewModelStore i później wysyłano do niego zapytanie za pomocą domyślnej fabryki, występował błąd.
  • Naprawiono użycie Dispatchers.Main.immediatelaunchWhenCreated i podobnych metodach, aby były wywoływane synchronicznie podczas odpowiedniego zdarzenia cyklu życia. (aosp/1156203)

Wkład użytkowników zewnętrznych

  • Dziękujemy Andersowi Järlebergowi za przesłanie poprawki. (aosp/1156203)
  • Dziękujemy Vsevolodowi Tolstopyatovowi z Jetbrains za sprawdzenie implementacji wykonania wbudowanego.

Zmiany zależności

  • Rozszerzenia cyklu życia zależą teraz od fragmentu 1.2.0-rc03.

Wersja 2.2.0-rc02

7 listopada 2019 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.2.0-rc02 Wersja 2.2.0-rc02 zawiera te zmiany.

Poprawki błędów

  • Naprawiono błąd w konfiguracji narzędzia ProGuard w bibliotece, który występował na urządzeniach z interfejsem API w wersji 28 lub nowszej, jeśli docelowy interfejs API był starszy niż 29. (b/142778206)

Wersja 2.2.0-rc01

23 października 2019 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.2.0-rc01 Wersja 2.2.0-rc01 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że launchWhenCreated i powiązane metody były wykonywane o jedną klatkę później niż powiązana metoda cyklu życia z powodu używania Dispatchers.Main zamiast Dispatchers.Main.immediate. (aosp/1145596)

Wkład użytkowników zewnętrznych

  • Dziękujemy Nicklasowi Ansmanowi za przesłanie poprawki. (aosp/1145596)

Wersja 2.2.0-beta01

9 października 2019 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.2.0-beta01 Wersja 2.2.0-beta01 zawiera te zmiany.

Poprawki błędów

  • Naprawiono regresję wprowadzoną w Lifecycle 2.2.0-alpha05 w kolejności wywoływania ProcessLifecycleOwnerLifecycleOwner w przypadku aktywności na urządzeniach z Androidem 10. (aosp/1128132)
  • Rozwiązaliśmy problem regresji wprowadzony w Lifecycle 2.2.0-alpha05, który powodował błąd NullPointerException podczas korzystania z wersji 2.0.0 lub 2.1.0 pakietu lifecycle-process. (b/141536990)

Wersja 2.2.0-alpha05

18 września 2019 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.2.0-alpha05 Wersja 2.2.0-alpha05 zawiera te zmiany.

Poprawki błędów

  • Naprawiono wyścig w konstruktorze danych LiveData w rutynie. b/140249349

Wersja 2.2.0-alpha04

5 września 2019 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.2.0-alpha04 Listę zmian w tej wersji znajdziesz tutaj.

Nowe funkcje

  • lifecycleScope, whenCreated, whenStarted, whenResumed, viewModelScope i implementacja funkcji liveData używają teraz Dispatchers.Main.immediate zamiast Dispatchers.Main. (b/139740492)

Wkład użytkowników zewnętrznych

  • Dziękujemy Nicklasowi Ansmanowi za pomoc w przeniesieniu usługi na platformę Dispatchers.Main.immediate. (aosp/1106073)

Wersja 2.2.0-alpha03

7 sierpnia 2019 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.2.0-alpha03 Listę zmian w tej wersji znajdziesz tutaj.

Nowe funkcje

Zmiany w interfejsie API

  • ViewModelProviders.of() zostało wycofane. Aby uzyskać tę samą funkcjonalność, możesz przekazać wartość Fragment lub FragmentActivity do nowego konstruktora ViewModelProvider(ViewModelStoreOwner). (aosp/1009889)

Wersja 2.2.0-alpha02

2 lipca 2019 r.

Zostanie wycofaneandroidx.lifecycle:*:2.2.0-alpha02 Listę zmian w tej wersji znajdziesz tutaj.

Zmiany w interfejsie API

  • Zastąpiliśmy LiveDataScope.initialValue elementem LiveDataScope.latestValue, który będzie śledzić bieżącą emitowaną wartość bloku liveData.
  • Dodano nowe przeciążenie do kreatora liveData, które przyjmuje parametr timeout jako typ Duration.

Wersja 2.2.0-alpha01

7 maja 2019 r.

Zostanie wycofaneandroidx.lifecycle:*:2.2.0-alpha01 Listę zmian w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Ta wersja zawiera nowe funkcje, które dodają obsługę korutyn w języku Kotlin dla komponentów Lifecycle i LiveData. Szczegółową dokumentację znajdziesz tutaj.

ViewModel-SavedState w wersji 1.0.0

Wersja 1.0.0

22 stycznia 2020 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0 Wersja 1.0.0 zawiera te zmiany.

Ważne funkcje w wersji 1.0.0

  • Dodano nową klasę SavedStateHandle. Umożliwia to klasom ViewModel dostęp do zapisanego stanu i dodawanie do niego treści. Ten obiekt można otrzymać w konstruktorze klasy ViewModel, a fabryki domyślnie udostępniane przez Fragmenty i AppCompatActivity automatycznie wstrzykną SavedStateHandle.
  • Dodano klasę AbstractSavedStateViewModelFactory. Umożliwia tworzenie niestandardowych fabryk dla ViewModel i zapewnianie im dostępu do SavedStateHandle.

ViewModel-Savedstate w wersji 1.0.0-rc03

4 grudnia 2019

Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03 Wersja 1.0.0-rc03 zawiera te zmiany.

Zmiany zależności

  • Lifecycle ViewModel SavedState zależy teraz od Lifecycle 2.2.0-rc03.

Viewmodel-Savedstate w wersji 1.0.0-rc02

7 listopada 2019 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc02 Wersja 1.0.0-rc02 zawiera te commity.

Zmiany zależności

  • Teraz zależy od cyklu życia 2.2.0-rc02.

ViewModel-SavedState w wersji 1.0.0-rc01

23 października 2019 r.

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01 zostaje opublikowany bez zmian w stosunku do 1.0.0-beta01. Wersja 1.0.0-rc01 zawiera te commity.

ViewModel-Savedstate w wersji 1.0.0-beta01

9 października 2019 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01 Wersja 1.0.0-beta01 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że pierwsze uzyskanie dostępu do obiektu SavedState ViewModel w Activity.onActivityResult() skutkowało błędem IllegalStateException. (b/139093676)
  • Usunęliśmy IllegalStateException podczas korzystania z AbstractSavedStateViewModelFactory. (b/141225984)

ViewModel-SavedState w wersji 1.0.0-alpha05

18 września 2019 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha05 Wersja 1.0.0-alpha05 zawiera te zmiany.

Zmiany w interfejsie API

  • SavedStateViewModelFactory nie jest już rozszerzany AbstractSavedStateViewModelFactory, a SavedStateHandle jest tworzony tylko w przypadku obiektów ViewModel, które tego wymagają (aosp/1113593).

ViewModel-SavedState w wersji 1.0.0-alpha03

7 sierpnia 2019 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03 Listę zmian w tej wersji znajdziesz tutaj.

Zmiany powodujące niezgodność

ViewModel-SavedState w wersji 1.0.0-alpha02

2 lipca 2019 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha02 Listę zmian w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Dodano przeciążenie SavedStateHandle.getLiveData(), które akceptuje wartość domyślną.

Zmiany w interfejsie API

  • Nazwa SavedStateVMFactory została zmieniona na SavedStateViewModelFactory.
  • Nazwa AbstractSavedStateVMFactory została zmieniona na AbstractSavedStateViewModelFactory.

ViewModel-Savedstate w wersji 1.0.0-alpha01

13 marca 2019 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01 Pełny dziennik zatwierdzeń tej pierwszej wersji znajdziesz tutaj.

Nowe funkcje

  • Teraz ViewModels może współtworzyć savedstate. W tym celu użyj nowo wprowadzonej fabryki modelu widoku SavedStateVMFactory, a Twój model widoku powinien mieć konstruktor, który przyjmuje obiekt SavedStateHandle jako parametr.

Wersja 2.1.0

Ważne zmiany od wersji 2.0.0

  • Dodano LifecycleEventObserver w przypadku, gdy potrzebny jest strumień zdarzeń cyklu życia. Jest to publiczny interfejs API, a nie ukryta klasa GenericLifecycleObserver.
  • Dodano rozszerzenia ktx dla metod LiveData.observeTransformations.*.
  • Dodano Transformations.distinctUntilChanged, która tworzy nowy obiekt LiveData, który nie emituje wartości, dopóki nie zmieni się wartość źródła LiveData.
  • Dodano obsługę korutyn w klasach ViewModel przez dodanie właściwości rozszerzenia ViewModel.viewModelScope.

Wersja 2.1.0

5 września 2019 r.

Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.1.0 Listę zmian w tej wersji znajdziesz tutaj.

Wersja 2.1.0-rc01

2 lipca 2019 r.

androidx.lifecycle:*:2.1.0-rc01 zostaje opublikowany bez zmian w stosunku do androidx.lifecycle:*:2.1.0-beta01. Listę zmian w tej wersji znajdziesz tutaj.

Wersja 2.1.0-beta01

7 maja 2019 r.

Zostanie wycofaneandroidx.lifecycle:*:2.1.0-beta01 Listę zmian w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Cykle życia są przenoszone do wersji beta: interfejs API wprowadzony w poprzednich wersjach alfa, np. liveData funkcje rozszerzeń do przekształceń i obserwacji, ViewModel inicjowanie z delegowaniem właściwości i inne, są stabilizowane i nie będą się zmieniać.

Wersja 2.1.0-alpha04

3 kwietnia 2019 r.

Zostanie wycofaneandroidx.lifecycle:*:2.1.0-alpha04 Listę zmian w tej wersji znajdziesz tutaj.

Zmiany w interfejsie API

  • Zmiana powodująca niezgodność: interfejs API, który obsługuje funkcje by viewModels()by activityViewModels(), został zmieniony, aby obsługiwać bezpośrednio ViewModelStore, a nie tylko ViewModelStoreOwner. (aosp/932932)

Wersja 2.1.0-alpha03

13 marca 2019 r.

Zostanie wycofaneandroidx.lifecycle:*:2.1.0-alpha03 Pełną listę zmian w tej wersji znajdziesz tutaj.

Zmiany w interfejsie API

  • Usunięto kartę ViewModelProvider.KeyedFactory. Drugi interfejs oprócz ViewModelProvider.Factory nie pasował do nowych funkcji, takich jak delegowanie właściwości w języku Kotlin by viewmodels {}. (aosp/914133)

Wersja 2.1.0-alpha02

30 stycznia 2019 r.

Zostanie wycofaneandroidx.lifecycle 2.1.0-alpha02

Zmiany w interfejsie API

  • LifecycleRegistry zawiera teraz metodę setCurrentState(), która zastępuje wycofaną metodę setState(). (aosp/880715)

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował awarię instancji mock ViewModel, gdy zawierający element ViewModelStore był czyszczony. b/122273087

Wersja 2.1.0-alpha01

17 grudnia 2018 r.

Zostanie wycofaneandroidx.lifecycle 2.1.0-alpha01

Nowe funkcje

  • Dodano LifecycleEventObserver w przypadku, gdy potrzebny jest strumień zdarzeń cyklu życia. Jest to publiczny interfejs API, a nie ukryta klasa GenericLifecycleObserver.
  • Dodano rozszerzenia ktx dla metod LiveData.observeTransformations.*.
  • Dodano metodę Transformations.distinctUntilChanged. Tworzy nowy obiekt LiveData, który nie emituje wartości, dopóki nie zmieni się wartość źródłowego obiektu LiveData.
  • Obsługa korutyn w klasach ViewModel: dodano właściwość rozszerzenia ViewModel.viewModelScope.
  • Dodaliśmy ViewModelProvider.KeyedFactory, fabrykę obiektów ViewModel, która w metodzie create otrzymuje keyClass.

Wersja 2.0.0

Wersja 2.0.0

21 września 2018 r.

Wersja 2.0.0 biblioteki Lifecycle została wydana z 1 poprawką błędu z 2.0.0-rc01 w ViewModel.

Poprawki błędów

  • Naprawiono regułę ProGuard w ViewModel, która nieprawidłowo usuwała konstruktory b/112230489

Wersja 2.0.0-beta01

2 lipca 2018 r.

Poprawki błędów

  • Poprawiono regułę ProGuard dla klasy LifecycleObserver, aby zachowywać tylko implementacje, a nie podinterfejsy b/71389427
  • Poprawiono reguły ProGuard dla ViewModel, aby umożliwić zaciemnianie i zmniejszanie rozmiaru.

Wersje sprzed Androida X

W przypadku wersji Lifecycle sprzed Androida X, które są wymienione poniżej, uwzględnij te zależności:

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"
}

Wersja 1.1.1

21 marca 2018 r.

Tylko jedna niewielka zmiana: android.arch.core.util.Function przeniesiony z arch:runtime do arch:common. Dzięki temu można go używać bez zależności od środowiska wykonawczego, np. w paging:common poniżej.

lifecycle:common jest zależnością lifecycle:runtime, więc ta zmiana nie wpływa bezpośrednio na lifecycle:runtime, tylko na moduły, które są bezpośrednio zależne od lifecycle:common, tak jak Paging.

Wersja 1.1.0

22 stycznia 2018 r.

Zmiany w opakowaniu

Dostępne są teraz nowe, znacznie mniejsze zależności:

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

Zmiany w interfejsie API

  • Wycofane funkcje LifecycleActivityLifecycleFragment zostały usunięte. Używaj funkcji FragmentActivity, AppCompatActivity lub Fragment.
  • Do plików ViewModelProviders i ViewModelStores dodano adnotacje @NonNull
  • Konstruktor ViewModelProviders został wycofany – używaj bezpośrednio jego metod statycznych.
  • ViewModelProviders.DefaultFactory zostało wycofane. Używaj ViewModelProvider.AndroidViewModelFactory.
  • Dodano statyczną metodę ViewModelProvider.AndroidViewModelFactory.getInstance(Application), która umożliwia pobieranie statycznego obiektu Factory odpowiedniego do tworzenia instancji ViewModelAndroidViewModel.