Cykl życia

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

Ta tabela zawiera wszystkie artefakty w grupie androidx.lifecycle.

Artefakt Wersja stabilna Wersja kandydująca Wersja Beta Wersja alfa
lifecycle-* 2.8.7 - - 2.9.0-alpha07
lifecycle-viewmodel-compose 2.8.7 - - 2.9.0-alpha07
Ostatnia aktualizacja tej biblioteki miała miejsce 13 listopada 2024 r.

Deklarowanie zależności

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

Dodaj zależności dla artefaktów, których potrzebujesz, w pliku build.gradle aplikacji lub modułu:

Kotlin

Odlotowe

    dependencies {
        def lifecycle_version = "2.8.7"
        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"

        // 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.8.7"
        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")

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

Odlotowe

    dependencies {
        def lifecycle_version = "2.8.7"
        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.8.7"
        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 zauważysz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nowy problem, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz dodać swój głos do istniejącego problemu, klikając przycisk z gwiazdką.

Tworzenie nowego zgłoszenia

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

Wersja 2.9

Wersja 2.9.0-alpha07

13 listopada 2024 r.

androidx.lifecycle:lifecycle-*:2.9.0-alpha07 został zwolniony. Wersja 2.9.0-alpha07 zawiera te komity.

Zgodność Kotlin Multiplatform

  • Cykl życia ViewModel SavedState jest teraz zgodny z KMP. Dzięki temu możesz używać SavedStateHandle w kodzie ogólnym. (Ib6394, b/334076622)

Obsługa serializacji KotlinX

  • Dzięki obsłudze serializacji KotlinX dodanej w SavedState 1.3.0-alpha05 wprowadziliśmy saved, czyli nieaktywny obiekt delegowany, który ułatwia przechowywanie klas @SerializableSavedStateHandle i ich automatyczne przywracanie po zakończeniu działania procesu i jego ponownym uruchomieniu. Delegate saved jest leniwy i nie wywoła funkcji lambda init ani nie zapisze niczego w tablicy SavedStateHandle, dopóki nie uzyska do niej dostępu. (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 przeznaczona tylko dla kluczy i nie można jej używać z getLiveData. Jeśli spróbujesz użyć obu 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.

androidx.lifecycle:lifecycle-*:2.9.0-alpha06 został zwolniony. Wersja 2.9.0-alpha06 zawiera te komity.

Zmiany w zachowaniu

  • Stan Lifecycle.DESTROYED jest stanem końcowym, a każda próba przeniesienia Lifecycle do innego stanu spowoduje stan IllegalStateException. (I116c4, b/370577987)
  • SavedStateHandle nie zawiera już żadnych wartości SavedStateProvider.saveState(), gdy zwracana wartość Bundle jest pusta. (I910b5, b/370577987)

Poprawki błędów

  • Lifecycle.eventFlow jest teraz prawidłowo wypełniany, gdy Lifecycle ma wartość DESTROYED (I293b2, b/374043130)

Wersja 2.9.0-alpha05

16 października 2024 r.

androidx.lifecycle:lifecycle-*:2.9.0-alpha05 jest publikowana bez istotnych zmian. Wersja 2.9.0-alpha05 zawiera te komity.

Wersja 2.9.0-alpha04

2 października 2024 r.

androidx.lifecycle:lifecycle-*:2.9.0-alpha04 został zwolniony. Wersja 2.9.0-alpha04 zawiera te komity.

Kotlin Multiplatform

  • Moduł lifecycle-viewmodel-savedstate jest teraz skonfigurowany tak, aby był zgodny z KMP w ramach przygotowań do udostępnienia interfejsów API, takich jak SavedStateHandle, w przyszłej wersji w ramach wspólnego zestawu źródeł. (I503ed, I48764, b/334076622)

Wersja 2.9.0-alpha03

18 września 2024 r.

androidx.lifecycle:lifecycle-*:2.9.0-alpha03 został zwolniony. Wersja 2.9.0-alpha03 zawiera te komity.

Poprawki błędów

Aktualizacje zależności

Wersja 2.9.0-alpha02

4 września 2024 r.

androidx.lifecycle:lifecycle-*:2.9.0-alpha02 został zwolniony. Wersja 2.9.0-alpha02 zawiera te komity.

Poprawki błędów

  • W sekcji Cykl życia 2.8.5: zaktualizuj reguły androidx.lifecycle.ReportFragment ProGuard, aby zezwolić na zaciemnianie . (ff898e1)

Darowizna zewnętrzna

  • Przenieś androidx.compose.ui.platform.LocalLifecycleOwner do wspólnego zbioru źródeł (KMP). Dziękujemy Ivanowi Matkovowi z JetBrains za pomoc. (8cd5d03)
  • Zmiana w Cykl życia 2.8.5: delegat rozszerzenia SavedStateHandle.saveable obsługuje teraz wartości null. Dziękujemy Romanowi Kalukiewiczowi za pomoc. (0d78ea6)

Wersja 2.9.0-alpha01

7 sierpnia 2024 r.

androidx.lifecycle:lifecycle-*:2.9.0-alpha01 został zwolniony. Wersja 2.9.0-alpha01 zawiera te komity.

Kotlin Multiplatform

  • lifecycle-testing jest teraz zgodny z KMP. (Iea41e)
  • Dodanie obsługi linuxArm64 w wersji Kotlin Multiplatform (I139d3, b/338268719)

Nowe funkcje

  • Dostępny jest nowy artefakt androidx.lifecycle:lifecycle-viewmodel-testing KMP, który udostępnia klasę ViewModelScenario do testowania widoków modelu w odizolowaniu. Obsługuje ona onCleared (wszystkie platformy) i SavedStateHandle (tylko Android). (337f68d, c9b3409, 9799a95c, b/264602919)
  • Tworzenie ViewModel za pomocą ViewModelProvider jest teraz bezpieczne dla wątku; adnotacje @MainThread zostały usunięte. (Ifd978, b/237006831)

Zmiany w interfejsie API

  • Dodaj funkcję fabryki CreationExtras.Key(), aby uprościć tworzenie anonimowych obiektów CreationExtras.Key. (I970ee)
  • CreationExtras zawiera teraz przeciążenia operatorów podobnych do map, aby umożliwić idiomatyczne manipulowanie treściami w Kotlinie. Umożliwia użycie właściwości in, +=+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 w wierszu, która umożliwia bezpieczne udostępnianie aplikacji w wersji języka Kotlin 2.0 (I39df2)

Poprawki błędów

  • Usunięto 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 dla 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.

androidx.lifecycle:lifecycle-*:2.8.7 został zwolniony. Wersja 2.8.7 zawiera te komitowane zmiany.

Zmiany w interfejsie API

  • Usługa androidx.compose.ui.platform.LocalLifecycleOwner jest teraz dostępna w ramach wspólnego zbioru źródeł (KMP). (6a3f5b3)
  • lifecycle-runtime-compose: usunięto desktop artefakty i dodano -jvmStubs oraz -linuxx64Stubs. Żadnego z tych celów nie należy używać. Są to elementy zastępcze, które ułatwiają pracę Jetbrains Compose. (6a3f5b3)

Wersja 2.8.6

18 września 2024 r.

androidx.lifecycle:lifecycle-*:2.8.6 został zwolniony. Wersja 2.8.6 zawiera te komity.

Poprawki błędów

  • W przypadku błędu NullSafeMutableLiveData w Lint poprawiliśmy obsługę inteligentnych wywołań, aby uniknąć fałszywie pozytywnych wyników. (85fed6, b/181042665)

Aktualizacje zależności

Wersja 2.8.5

4 września 2024 r.

androidx.lifecycle:lifecycle-*:2.8.5 został zwolniony. Wersja 2.8.5 zawiera te komitowane zmiany.

Poprawki błędów

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

Darowizna zewnętrzna

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

Wersja 2.8.4

24 lipca 2024 r.

androidx.lifecycle:lifecycle-*:2.8.4 został zwolniony. Wersja 2.8.4 zawiera te komisy.

Poprawki błędów

  • LiveData.asFlow() obsługuje teraz poprawnie przypadki, w których zwrócony przepływ jest natychmiast zakończony po otrzymaniu wartości ustawionej w LiveData (na przykład podczas używania take(1)). (I9c566)
  • Zakończenie Lifecycle*Effect jest teraz idempotentne (czyli jeśli metoda onStopOrDispose została wywołana z powodu zatrzymania cyklu życia, nie zostanie wywołana po zakończeniu, chyba że cykl życia wróci do stanu STARTED). (I5f607, b/352364595)

Wersja 2.8.3

1 lipca 2024 r.

androidx.lifecycle:lifecycle-*:2.8.3 został zwolniony. Wersja 2.8.3 zawiera te komitowane zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem z kompatybilnością wsteczną Lifecycle 2.8 z Compose 1.6.0 i starszymi wersjami podczas kompresowania kodu. (aosp/3133056, b/346808608)

Wersja 2.8.2

12 czerwca 2024 r.

androidx.lifecycle:lifecycle-*:2.8.2 został zwolniony. Wersja 2.8.2 zawiera te komitowane zmiany.

Poprawki błędów

  • Rozwiązaliśmy problemy z błędami CompositionLocal LocalLifecycleOwner not present występującymi podczas korzystania z Lifecycle 2.8.X z Compose 1.6.X lub wcześniejszą wersją – teraz możesz używać Lifecycle 2.8.2 z dowolną wersją Compose bez konieczności stosowania obejść. (aosp/3105647, b/336842920)
  • ViewModelProvider nie będzie się już zawieszać, gdy mieszasz poprzednie wersje zależności cyklu życia compileOnly z wersjami 2.8 i nowszymi. Rozwiązano problemy z bibliotekami takimi jak LeakCanary. (I80383, b/341792251)

Wersja 2.8.1

29 maja 2024 r.

androidx.lifecycle:lifecycle-*:2.8.1 został zwolniony. Wersja 2.8.1 zawiera te komity.

Poprawki błędów

  • lifecycle-viewmodel-compose ma teraz tylko wspólną zależność od compose-runtime, co powoduje usunięcie wspólnej zależności od compose-ui. Element Androida zachowuje compose-ui dla zgodności. (aosp/3079334, b/339562627)
  • Integracja ViewModel z usługą saveable za pomocą delegatów usług korzysta teraz z nazwy klasy jako części automatycznie generowanego klucza, co zapobiega konfliktom, jeśli wiele klas używa tej samej usługi SavedStateHandle. (aosp/3063463)

Wersja 2.8.0

14 maja 2024 r.

androidx.lifecycle:lifecycle-*:2.8.0 został zwolniony. Wersja 2.8.0 zawiera te komity.

Ważne zmiany od wersji 2.7.0

  • Interfejs LocalLifecycleOwner został przeniesiony z interfejsu Compose do interfejsu lifecycle-runtime-compose, aby można było używać interfejsów API pomocniczych opartych na Compose poza interfejsem Compose.
  • Element lifecycle-runtime-compose zawiera teraz interfejsy API dropUnlessResumeddropUnlessStarted, które umożliwiają pomijanie kliknięć lub innych zdarzeń, które występują nawet po spadku wartości LifecycleOwner poniżej podanej wartości Lifecycle.State. Można go na przykład użyć w komponencie Navigation Compose, aby uniknąć obsługi zdarzeń kliknięcia po rozpoczęciu przejścia na inny ekran: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
  • Parametr ViewModel.viewModelScope jest teraz parametrem konstruktora, który można zastąpić, co pozwala wstrzyknąć własny rozsyłający i SupervisorJob() lub zastąpić domyślny parametr za pomocą parametru 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)
    }
    
  • Funkcja ViewModel została przepisana w Kotlinie i korzysta teraz z funkcji AutoClosable zamiast Closeable. Teraz obsługuje dodawanie obiektów AutoCloseable za pomocą key, co umożliwia ich pobieranie za pomocą getCloseable().

  • Wywoływanie interfejsów LifecycleStartEffectLifecycleResumeEffect bez klucza jest teraz błędem, ponieważ te interfejsy API stosują tę samą konwencję co interfejs DisposableEffect, który odzwierciedlają.

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

  • Rozszerzenia lifecycle-livedata-core-ktx w języku Kotlin zostały przeniesione do modułu lifecycle-livedata-core.

  • Funkcja NullSafeMutableLiveData została przebudowana, aby uniknąć wielu wyników fałszywie pozytywnych.

Zgodność Kotlin Multiplatform z cyklem życia aplikacji

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

Dotyczy to następujących artefaktów:

  • lifecycle-common przenosi większość interfejsów API do common i oprócz Androida obsługuje jvm i iOS.
  • lifecycle-runtime przenosi większość interfejsów API do common i oprócz Androida obsługuje jvm i iOS.
  • Interfejs lifecycle-runtime-ktx jest teraz pusty, ponieważ wszystkie interfejsy API zostały przeniesione do interfejsu lifecycle-runtime.
  • lifecycle-runtime-compose przenosi wszystkie interfejsy API do common i wysyła artefakt Androida, który odpowiada obsłudze wielu platform w androidx.compose.

Zgodność ViewModel Kotlin Multiplatform

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

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

Zgodność binarna na Androidzie została zachowana, ale w porównaniu z interfejsem API Androida do interfejsu API wspólnego wprowadzono kilka istotnych zmian:

  • Tworzenie instancji ViewModelProvider odbywa się teraz za pomocą metod ViewModelProvider.create(), a nie przez bezpośrednie wywołanie konstruktora.
  • ViewModelProvider.NewInstanceFactoryViewModelProvider.AndroidViewModelFactory są dostępne tylko na Androidzie.
    • Zalecamy, aby fabryki niestandardowe rozszerzały klasę ViewModelProvider.Factory i korzystały z metody create, która przyjmuje parametr CreationExtras, lub z biblioteki viewModelFactory Kotlin DSL.
  • Użycie ViewModelProvider bez niestandardowej fabryki na platformach innych niż JVM spowoduje błąd UnsupportedOperationException. Na platformach JVM zgodność jest zachowana dzięki konstruktorowi ViewModel bez argumentów, jeśli nie zostanie podana niestandardowa fabryka.
  • viewModelScope będzie używany jako EmptyCoroutineContext na platformach, na których Dispatchers.Main jest niedostępny (np. Linux).

Dotyczy to następujących artefaktów:

  • lifecycle-viewmodel przenosi większość interfejsów API do common i oprócz Androida obsługuje jvm i iOS.
  • Interfejs lifecycle-viewmodel-ktx jest teraz pusty, ponieważ wszystkie interfejsy API zostały przeniesione do interfejsu lifecycle-viewmodel.
  • lifecycle-viewmodel-compose przenosi wszystkie interfejsy API do common i wysyła artefakt Androida, który odpowiada obsłudze wielu platform w androidx.compose.

Zmiany w zachowaniu

  • Funkcja InitializerViewModelFactory (w tym funkcja kreatora viewModelFactory) będzie teraz wywoływać błąd IllegalArgumentException, jeśli initializer o tej samej wartości clazz: KClass<VM : ViewModel> została już dodana. (Ic3a36)

Znane problemy

Wersja 2.8.0-rc01

1 maja 2024 r.

androidx.lifecycle:lifecycle-*:2.8.0-rc01 został zwolniony. Wersja 2.8.0-rc01 zawiera te komisy.

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że profil referencyjny dla klas lifecycle-common nie był prawidłowo zapakowany. Teraz są one pakowane w pliku AAR lifecycle-runtime. (aosp/3038274, b/322382422)
  • Rozwiązaliśmy problem polegający na niezamierzonej zmianie kolejności usuwania instancji AutoCloseable dołączonych do ViewModel – przywróciliśmy poprzednią kolejność: addCloseable(String, AutoCloseable), addClosable(AutoCloseable)onCleared(). (aosp/3041632)
  • Ulepszono domyślne zachowanie podczas tworzenia viewModelScope w środowiskach natywnych i JVM na komputer. (aosp/3039221)

Darowizna zewnętrzna

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

Wersja 2.8.0-beta01

17 kwietnia 2024 r.

androidx.lifecycle:lifecycle-*:2.8.0-beta01 został zwolniony. Wersja 2.8.0-beta01 zawiera te commity.

Nowe funkcje

  • Element lifecycle-runtime-compose jest teraz zgodny z Kotlin Multiplatform, a jego kod został przeniesiony do pliku common. Zawiera on element Android, który jest zgodny z obsługą wielu platform w przypadku pliku androidx.compose. (If7a71, I4f4a0, b/331769623)

Wersja 2.8.0-alpha04

3 kwietnia 2024 r.

androidx.lifecycle:lifecycle-*:2.8.0-alpha04 został zwolniony. Wersja 2.8.0-alpha04 zawiera te komity.

Nowe funkcje

  • Element lifecycle-viewmodel-compose jest teraz zgodny z Kotlin Multiplatform, a jego kod został przeniesiony do pliku common. Zawiera on element Android, który jest zgodny z obsługą wielu platform w pliku androidx.compose. Aby uwzględnić tę zmianę, kompozytowa metoda viewModel akceptuje teraz wartość KClass oprócz wartości java.lang.Class. (b/330323282)

Poprawki błędów

  • Funkcja NullSafeMutableLiveData została przebudowana, aby uniknąć wielu wyników fałszywie pozytywnych. (I2d8c1, Iafb18, I03463, I7ecef)

Aktualizacja zależności

  • Element lifecycle-viewmodel-compose zależy teraz od wersji Compose 1.6.0.
  • Cykl życia zależy teraz od instalatora profilu 1.3.1.

Wersja 2.8.0-alpha03

20 marca 2024 r.

androidx.lifecycle:lifecycle-*:2.8.0-alpha03 został zwolniony. Wersja 2.8.0-alpha03 zawiera te commity.

Nowe funkcje

  • Parametr ViewModel.viewModelScope jest teraz parametrem konstruktora, który można zastąpić, co pozwala wstrzyknąć własny rozsyłający i SupervisorJob() lub zastąpić domyślny parametr za pomocą parametru 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ść Kotlin Multiplatform

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

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

Zgodność binarna na Androidzie została zachowana, ale w porównaniu z interfejsem API Androida do interfejsu API wspólnego wprowadzono kilka istotnych zmian:

  • Tworzenie instancji ViewModelProvider odbywa się teraz za pomocą metod ViewModelProvider.create(), a nie przez bezpośrednie wywołanie konstruktora.
  • ViewModelProvider.NewInstanceFactoryViewModelProvider.AndroidViewModelFactory są dostępne tylko na Androidzie.
    • Zalecamy, aby fabryki niestandardowe rozszerzały klasę ViewModelProvider.Factory i korzystały z metody create, która przyjmuje parametr CreationExtras, lub z biblioteki viewModelFactory Kotlin DSL.
  • Użycie ViewModelProvider bez niestandardowej fabryki na platformach innych niż JVM spowoduje błąd UnsupportedOperationException. Na platformach JVM zgodność jest zachowana dzięki konstruktorowi ViewModel bez argumentów, jeśli nie zostanie podana niestandardowa fabryka.
  • viewModelScope będzie używany jako EmptyCoroutineContext na platformach, na których Dispatchers.Main jest niedostępny (np. Linux).

Zmiany w zachowaniu

  • Funkcja InitializerViewModelFactory (w tym funkcja kreatora viewModelFactory) będzie teraz wywoływać błąd IllegalArgumentException, jeśli initializer o tej samej wartości clazz: KClass<VM : ViewModel> została już dodana. (Ic3a36)

Poprawki błędów

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

Darowizna zewnętrzna

  • LocalLifecycleOwner przeniesiono z interfejsu Compose do interfejsu lifecycle-runtime-compose, aby można było używać interfejsów API pomocniczych opartych na Compose poza interfejsem Compose. Dziękujemy Jake’owi Whartonowi za pomoc. (I6c41b, b/328263448)

Wersja 2.8.0-alpha02

21 lutego 2024 r.

androidx.lifecycle:lifecycle-*:2.8.0-alpha02 został zwolniony. Wersja 2.8.0-alpha02 zawiera te commity.

Nowe funkcje

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

Konwersje Kotlina

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

Zgodność Kotlin Multiplatform

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

Zmiany w interfejsie API

  • Wywoływanie interfejsów LifecycleStartEffectLifecycleResumeEffect bez klucza jest teraz błędem, ponieważ te interfejsy API stosują tę samą konwencję co interfejs DisposableEffect, który odzwierciedlają. (Ib0e0c, b/323518079)
  • W elementach ViewModel używa się teraz wartości AutoCloseable zamiast Closeable. Jest to zmiana zgodna wstecznie. (I27f8e, b/214568825)
  • Wycofano LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) na rzecz LiveData.toPublisher(lifecycleOwner). (Iabe29, b/262623005)

Darowizna zewnętrzna

  • Dziękujemy Ivanowi Matkovowi z Jetbrains za pomoc w przełożeniu Lifecycle na Kotlin Multiplatform. (aosp/2926690, I0c5ac, If445d)

Wersja 2.8.0-alpha01

24 stycznia 2024 r.

androidx.lifecycle:lifecycle-*:2.8.0-alpha01 został zwolniony. Wersja 2.8.0-alpha01 zawiera te commity.

Nowe funkcje

  • ViewModel obsługuje teraz dodawanie obiektów Closeable za pomocą key, co umożliwia ich pobieranie za pomocą getCloseable(). (I3cf63)

Wersja 2.7

Wersja 2.7.0

10 stycznia 2024 r.

androidx.lifecycle:lifecycle-*:2.7.0 został zwolniony. Wersja 2.7.0 zawiera te commity.

Ważne zmiany od wersji 2.6.0

  • TestLifecycleOwner zawiera teraz funkcję zawieszania setCurrentState(), która zapewnia, że zmiana stanu i wszystkie wywołania zwrotne LifecycleObserver zostaną zakończone przed powrotem. W przeciwieństwie do bezpośredniego ustawiania właściwości currentState ta metoda nie używa funkcji runBlocking, dzięki czemu można ją bezpiecznie używać w ramach współbieżnej funkcji, takiej jak funkcja udostępniana przez runTest.
  • Rozszerzenia LiveData funkcji mapswitchMap odzwierciedlają teraz działanie funkcji distinctUntilChanged – jeśli w funkcji LiveData jest ustawiona wartość value, funkcja map/switchMap zostanie wywołana natychmiast, aby wypełnić parametr value zwracanej funkcji LiveData. Dzięki temu początkowa wartość zostanie ustawiona jako część pierwszej kompozycji (w przypadku użycia z observeAsState()), ale nie zmieni to zachowania obserwacji – wartości źródłowe LiveData będą nadal stosowane dopiero po rozpoczęciu obserwowania LiveData.
  • W tej wersji rozwiązujemy problem, który powodował, że SavedStateHandle nie przywracało prawidłowo niestandardowych klas Parcelable po zakończeniu i ponownym uruchomieniu procesu. Ze względu na utratę informacji o typie przez platformę Android tablice niestandardowych obiektów Parcelable wymagają dodatkowej pracy (ręcznego tworzenia tablicy typów o odpowiednim typie). Dokumentacja dotycząca funkcji get, getLiveDatagetStateFlow uwzględnia teraz to ograniczenie.
  • Reguły proguard keep powiązane z LifecycleObserver zostały usunięte. Oznacza to, że kod chroniony, który chce używać interfejsów API za pomocą mechanizmu odzwierciedlenia (np. za pomocą adnotacji @OnLifecycleEvent, która została już dawno wycofana) będzie musiał zawierać własne reguły keep w przypadku konkretnego przypadku użycia.

Widoczność zdarzeń z 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ć LifecycleEventEffect do uruchamiania efektów ubocznych Compose na podstawie Lifecycle.Event.
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
    viewModel.refreshData()
  }
  // …
}
  • Użytkownicy Jetpack Compose mogą używać zdarzeń LifecycleStartEffect i LifecycleResumeEffect do obsługi par zdarzeń – odpowiednio „started” (rozpoczęto) i „resumed” (wznowiono). Ten interfejs API odzwierciedla ten, który znajduje się w DisposableEffect, i jest odpowiedni w przypadkach, gdy zmiana wprowadzona podczas zwiększania stanu musi zostać odwrócona podczas zmniejszania stanu.
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleStartEffect(viewModel) {
    val timeTracking = viewModel.startTrackingTimeOnScreen()
    onStopOrDispose {
      timeTracking.stopTrackingTimeOnScreen()
    }
  }
  // …
}

Więcej informacji znajdziesz w artykule Uruchamianie kodu w związku ze zdarzeniami cyklu życia.

Widoczność stanu cyklu życia

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

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

Wersja 2.7.0-rc02

13 grudnia 2023 r.

androidx.lifecycle:lifecycle-*:2.7.0-rc02 został zwolniony. Wersja 2.7.0-rc02 zawiera te commity.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że SavedStateHandle nie przywracał prawidłowo niestandardowych klas Parcelable po zakończeniu i ponownym utworzeniu procesu. Ze względu na utratę informacji o typie przez platformę Android tablice niestandardowych obiektów Parcelable wymagają dodatkowej pracy (ręcznego tworzenia tablicy typów o odpowiednim typie). Dokumentacja dotycząca funkcji get, getLiveDatagetStateFlow uwzględnia teraz to ograniczenie. (I0b55a)

Wersja 2.7.0-rc01

15 listopada 2023 r.

androidx.lifecycle:lifecycle-*:2.7.0-rc01 został zwolniony. Wersja 2.7.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

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

Wersja 2.7.0-beta01

1 listopada 2023 roku

androidx.lifecycle:lifecycle-*:2.7.0-beta01 jest opublikowany bez wprowadzenia zmian. Wersja 2.7.0-beta01 zawiera te commity.

  • Wersja beta z niewielkimi zmianami w porównaniu z poprzednią wersją.

Wersja 2.7.0-alpha03

18 października 2023 r.

androidx.lifecycle:lifecycle-*:2.7.0-alpha03 został zwolniony. Wersja 2.7.0-alpha03 zawiera te commity.

Nowe funkcje

  • lifecycle-runtime-testing zawiera teraz nową kontrolę Lint, która zapobiega ustawianiu Lifecycle.StateTestLifecycleOwner za pomocą pola currentState w ramach coroutine. Sprawdzanie Lint sugeruje teraz zawieszenie setCurrentState, co umożliwia ustawienie Lifecycle.State bez blokowania. (Icf728, b/297880630)

Poprawki błędów

  • Rozwiązaliśmy problem z funkcją LiveData.switchMap, w którym zwracanie tego samego wystąpienia LiveData w ramach pierwszego i następnego wywołania uniemożliwiało dodanie tego wystąpienia jako źródła.LiveData (Ibedcba7)

Wersja 2.7.0-alpha02

6 września 2023 r.

androidx.lifecycle:lifecycle-*:2.7.0-alpha02 został zwolniony. Wersja 2.7.0-alpha02 zawiera te commity.

Nowe funkcje

  • TestLifecycleOwner zawiera teraz funkcję zawieszania setCurrentState(), aby umożliwić użytkownikom korzystanie z funkcji TestLifecycleOwner w ramach coroutine, np. tej udostępnianej przez 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 obiektu LiveData, jeśli poprzedni obiekt LiveData ma ustawioną wartość, co zapewnia, że korzystanie z wynikającej z tego funkcji LiveData w Jetpack Compose będzie miało prawidłowy stan w początkowej kompozycji. (I91d2b, b/269479952)
  • ViewModel addCloseable() teraz natychmiast zamyka Closeable, jeśli ViewModel otrzymało już połączenie z onCleared(). (I4712e, b/280294730)

Poprawki błędów

  • cyklu życia 2.6.2: rozwiązaliśmy problem, który powodował, że po zakończeniu procesu SavedStateHandle nie był prawidłowo przywracany, jeśli stan został przywrócony, wywołano save() bez zapisywania stanu w rodzicu SavedStateRegistry, a następnie stan został przywrócony ponownie. Rozwiązanie to naprawia interakcję między rememberSaveable a elementem NavHost w komponencie Navigation Compose. (aosp/2729289)

Wersja 2.7.0-alpha01

26 lipca 2023 r.

androidx.lifecycle:lifecycle-*:2.7.0-alpha01 został zwolniony. Wersja 2.7.0-alpha01 zawiera te commity.

Zmiany w interfejsie API

  • Wartość Lifecycle.State jest teraz dostępna do obserwacji w komponencie za pomocą funkcji Lifecycle.currentStateFlow, która zwraca wartość StateFlow, gdzie value to bieżąca wartość Lifecycle.State. (Ib212d, b/209684871)
  • Lifecycle.Events może teraz być obserwowany jako FlowLifecycle.asFlow(). (If2c0f, b/176311030)
  • Dodano interfejs API LifecycleResumeEffect, aby można było uruchamiać kompozycję SideEffect na podstawie wywołań zwrotnych zdarzeń Lifecycle.Event.ON_RESUME i Lifecycle.Event.ON_PAUSE. (I60386, b/235529345)
  • Dodano interfejs API LifecycleStartEffect, aby można było uruchamiać komponenty SideEffect na podstawie wywołań zwrotnych zdarzeń Lifecycle.Event.ON_STARTLifecycle.Event.ON_STOP. (I5a8d1, b/235529345)
  • Dodano interfejs API LifecycleEventEffect, aby można było uruchamiać komponenty SideEffect na podstawie Lifecycle.Event. (Ic9794, b/235529345)
  • Dodano rozszerzenie Lifecycle.collectAsState(), aby umożliwić bezpośrednie wyświetlanie Lifecycle.State jako okna tworzenia wiadomości State. Jest to równoważne (i krótsze) lifecycle.currentStateFlow.collectAsState(). (I11015, b/235529345)

Poprawki błędów

  • Rozszerzenie LiveData.distinctUntilChanged() ustawia teraz wartość value zwracanego elementu LiveData, jeśli poprzedni element LiveData ma ustawioną wartość. Nie zmienia to zachowania obserwacji – zaktualizowane wartości ze źródła LiveData będą miały zastosowanie dopiero wtedy, gdy zaczniesz obserwować LiveData zwracane przez distinctUntilChanged(). (Ib482f)
  • Reguły proguard keep powiązane z LifecycleObserver zostały usunięte. Oznacza to, że chroniony kod, który chce używać interfejsów API za pomocą mechanizmu odzwierciedlenia, musi podać własne reguły dotyczące przechowywania danych w przypadku konkretnego zastosowania. (Ia12fd)

Wersja 2.6

Wersja 2.6.2

6 września 2023 r.

androidx.lifecycle:lifecycle-*:2.6.2 został zwolniony. Wersja 2.6.2 zawiera te commity.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że SavedStateHandle nie był prawidłowo przywracany po zakończeniu procesu, jeśli stan został przywrócony, wywołanie save() nie było poprzedzone zapisaniem stanu w rodzicu SavedStateRegistry, a następnie stan był ponownie przywracany. Rozwiązanie to naprawia interakcję między rememberSaveable a elementem NavHost w komponencie Navigation Compose. (aosp/2729289)

Wersja 2.6.1

22 marca 2023 r.

androidx.lifecycle:lifecycle-*:2.6.1 został zwolniony. Wersja 2.6.1 zawiera te zatwierdzenia.

Aktualizacje zależności

Wersja 2.6.0

8 marca 2023 r.

androidx.lifecycle:lifecycle-*:2.6.0 został zwolniony. Wersja 2.6.0 zawiera te commity.

Ważne zmiany od wersji 2.5.0

  • Właściwość LiveData zawiera teraz nową właściwość isInitialized, która wskazuje, czy w elementach LiveData została kiedykolwiek ustawiona wartość jawna. Umożliwia to rozróżnienie wartości zwracanych przez funkcję liveData.value, gdy nie została ustawiona żadna wartość, i wartości jawnej null.null
  • Klasa MediatorLiveData zawiera teraz konstruktor do ustawiania wartości początkowej.
  • Dodano nowe rozszerzenie StateFlowFlow collectAsStateWithLifecycle(), które zbiera dane z przepływów i reprezentuje najnowszą wartość jako stan Compose w sposób uwzględniający cykl życia.
  • Metody Lifecycle.launchWhenXLifecycle.whenX zostały wycofane, ponieważ korzystanie z metody wstrzymywania rozsyłacza może w niektórych przypadkach powodować marnowanie zasobów. Zalecamy użycie Lifecycle.repeatOnLifecycle. Więcej informacji o jednorazowym zawieszeniu pracy znajdziesz w tym artykule, w którym wyjaśniono, dlaczego jest to niebezpieczne.
  • Konwersja na Kotlin – duża liczba klas cyklu życia została przekonwertowana na Kotlin. Wszystkie przekonwertowane klasy nadal zachowują zgodność binarną z poprzednimi wersjami. W klasach napisanych w języku Kotlin: ViewTreeLifecycleOwner, LiveDataReactiveStreams, HasDefaultViewModelProviderFactory, ViewTreeViewModelStoreOwner, Transformations, ViewModelStoreOwner, LifecycleOwner wprowadzono zmiany niezgodne z źródłem.

Tabela poniżej zawiera konwersje źródłowe w nowej wersji cyklu życia.

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

Wersja 2.6.0-rc01

22 lutego 2023 roku

androidx.lifecycle:lifecycle-*:2.6.0-rc01 został zwolniony. Wersja 2.6.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozszerzenie LiveData.distinctUntilChanged() ustawia teraz wartość value zwracanego elementu LiveData, jeśli poprzedni element LiveData ma ustawioną wartość. Nie zmienia to zachowania obserwacji – zaktualizowane wartości ze źródła LiveData będą miały zastosowanie dopiero wtedy, gdy zaczniesz obserwować LiveData zwracane przez distinctUntilChanged(). (Ib482f)

Wersja 2.6.0-beta01

8 lutego 2023 r.

androidx.lifecycle:lifecycle-*:2.6.0-beta01 został zwolniony. Wersja 2.6.0-beta01 zawiera te commity.

Konwersje Kotlina

  • LifecycleOwner jest teraz napisany w języku Kotlin. Jest to zmian niekompatybilna ze źródłem w przypadku klas napisanych w Kotlinie – muszą one teraz zastąpić właściwość lifecycle, a nie implementować poprzedniej funkcji getLifecycle(). (I75b4b, b/240298691)
  • ViewModelStoreOwner jest teraz w Kotlinie. Jest to zmian niekompatybilna ze źródłem w przypadku klas napisanych w Kotlinie – muszą one teraz zastąpić właściwość viewModelStore, a nie implementować poprzedniej funkcji getViewModelStore(). (I86409, b/240298691)
  • Rozszerzenie Kotlina w LifecycleOwner, które udostępnia pole lifecycleScope, zostało przeniesione do artefaktu lifecycle-commonlifecycle-runtime-ktx. (I41d78, b/240298691)
  • Rozszerzenie Kotlina w Lifecycle, które udostępnia pole coroutineScope, zostało przeniesione do artefaktu lifecycle-commonlifecycle-runtime-ktx. (Iabb91, b/240298691)

Wersja 2.6.0-alpha05

25 stycznia 2023 r.

androidx.lifecycle:lifecycle-*:2.6.0-alpha05 został zwolniony. Wersja 2.6.0-alpha05 zawiera te commity.

Konwersje Kotlina

  • Transformations jest teraz napisany w języku Kotlin. Jest to zmianie niezgodna ze źródłem w przypadku klas napisanych w Kotlinie, które bezpośrednio używały składni takiej jak Transformations.map. Kod Kotlina musi teraz używać składni metody rozszerzenia Kotlina, która była wcześniej dostępna tylko przy użyciu lifecycle-livedata-ktx. W przypadku języka programowania Java wersje tych metod, które przyjmują metodę androidx.arch.core.util.Function, są wycofywane i zastępowane wersjami, które przyjmują metodę Kotlin Function1. Ta zmiana zachowuje zgodność binarną. (I8e14f)
  • ViewTreeViewModelStoreOwner jest teraz napisany w języku Kotlin. Jest to zmiana niezgodna ze źródłem w przypadku klas napisanych w Kotlinie. Aby ustawić i znaleźć wcześniej ustawionego właściciela, musisz teraz bezpośrednio zaimportować i użyć metod rozszerzenia Kotlina w View klasy androidx.lifecycle.setViewTreeViewModelStoreOwnerandroidx.lifecycle.findViewTreeViewModelStoreOwner. Jest on zgodny z binarnymi implementacjami w języku Java i nadal zgodny ze źródłami. (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 – teraz muszą one zastąpić właściwości defaultViewModelProviderFactorydefaultViewModelCreationExtras zamiast implementować poprzednie odpowiadające im funkcje. (Iaed9c, b/240298691)
  • Observer jest teraz napisany w języku Kotlin. Metoda onChanged() używa teraz nazwy value jako parametru. (Iffef2, I4995e, b/240298691)
  • Biblioteki AndroidViewModel, AbstractSavedStateViewModelFactory, LifecycleService, ServiceLifecycleDispatcherProcessLifecycleOwner są teraz napisane w języku Kotlin (I2e771, Ibae40, I160d7, I08884, I1cda7, b/240298691)

Wersja 2.6.0-alpha04

11 stycznia 2023 r.

androidx.lifecycle:lifecycle-*:2.6.0-alpha04 został zwolniony. Wersja 2.6.0-alpha04 zawiera te commity.

Nowe funkcje

  • Właściwość LiveData zawiera teraz nową właściwość isInitialized, która wskazuje, czy w elementach LiveData została kiedykolwiek ustawiona wartość jawna. Umożliwia to rozróżnienie wartości zwracanych przez funkcję liveData.value, gdy nie została ustawiona żadna wartość, i wartości jawnej null.null (Ibd018)

Zmiany w interfejsie API

  • Interfejsy API collectAsStateWithLifecycle() usługi lifecycle-runtime-compose nie są już w fazie eksperymentalnej. (I09d42, b/258835424)
  • Metody Lifecycle.launchWhenXLifecycle.whenX zostały wycofane, ponieważ korzystanie z metody wstrzymywania rozsyłacza może w niektórych przypadkach powodować marnowanie zasobów. Zalecamy użycie Lifecycle.repeatOnLifecycle. (Iafc54, b/248302832)

Konwersje Kotlina

  • ViewTreeLifecycleOwner jest teraz napisany w języku Kotlin. Jest to zmiana niezgodna ze źródłem w przypadku klas napisanych w Kotlinie. Aby ustawić i znaleźć wcześniej ustawionego właściciela, musisz teraz bezpośrednio zaimportować i użyć metod rozszerzenia Kotlina w View klasy androidx.lifecycle.setViewTreeLifecycleOwnerandroidx.lifecycle.findViewTreeLifecycleOwner. Zastępuje ono poprzednie rozszerzenie Kotlina w lifecycle-runtime-ktx. Jest on zgodny z binarnymi implementacjami w języku Java i nadal zgodny ze źródłami. (I8a77a, I5234e, b/240298691)
  • LiveDataReactiveStreams jest teraz napisany w języku Kotlin. Rozszerzenia Kotlina, które wcześniej były dostępne 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 zmian w źródle kodu napisanego w języku Kotlin, jeśli nie korzystasz jeszcze z interfejsów API metod rozszerzeń w Kotlinie. (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 podczas wywoływania funkcji ClassCastException z nieprawidłowym typem klasy, gdy ClassCastException ma wartość ClassCastException.get() (I6ae7c)

Wersja 2.6.0-alpha03

24 października 2022 r.

androidx.lifecycle:lifecycle-*:2.6.0-alpha03 został zwolniony. Wersja 2.6.0-alpha03 zawiera te commity.

Poprawki błędów

  • Rozwiązanie problemu polegającego na tym, że ograniczenia między różnymi modułami cyklu życia nie działały zgodnie z oczekiwaniami. (I18d0d, b/249686765)
  • Błędy zgłaszane przez LifecycleRegistry.moveToState() zawierają teraz bardziej przydatne komunikaty, które informują deweloperów o komponencie powodującym błąd. (Idf4b2, b/244910446)

Wersja 2.6.0-alpha02

7 września 2022 roku

androidx.lifecycle:lifecycle-*:2.6.0-alpha02 został zwolniony. Wersja 2.6.0-alpha02 zawiera te commity.

Zmiany w interfejsie API

  • Klasa 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 współzależne artefakty Lifecycle używają tej samej wersji, automatycznie aktualizując inne zależności, gdy zostanie zaktualizowana jedna z nich. b/242871265
  • FlowLiveData.asFlow() tworzy teraz callbackFlow, zamiast używać własnej implementacji Channel, aby zapewnić bezpieczeństwo wątku i zachowanie kontekstu. (I4a8b2, b/200596935)
  • Funkcja FlowLiveData.asLiveData będzie teraz zachowywać początkową wartość elementu StateFlow podczas tworzenia nowego obiektu LiveData. (I3f530, b/157380488)
  • cyklu życia 2.5.1: niestandardowe implementacje AndroidViewModelFactory poprawnie wywołują funkcję create(modelClass) podczas używania konstruktora stanu w wersji Lifecycle 2.4 lub nowszej (I5b315, b/238011621).

Wersja 2.6.0-alpha01

29 czerwca 2022 r.

androidx.lifecycle:lifecycle-*:2.6.0-alpha01 został zwolniony. Wersja 2.6.0-alpha01 zawiera te commity.

Nowe funkcje

  • Dodano nowe rozszerzenie StateFlowFlow typu collectAsStateWithLifecycle, które zbiera dane z przepływów i reprezentuje najnowszą wartość jako stan tworzenia w sposób uwzględniający cykl życia. Przepływ jest zbierany, a nowa emisja jest ustawiana na wartość stanu, gdy cykl życia jest co najmniej w określonym Lifecycle.State. Gdy czas trwania cyklu życia spadnie poniżej wartości Lifecycle.State, przetwarzanie przepływu zostanie zatrzymane, a wartość stanu nie zostanie zaktualizowana. (I1856e, b/230557927)

Wersja 2.5

Wersja 2.5.1

27 lipca 2022 roku

androidx.lifecycle:lifecycle-*:2.5.1 został zwolniony. Wersja 2.5.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Niestandardowe implementacje AndroidViewModelFactory poprawnie wywołują funkcję create(modelClass), gdy używają stanu w konstruktorze AndroidViewModelFactory w wersji Lifecycle 2.4 lub nowszej (I5b315, b/238011621).

Wersja 2.5.0

29 czerwca 2022 r.

androidx.lifecycle:lifecycle-*:2.5.0 został zwolniony. Wersja 2.5.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 2.4.0

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

  • ViewModel CreationExtras – podczas pisania niestandardowego widoku ViewModelProvider.Factory nie trzeba już rozszerzać widoku AndroidViewModelFactory ani AbstractSavedStateViewModelFactory, aby uzyskać dostęp do widoku Application lub SavedStateHandle. Zamiast tego te pola są udostępniane każdej podklasie ViewModelProvider.Factory jako CreationExtras za pomocą nowej funkcji nakładania create: create(Class<T>, CreationExtras). Te dodatkowe informacje są automatycznie dostarczane przez Twoją aktywność lub fragment, gdy używasz odpowiednio aktywności1.5.0 lub fragmentu1.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 w Kotlin DSL, który umożliwia definiowanie ViewModelProvider.Factory za pomocą co najmniej 1 inicjalizatora lambda, po jednym dla każdej klasy ViewModel, którą obsługuje niestandardowa fabryka, 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 udostępnia teraz interfejs API viewModel(), który używa fabryki lambda do tworzenia instancji ViewModel bez konieczności tworzenia niestandardowej funkcji 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)
    }
    
  • Zintegrowanie Compose Saver z SavedStateHandle – artefakt lifecycle-viewmodel-compose zawiera teraz nowe eksperymentalne interfejsy API w SavedStateHandle.saveable, które umożliwiają zachowanie zachowania rememberSaveable w ramach SavedStateHandle widoku 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 addCloseable() API i nową przeciążenie konstruktora, które umożliwiają dodanie do obiektu ViewModel co najmniej jednego obiektu Closeable, który zostanie zamknięty, gdy obiekt ViewModel zostanie oczyszczony, bez konieczności wykonywania żadnych ręcznych czynności w funkcji onCleared().

    Aby na przykład utworzyć zakres współbieżności, który można wstrzyknąć do ViewModel, ale kontrolować za pomocą testów, możesz utworzyć obiekt CoroutineScope, który implementuje interfejs Closeable:

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

    Możesz go użyć w konstruktorze ViewModel, zachowując ten sam czas życia co viewModelScope:

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

Zmiany w zachowaniu

  • Próba przeniesienia Lifecycle.StateINITIALIZED do DESTROYED spowoduje teraz zawsze wyjątek IllegalStateException niezależnie od tego, czy Lifecycle ma dołączonego obserwatora.
  • LifecycleRegistry będzie teraz usuwać obserwatorów, gdy osiągnie stan DESTROYED.

Wersja 2.5.0-rc02

15 czerwca 2022 r.

androidx.lifecycle:lifecycle-*:2.5.0-rc02 został zwolniony. Wersja 2.5.0-rc02 zawiera te zatwierdzenia.

Poprawki błędów

  • ViewModelProvider nie będzie się już zawieszać, gdy użyjesz poprzednich wersji zależności cyklu życia compileOnly z wersjami 2.5 i nowszymi (I81a66, b/230454566).

Wersja 2.5.0-rc01

11 maja 2022 roku

androidx.lifecycle:lifecycle-*:2.5.0-rc01 został zwolniony. Wersja 2.5.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

  • Funkcja MediatorLiveData.addSource() wyrzuca teraz błąd NullPointerException, gdy zostanie przekazane źródło null, zamiast propagować źródło null do obserwatorów (Ibd0fb, b/123085232).

Wersja 2.5.0-beta01

20 kwietnia 2022 r.

androidx.lifecycle:lifecycle-*:2.5.0-beta01 został zwolniony. Wersja 2.5.0-beta01 zawiera te commity.

Zmiany w interfejsie API

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

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że umieszczenie jednego elementu NavHost w innym elemencie NavHost na niegłównej karcie nawigacji u dołu powodowało IllegalStateException przy użyciu wielu poziomów ścieżki wstecz. (I11bd5, b/228865698)

Wersja 2.5.0-alpha06

6 kwietnia 2022 roku

androidx.lifecycle:lifecycle-*:2.5.0-alpha06 został zwolniony. Wersja 2.5.0-alpha06 zawiera te commity.

Nowe funkcje

  • Dodaj eksperymentalną wersję MutableState do SavedStateHandle.saveable, aby zapewnić zgodność z rememberSaveable (I38cfe, b/224565154)

Zmiany w interfejsie API

  • Karta CreationExtras jest teraz abstrakcyjna, a nie zapieczęgnię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.

androidx.lifecycle:lifecycle-*:2.5.0-alpha05 został zwolniony. Wersja 2.5.0-alpha05 zawiera te commity.

Nowe funkcje

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

Zmiany w interfejsie API

  • Rozwiązano problem ze zgodnością z Lifecycle 2.3 i nowszymi wersjami Lifecycle w języku Java. (I52c8a, b/219545060)

Poprawki błędów

  • SavedStateViewFactory obsługuje teraz CreationExtras nawet wtedy, gdy został on zainicjowany za pomocą SavedStateRegistryOwner. Jeśli podano dodatkowe argumenty, argumenty zainicjowane są ignorowane. (I6c43b, b/224844583)

Wersja 2.5.0-alpha04

9 marca 2022 r.

androidx.lifecycle:lifecycle-*:2.5.0-alpha04 został zwolniony. Wersja 2.5.0-alpha04 zawiera te commity.

Zmiany w interfejsie API

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

Wersja 2.5.0-alpha03

23 lutego 2022 r.

androidx.lifecycle:lifecycle-*:2.5.0-alpha03 został zwolniony. Wersja 2.5.0-alpha03 zawiera te commity.

Nowe funkcje

  • Dodano interfejs addCloseable() API i nową przeciążenie konstruktora, które umożliwiają dodanie do ViewModel co najmniej 1 obiektu Closeable, który zostanie zamknięty, gdy ViewModel zostanie wyczyszczony, bez konieczności wykonywania ręcznych czynności w onCleared(). (I55ea0)
  • lifecycle-viewmodel udostępnia teraz funkcję InitializerViewModelFactory, która pozwala dodawać funkcję lambda do obsługi określonych klas ViewModel, używając CreationExtras jako głównego źródła danych. (If58fc, b/216687549)
  • lifecycle-viewmodel-compose udostępnia teraz interfejs API viewModel(), który korzysta z fabryki lambda do tworzenia instancji ViewModel bez konieczności tworzenia niestandardowego ViewModelProvider.Factory. (I97fbb, b/216688927)

Zmiany w interfejsie API

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

Zmiany w zachowaniu

  • Próba przeniesienia Lifecycle.StateINITIALIZED do DESTROYED będzie teraz zawsze wywoływać błąd IllegalStateException niezależnie od tego, czy Lifecycle ma dołączonego obserwatora. (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.

androidx.lifecycle:lifecycle-*:2.5.0-alpha02 został zwolniony. Wersja 2.5.0-alpha02 zawiera te commity.

Zmiany w interfejsie API

  • Funkcje SavedStateHandleSavedStateViewModelFactory zostały przekonwertowane na Kotlin. Dzięki temu poprawiliśmy możliwość zwracania wartości null w obiektach 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 opatrzone adnotacją @CheckResult, aby wymusić używanie wyniku podczas wywoływania tych funkcji. (Ia0f05, b/207325134)

Zmiany w zachowaniu

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

Poprawki błędów

  • Zmiana w cyklu życia 2.4.1: zależność lifecycle-process została zaktualizowana tak, aby zależała od Startup 1.1.1. Dzięki temu poprawki, które zapobiegają wywoływaniu błędu StartupException przez ProcessLifecycleInitializer, będą domyślnie dostępne. (Ib01df, b/216490724)
  • Ulepszono komunikat o błędzie, który pojawia się, gdy niestandardowe klasy AndroidViewModel mają parametry w niewłaściwej kolejności i próbują utworzyć klasę ViewModel. (I340f7, b/177667711)
  • Możesz teraz utworzyć model widoku za pomocą funkcji CreationExtras, korzystając z funkcji AndroidViewModelFactory bez konfigurowania aplikacji. (I6ebef, b/217271656)

Wersja 2.5.0-alpha01

26 stycznia 2022 r.

androidx.lifecycle:lifecycle-*:2.5.0-alpha01 został zwolniony. Wersja 2.5.0-alpha01 zawiera te commity.

Dodatkowe informacje o tworzeniu ViewModel

W ramach tej wersji kładziemy podwaliny pod restrukturyzację sposobu tworzenia ViewModel. Zamiast sztywnego zbioru podklas ViewModelProvider.Factory, z których każda dodaje dodatkowe funkcje (np. parametr konstruktora Application za pomocą AndroidViewModelFactory, parametr konstruktora SavedStateHandle za pomocą SavedStateViewModelFactoryAbstractSavedStateViewModelFactory itd.), przechodzimy do świata bezstanowych fabryk, które opierają się na nowej koncepcji CreationExtras. (Ia7343, b/188691010, b/188541057)

W związku z tą zmianą funkcja ViewModelProvider nie wywołuje już bezpośrednio poprzedniej metody create(Class<T>) w funkcji ViewModelProvider.Factory. Zamiast tego wywołuje nową przeciążoną wersję funkcji create: create(Class<T>, CreationExtras). Oznacza to, że każda bezpośrednia implementacja instancji ViewModelProvider.Factory ma teraz dostęp do wszystkich tych nowych CreationExtras:

  • ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY: ten String zapewnia dostęp do klucza niestandardowego przekazanego do funkcji 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 tej klasy ViewModel.
  • SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY zapewnia dostęp do ViewModelStoreOwner, który jest używany do tworzenia tej klasy ViewModel.
  • SavedStateHandleSupport.DEFAULT_ARGS_KEY zapewnia dostęp do Bundle argumentów, których należy użyć do utworzenia SavedStateHandle.

Te dodatkowe informacje są domyślnie dostępne podczas korzystania z funkcji Aktywność 1.5.0-alpha01, Fragment 1.5.0-alpha01Nawigacja 2.5.0-alpha01. Jeśli używasz starszej wersji tych bibliotek, CreationExtras będzie pusty – wszystkie istniejące podklasy ViewModelProvider.Factory zostały przekształcone, 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ą tworzenie ViewModelProvider.Factory, które przekazuje tylko informacje potrzebne do każdego ViewModel bez korzystania z ś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 Kotlina createSavedStateHandle() w klasie CreationExtras z poziomu SavedStateHandleSupport, aby utworzyć obiekt SavedStateHandle tylko dla jednej klasy ViewModel, która tego potrzebuje. (Ia6654, b/188541057)

Niestandardowe CreationExtras można udostępnić, zastępując getDefaultViewModelCreationExtras() w plikach ComponentActivity lub Fragment, dzięki czemu będą one dostępne dla niestandardowego ViewModelProvider.Factory jako wbudowana forma wspomaganego wstrzyknięcia. Te dodatkowe funkcje będą automatycznie dostępne w Twojej niestandardowej fabryce, gdy będzie ona używana bezpośrednio z ViewModelProvider lub gdy użyjesz rozszerzeń właściwości by viewModels()by activityViewModels() w Kotlinie. (I79f2b, b/207012584, b/207012585, b/207012490)

Poprawki błędów

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

Wersja 2.4

Wersja 2.4.1

9 lutego 2022 r.

androidx.lifecycle:lifecycle-*:2.4.1 został zwolniony. Wersja 2.4.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Zmiana z Cykl życia 2.5.0-alpha01: rozwiązaliśmy problem, który powodował, że wartość domyślna podana dla SavedStateHandle pojawiała się ponownie po zabiciu i ponownym utworzeniu procesu, nawet jeśli została ona celowo usunięta z SavedStateHandle. W konsekwencji SavedStateHandle nie będzie już łączyć wartości domyślnych i przywróconych, tylko używać tylko wartości przywróconych jako źródła informacji. (I53a4b)
  • lifecycle-process zależy teraz od pakietu Androidx Startup 1.1.1, który naprawił regresję, gdy użycie ProcessLifecycleInitializer powodowało StartupException. (b/216490724)

Wersja 2.4.0

27 października 2021 roku

androidx.lifecycle:lifecycle-*:2.4.0 został zwolniony. Wersja 2.4.0 zawiera te commity.

Ważne zmiany od wersji 2.3.0

  • Środowisko wykonawcze @OnLifecycleEvent zostało wycofane. Zamiast tego należy użyć pola LifecycleEventObserver lub DefaultLifecycleObserver.
  • Dodano bibliotekę androidx.lifecycle:lifecycle-viewmodel-compose. Umożliwia tworzenie komponentów viewModel()LocalViewModelStoreOwner.
    • Zmiany powodujące przerwanie działania źródła: funkcja ViewModelProvider została przepisana w języku Kotlin. Metoda ViewModelProvider.Factory.create nie zezwala już na użycie typu generycznego nullable.
  • Do androidx.lifecycle:lifecycle-runtime-ktx dodano nowe interfejsy API coroutines:
  • Lifecycle.repeatOnLifecycle, interfejs API, który wykonuje blok kodu w korobowej funkcji, gdy stan cyklu życia jest co najmniej w określonym stanie. Blokada zostanie anulowana i ponownie uruchomiona, gdy cykl życia przejdzie w stan docelowy i z niego.
  • Flow.flowWithLifecycle, interfejs API, który emituje wartości z poprzedniego przepływu, gdy cykl życia jest co najmniej w określonym stanie.
  • Obiekt DefaultLifecycleObserver został przeniesiony z lifecycle.lifecycle-common-java8 do lifecycle.lifecycle-common. lifecycle.lifecycle-common-java8 nie zapewnia już żadnych dodatkowych funkcji w porównaniu z lifecycle.lifecycle-common, więc zależność od niego można zastąpić zależnością od lifecycle.lifecycle-common.
  • Interfejsy API nieobsługujące coroutines z poziomu lifecycle-viewmodel-ktx zostały przeniesione do modułu lifecycle-viewmodel.
  • lifecycle-process używa teraz interfejsu androidx.startup do inicjowania interfejsu ProcessLifecycleOwner.

    Wcześniej robiła to androidx.lifecycle.ProcessLifecycleOwnerInitializer.

    Jeśli w przeszłości do zainicjowania cyklu życia procesu używany był element tools:node="remove", który jest elementem ContentProvider, wykonaj te czynności.

     <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 jest udostępniana bez zmian w stosunku do wersji Lifecycle 2.4.0-beta01. Wersja 2.4.0-rc01 zawiera te zatwierdzenia.

Wersja 2.4.0-beta01

15 września 2021 r.

androidx.lifecycle:lifecycle-*:2.4.0-beta01 został zwolniony. Wersja 2.4.0-beta01 zawiera te commity.

Zmiany w interfejsie API

  • Środowisko wykonawcze @OnLifecycleEvent zostało wycofane. Zamiast tego należy użyć pola 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 w porównaniu z androidx.lifecycle.lifecycle-common, więc zależność od niego można zastąpić zależnością od androidx.lifecycle.lifecycle-common. (I021aa)
  • Interfejsy API nieobsługujące coroutines z poziomu lifecycle-viewmodel-ktx zostały przeniesione do modułu lifecycle-viewmodel. (I6d5b2)

Darowizna zewnętrzna

  • Dziękujemy użytkownikowi dmitrilc za poprawienie typu w dokumentacji ViewModel. (#221)

Wersja 2.4.0-alpha03

4 sierpnia 2021 r.

androidx.lifecycle:lifecycle-*:2.4.0-alpha03 został zwolniony. Wersja 2.4.0-alpha03 zawiera te commity.

Zmiany w interfejsie API

  • Zmiany powodujące przerwanie działania źródła: interfejs ViewModelProvider został przepisany w języku Kotlin. Metoda ViewModelProvider.Factory.create nie zezwala już na użycie typu generic dla typu nullable. (I9b9f6)

Zmiany w zachowaniu

  • Funkcja Lifecycle.repeatOnLifecycle: block jest teraz zawsze wywoływana kolejno podczas powtarzanego wykonywania. (Ibab33)

Darowizna zewnętrzna

  • Dziękujemy użytkownikowi chao2zhang za poprawienie fragmentów kodu w dokumentacji repeatOnLifecycle. #205.

Wersja 2.4.0-alpha02

16 czerwca 2021 r.

androidx.lifecycle:lifecycle-*:2.4.0-alpha02 został zwolniony. Wersja 2.4.0-alpha02 zawiera te commity.

Nowe funkcje

  • Dodano do lifecycle-runtime-ktx nową funkcję sprawdzania kodu źródłowego RepeatOnLifecycleWrongUsage, która wykrywa nieprawidłowe użycie funkcji repeateOnLifecycle w funkcjach onStart() lub onResume(). (706078, b/187887400)

Zmiany w interfejsie API

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

Poprawki błędów

  • Rozwiązaliśmy problem z sprawdzaniem błędów NullSafeMutableLiveData, gdy pole zawiera modyfikatory. (#147, b/183696616)
  • Rozwiązaliśmy kolejny problem z sprawdzaniem błędów NullSafeMutableLiveData podczas używania ogólników. (#161, b/184830263)

Darowizna zewnętrzna

Wersja 2.4.0-alpha01

24 marca 2021 r.

androidx.lifecycle:lifecycle-*:2.4.0-alpha01 został zwolniony. Wersja 2.4.0-alpha01 zawiera te commity.

Zmiany w zachowaniu

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

    Wcześniej robiła to androidx.lifecycle.ProcessLifecycleOwnerInitializer.

    Jeśli w przeszłości do zainicjowania cyklu życia procesu używany był element tools:node="remove", który jest elementem ContentProvider, wykonaj te czynności.

     <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 API Flow.flowWithLifecycle, który emituje wartości z poprzedniego przepływu danych, gdy cykl życia jest co najmniej w określonym stanie za pomocą interfejsu API Lifecycle.repeatOnLifecycle. Jest to alternatywa dla nowego interfejsu API LifecycleOwner.addRepeatinJob. (I0f4cd)

Poprawki błędów

  • Od wersji Lifecycle 2.3.1 reguła sprawdzania kodu NonNullableMutableLiveData może teraz prawidłowo rozróżniać zmienne pola o różnym typie null. (b/169249668)

Lifecycle Viewmodel Compose w wersji 1.0.0

Wersja 1.0.0-alpha07

16 czerwca 2021 r.

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07 został zwolniony. Wersja 1.0.0-alpha07 zawiera te commity.

Zmiany w interfejsie API, które powodują przerwanie zgodności

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

Wersja 1.0.0-alpha06

2 czerwca 2021 r.

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06 został zwolniony. Wersja 1.0.0-alpha06 zawiera te commity.

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

Wersja 1.0.0-alpha05

18 maja 2021 r.

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05 został zwolniony. Wersja 1.0.0-alpha05 zawiera te commity.

Nowe funkcje

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

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.

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04 został zwolniony. Wersja 1.0.0-alpha04 zawiera te commity.

Zmiany w zależnościach

  • Ta wersja umożliwia usługom androidx.hilt:hilt-navigation-compose i androidx.navigation:navigation-compose synchronizowanie zależności z usługami androidx.compose.compiler:compiler:1.0.0-beta04 i androidx.compose.runtime:runtime:1.0.0-beta04. W wersji 1.0.0 wymagane jest dopasowanie kompilatora i czasu wykonywania.

Wersja 1.0.0-alpha03

10 marca 2021 r.

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha03 został zwolniony. Wersja 1.0.0-alpha03 zawiera te commity.

Zmiany w interfejsie API

  • Funkcja LocalViewModelStoreOwner.current zwraca teraz wartość ViewModelStoreOwner, która może być pusta, aby lepiej określić, czy ViewModelStoreOwner jest dostępna w bieżącej kompozycji. Interfejsy API, które wymagają parametru ViewModelStoreOwner, takie jak viewModel()NavHost, nadal wywołują wyjątek, jeśli parametr ViewModelStoreOwner nie jest ustawiony. (Idf39a)

Lifecycle-Viewmodel-Compose w wersji 1.0.0-alpha02

24 lutego 2021 r.

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02 został zwolniony. Wersja 1.0.0-alpha02 zawiera te commity.

Zmiany w interfejsie API

  • Interfejs LocalViewModelStoreOwner zawiera teraz funkcje provides, które można używać z interfejsem CompositionLocalProvider, zastępując interfejs API asProvidableCompositionLocal(). (I45d24)

Lifecycle-Viewmodel-Compose w wersji 1.0.0-alpha01

10 lutego 2021 r.

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01 został zwolniony. Wersja 1.0.0-alpha01 zawiera te commity.

Nowe funkcje

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

Wersja 2.3.1

Wersja cyklu życia 2.3.1

24 marca 2021 r.

androidx.lifecycle:lifecycle-*:2.3.1 został zwolniony. Wersja 2.3.1 zawiera te commity.

Poprawki błędów

  • Reguła lint NonNullableMutableLiveData może teraz prawidłowo rozróżniać zmienne pól o różnym typie null. (b/169249668)

Wersja 2.3.0

Wersja 2.3.0

10 lutego 2021 r.

androidx.lifecycle:lifecycle-*:2.3.0 został zwolniony. Wersja 2.3.0 zawiera te commity.

Najważniejsze zmiany od wersji 2.2.0

  • SavedStateHandle obsługuje klasy nieparcjonowalne: SavedStateHandle obsługuje teraz sekwencyjną serializację, umożliwiając wywołanie metody setSavedStateProvider() dla danego klucza, która przekazuje obiekt SavedStateProvider, który otrzyma wywołanie zwrotne do metody saveState(), gdy SavedStateHandle poprosi o zapisanie stanu. Zobacz Zapisywanie klas, których nie można podzielić.
  • Egzekwowanie zasad dotyczących cyklu życia:
    • LifecycleRegistry nakazuje teraz DESTROYED jako stan końcowy.
    • LifecycleRegistry teraz sprawdza, czy metody są wywoływane w głównym wątku. Było to zawsze wymagane w przypadku cyklu życia działań, fragmentów itp. Dodanie obserwatorów z wątków innych niż głównych powodowało trudności w łatwym wykrywaniu awarii w czasie działania. W przypadku obiektów LifecycleRegistry należących do Twoich komponentów możesz wyraźnie zrezygnować z sprawdzania, używając LifecycleRegistry.createUnsafe(...), ale musisz wtedy zadbać o odpowiednią synchronizację, gdy obiekt LifecycleRegistry jest używany z różnych wątków.
  • Pomocnicze metody stanu i zdarzeń w cyklu życia: do metody Lifecycle.Event dodaliśmy statyczne metody pomocnicze downFrom(State), downTo(State), upFrom(State)upTo(State), które służą do generowania obiektu Event na podstawie obiektu State i kierunku przejścia. Dodano metodę getTargetState(), która określa State, do którego nastąpi przejście bezpośrednio po Event.
  • withStateAtLeast: dodano interfejsy API Lifecycle.withStateAtLeast, które oczekują na stan cyklu życia i w punkcie zmiany stanu synchronicznie uruchamiają blok kodu, który nie zawiesza działania aplikacji, a potem wznawiają działanie z otrzymanym wynikiem. Te interfejsy API różnią się od dotychczasowych metod when*, ponieważ nie zezwalają na uruchamianie kodu zawieszania i nie używają niestandardowego rozsyłarki. (aosp/1326081)
  • Interfejsy ViewTree API: nowe interfejsy API ViewTreeLifecycleOwner.get(View) i ViewTreeViewModelStoreOwner.get(View) umożliwiają pobieranie odpowiednio elementów LifecycleOwner i ViewModelStoreOwner z instancji View. Aby prawidłowo wypełnić to pole, musisz uaktualnić elementy Activity 1.2.0Fragment 1.3.0 oraz bibliotekę AppCompat 1.3.0-alpha01 lub nowszą. Rozszerzenia Kotlina findViewTreeLifecycleOwnerfindViewTreeViewModelStoreOwner są dostępne odpowiednio w wersjach lifecycle-runtime-ktxlifecycle-viewmodel-ktx.
  • LiveData.observe() Wycofanie rozszerzenia Kotlina: rozszerzenie Kotlina LiveData.observe(), które jest niezbędne do używania składni lambda, zostało wycofane, ponieważ nie jest potrzebne w wersji Kotlina 1.4.

Wersja 2.3.0-rc01

16 grudnia 2020 roku

androidx.lifecycle:lifecycle-*:2.3.0-rc01 został zwolniony. Wersja 2.3.0-rc01 zawiera te commity.

Poprawki błędów

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

Darowizna zewnętrzna

Wersja 2.3.0-beta01

1 października 2020 roku

androidx.lifecycle:lifecycle-*:2.3.0-beta01 został zwolniony. Wersja 2.3.0-beta01 zawiera te commity.

Zmiany w interfejsie API

  • Funkcja rozszerzenia Kotlina LiveData.observe(), która jest potrzebna do używania składni lambda, została wycofana, ponieważ nie jest potrzebna w wersji Kotlina 1.4. (I40d3f)

Poprawki błędów

Zmiany w dokumentacji

  • Dokumentacja kreatora liveDataasLiveData() została zaktualizowana, aby zawierała szczegóły dotyczące zmiany podanych wartości limitu czasu. (aosp/1122324)

Wersja 2.3.0-alpha07

19 sierpnia 2020 r.

androidx.lifecycle:lifecycle-*:2.3.0-alpha07 został zwolniony. Wersja 2.3.0-alpha07 zawiera te commity.

Poprawki błędów

  • Rozwiązaliśmy problem z awarią podczas sprawdzania Lint w wersji NullSafeMutableLiveData. (aosp/1395367)

Wersja 2.3.0-alpha06

22 lipca 2020 r.

androidx.lifecycle:lifecycle-*:2.3.0-alpha06 został zwolniony. Wersja 2.3.0-alpha06 zawiera te commity.

Nowe funkcje

  • Do metod pomocniczych Lifecycle.Event dodano statyczne metody downFrom(State), downTo(State), upFrom(State)upTo(State), które służą do generowania obiektu Event na podstawie obiektu State i kierunku przejścia. Dodano metodę getTargetState(), która określa State, do którego nastąpi przejście bezpośrednio po Event. (I00887)
  • Dodano interfejsy API Lifecycle.withStateAtLeast, które oczekują stanu cyklu życia i sychroniecznie wykonują blok kodu w miejscu zmiany stanu, a potem wznawiają działanie z otrzymanym wynikiem. Te interfejsy API różnią się od dotychczasowych metod when*, ponieważ nie zezwalają na uruchamianie kodu zawieszania i nie używają niestandardowego rozsyłarki. (aosp/1326081)

Zmiany w zachowaniu

  • LifecycleRegistry nakazuje teraz DESTROYED jako stan końcowy. (I00887)
  • LifecycleRegistry teraz sprawdza, czy metody są wywoływane w głównym wątku. Było to zawsze wymagane w przypadku cyklu życia działań, fragmentów itp. Dodanie obserwatorów z wątków innych niż głównych powodowało trudności w łatwym wykrywaniu awarii w czasie działania. W przypadku obiektów LifecycleRegistry należących do Twoich komponentów możesz wyraźnie zrezygnować z sprawdzania, używając LifecycleRegistry.createUnsafe(...), ale musisz wtedy zadbać o odpowiednią synchronizację podczas uzyskiwania dostępu do tego obiektu LifecycleRegistry z różnych wątków (Ie7280, b/137392809).

Poprawki błędów

  • Naprawiono błąd powodujący awarię w funkcji NullSafeMutableLiveData. (b/159987480)
  • Naprawiono błąd ObsoleteLintCustomCheck w sprawdzaniu Lint w pakiecie lifecycle-livedata-core-ktx (szczególnie w funkcji NullSafeMutableLiveData). (b/158699265)

Wersja 2.3.0-alpha05

24 czerwca 2020 r.

androidx.lifecycle:lifecycle-*:2.3.0-alpha05 został zwolniony. Wersja 2.3.0-alpha05 zawiera te commity.

Poprawki błędów

  • LiveData lepiej obsługuje przypadki ponownego wywołania, unikając powielonych wywołań funkcji onActive() lub onInactive(). (b/157840298)
  • Rozwiązaliśmy problem, który powodował, że podczas korzystania z Android Studio 4.1 Canary 6 lub nowszej wersji nie były wykonywane kontrole Lint. (aosp/1331903)

Wersja 2.3.0-alpha04

10 czerwca 2020 r.

androidx.lifecycle:lifecycle-*:2.3.0-alpha04 został zwolniony. Wersja 2.3.0-alpha04 zawiera te commity.

Poprawki błędów

  • Naprawiliśmy błąd powodujący awarię podczas sprawdzania Lint w NonNullableMutableLiveData. (b/157294666)
  • Sprawdzanie Lint NonNullableMutableLiveData obejmuje teraz znacznie więcej przypadków, w których w elementach MutableLiveData z parametrami typu niezerowego ustawiono wartość null. (b/156002218)

Wersja 2.3.0-alpha03

20 maja 2020 r.

androidx.lifecycle:lifecycle-*:2.3.0-alpha03 zostały opublikowane. Wersja 2.3.0-alpha03 zawiera te commity.

Nowe funkcje

  • SavedStateHandle obsługuje teraz sekwencję opóźnionej serializacji, która umożliwia wywołanie funkcji setSavedStateProvider() dla danego klucza, podając obiekt SavedStateProvider, który otrzyma wywołanie zwrotne do funkcji saveState(), gdy funkcja SavedStateHandle poprosi o zapisanie stanu. (b/155106862)
  • Nowy interfejs API ViewTreeViewModelStoreOwner.get(View) umożliwia pobranie ViewModelStoreOwner na podstawie wystąpienia View. Aby prawidłowo wypełnić te pola, musisz przejść na Aktywność 1.2.0-alpha05, Fragment 1.3.0-alpha05 i Kompatybilność z aplikacjami 1.3.0-alpha01. Do lifecycle-viewmodel-ktx dodano rozszerzenie Kotlina findViewModelStoreOwner(). (aosp/1295522)

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że kontrole lint MutableLiveData opublikowane w cyklu życia 2.3.0-alpha01 nie były publikowane wraz z artefaktem lifecycle-livedata-core-ktx. (b/155323109)

Wersja 2.3.0-alpha02

29 kwietnia 2020 r.

androidx.lifecycle:lifecycle-*:2.3.0-alpha02 został zwolniony. Wersja 2.3.0-alpha02 zawiera te commity.

Zmiany w interfejsie API

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

Poprawki błędów

  • Zwiększona wydajność uruchamiania „na zimno” dzięki unikaniu błędów weryfikacji klasy na urządzeniach z interfejsem API 28 lub niższym. (aosp/1282118)

Wersja 2.3.0-alpha01

4 marca 2020 r.

androidx.lifecycle:lifecycle-*:2.3.0-alpha01 został zwolniony. Wersja 2.3.0-alpha01 zawiera te commity.

Nowe funkcje

  • Nowy interfejs API ViewTreeLifecycleOwner.get(View) umożliwia pobranie LifecycleOwner na podstawie wystąpienia View. Aby poprawnie wypełnić te pola, musisz przejść na Aktywność 1.2.0-alpha01Fragment 1.3.0-alpha01. Rozszerzenie Kotlina findViewTreeLifecycleOwner jest dostępne w wersji lifecycle-runtime-ktx. (aosp/1182361, aosp/1182956)
  • Dodano nową kontrolę Lint, która ostrzega, gdy ustawiasz wartość null w obiekcie MutableLiveData zdefiniowanym w Kotlinie jako niepusty. Jest to możliwe, gdy używasz 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, który implementuje LifecycleOwner i zapewnia bezpieczną dla wątku zmienną Lifecycle. (aosp/1242438)

Poprawki błędów

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

Wersja 2.2.0

ViewModel-Savedstate w wersji 2.2.0

5 lutego 2020 r.

androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0 został zwolniony. Wersja 2.2.0 zawiera te zatwierdzenia:

Stan zapisany Lifecycle ViewModel ma teraz tę samą wersję co inne artefakty cyklu życia. Działanie typu 2.2.0 jest identyczne z działaniem typu 1.0.0.

Wersja 2.2.0

22 stycznia 2020 r.

androidx.lifecycle:lifecycle-*:2.2.0 został zwolniony. Wersja 2.2.0 zawiera te zatwierdzenia:

Ważne zmiany od wersji 2.1.0

  • Integracja z routiną cyklu życia: nowy artefakt lifecycle-runtime-ktx zapewnia integrację między Lifecycle a rutynami Kotlina. Rozszerzyliśmy też lifecycle-livedata-ktx, aby można było korzystać z funkcji coroutines. Więcej informacji znajdziesz w artykule Używanie korobocji Kotlina z Architecture Components.
  • Wycofanie ViewModelProviders.of(): środowisko wykonawcze ViewModelProviders.of() zostało wycofane. Aby uzyskać tę samą funkcjonalność przy użyciu Fragment 1.2.0, możesz przekazać do konstruktora ViewModelProvider(ViewModelStoreOwner) wartość Fragment lub FragmentActivity.
  • lifecycle-extensions Przestań używać artefaktów: ta wersja oznacza wycofanie ostatniego interfejsu API w lifecycle-extensions, a ten artefakt powinien zostać uznany za przestarzały w całości.ViewModelProviders.of() W zależności od potrzebnych artefaktów cyklu życia (takich jak lifecycle-service w przypadku wersji LifecycleServicelifecycle-process w przypadku wersji ProcessLifecycleOwner) zalecamy użycie wersji lifecycle-extensions, a nie lifecycle-extensions, ponieważ ta ostatnia nie będzie już dostępna w przyszłości.2.3.0
  • Procesor adnotacji Gradle Incremental Annotation Processor: procesor adnotacji Lifecycle jest domyślnie metodą przyrostową. Jeśli 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

androidx.lifecycle:lifecycle-*:2.2.0-rc03 został zwolniony. Wersja 2.2.0-rc03 zawiera te zatwierdzenia:

Poprawki błędów

  • Rozwiązaliśmy problem, który występował, gdy w ViewModelStore przechowywano wyśmiewaną instancję ViewModel, a później wysyłano zapytanie z użyciem domyślnej fabryki.
  • Napraw użycie Dispatchers.Main.immediatelaunchWhenCreated i podobnych metodach, aby były wywoływane synchronicznie podczas odpowiedniego zdarzenia cyklu życia. (aosp/1156203)

Wkład zewnętrzny

  • Dziękujemy Andersowi Järlebergowi za wniesienie poprawki. (aosp/1156203)
  • Dziękujemy Vsevolodowi Tolstopyatowowi z Jetbrains za sprawdzenie implementacji wbudowanego wykonywania.

Zmiany zależności

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

Wersja 2.2.0-rc02

7 listopada 2019 r.

androidx.lifecycle:lifecycle-*:2.2.0-rc02 został zwolniony. Wersja 2.2.0-rc02 zawiera te zatwierdzenia:

Poprawki błędów

  • Usunięto błąd w konfiguracji ProGuarda biblioteki, który dotyczył urządzeń z interfejsem API w wersji 28 lub nowszej, jeśli docelowy interfejs API jest starszy niż 29. (b/142778206)

Wersja 2.2.0-rc01

23 października 2019 r.

androidx.lifecycle:lifecycle-*:2.2.0-rc01 został zwolniony. Wersja 2.2.0-rc01 zawiera te zatwierdzenia:

Poprawki błędów

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

Wkład zewnętrzny

  • Dziękujemy Nicklasowi Ansmanowi za wkład w rozwiązanie problemu. (aosp/1145596)

Wersja 2.2.0-beta01

9 października 2019 r.

androidx.lifecycle:lifecycle-*:2.2.0-beta01 został zwolniony. Wersja 2.2.0-beta01 zawiera te commity:

Poprawki błędów

  • Naprawiono regresję wprowadzoną w Lifecycle 2.2.0-alpha05 w zakresie kolejności ProcessLifecycleOwner i aktywności LifecycleOwner przechodzącej do stanu uruchomionej i wznowionej na urządzeniach z Androidem 10. (aosp/1128132)
  • Rozwiązano problem z regresją wprowadzony w Cyklu życia 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.

androidx.lifecycle:lifecycle-*:2.2.0-alpha05 został zwolniony. Wersja 2.2.0-alpha05 zawiera te commity

Poprawki błędów

  • Usunięto warunek wyścigu w budującym danych na żywo w ramach coroutine. b/140249349

Wersja 2.2.0-alpha04

5 września 2019 r.

androidx.lifecycle:lifecycle-*:2.2.0-alpha04 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

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

Wkład zewnętrzny

  • Dziękujemy Nicklasowi Ansmanowi za przeniesienie do Dispatchers.Main.immediate. (aosp/1106073)

Wersja 2.2.0-alpha03

7 sierpnia 2019 r.

androidx.lifecycle:lifecycle-*:2.2.0-alpha03 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

Zmiany w interfejsie API

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

Wersja 2.2.0-alpha02

2 lipca 2019 r.

androidx.lifecycle:*:2.2.0-alpha02 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Zmiany w interfejsie API

  • Zastąpiono zmienną LiveDataScope.initialValue zmienną LiveDataScope.latestValue, która będzie śledzić bieżącą wartość emitowaną przez blok liveData.
  • Do kreatora liveData dodano nową przeciążenie, które przyjmuje parametr timeout jako typ Duration

Wersja 2.2.0-alpha01

7 maja 2019 r.

androidx.lifecycle:*:2.2.0-alpha01 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Ta wersja zawiera nowe funkcje, które umożliwiają obsługę coroutines w Kotlinie w przypadku Lifecycle i LiveData. Szczegółową dokumentację znajdziesz tutaj.

ViewModel-SavedState w wersji 1.0.0

Wersja 1.0.0

22 stycznia 2020 r.

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0 został zwolniony. Wersja 1.0.0 zawiera te zatwierdzenia:

Ważne funkcje w wersji 1.0.0

  • Dodano nową klasę SavedStateHandle. Umożliwia to klasom ViewModel dostęp do zapisanego stanu i wprowadzanie zmian w tym stanie. Obiekt ten może być przekazywany w konstruktorze klasy ViewModel i fabrycznych obiektów domyślnie udostępnianych przez fragmenty. Komponent AppCompatActivity automatycznie wstrzyknie obiekt SavedStateHandle.
  • Dodano klasę AbstractSavedStateViewModelFactory. Umożliwia tworzenie niestandardowych fabryk dla ViewModel i udostępnianie im dostępu do SavedStateHandle.

ViewModel-Savedstate w wersji 1.0.0-rc03

4 grudnia 2019

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03 został zwolniony. Wersja 1.0.0-rc03 zawiera te zatwierdzenia

Zmiany zależności

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

Viewmodel-Savedstate w wersji 1.0.0-rc02

7 listopada 2019 r.

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc02 został zwolniony. Wersja 1.0.0-rc02 zawiera te zatwierdzenia:

Zmiany zależności

  • Teraz zależy to 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 jest publikowany bez zmian z 1.0.0-beta01. Wersja 1.0.0-rc01 zawiera te zatwierdzenia:

ViewModel-Savedstate w wersji 1.0.0-beta01

9 października 2019 r.

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01 został zwolniony. Wersja 1.0.0-beta01 zawiera te commity.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że pierwszy dostęp do Activity.onActivityResult()IllegalStateException powodował błąd IllegalStateException. (b/139093676)
  • Usunęliśmy błąd IllegalStateException występujący podczas używania AbstractSavedStateViewModelFactory. (b/141225984)

ViewModel-SavedState w wersji 1.0.0-alpha05

18 września 2019 r.

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha05 został zwolniony. Wersja 1.0.0-alpha05 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • SavedStateViewModelFactory nie rozszerza już klasy AbstractSavedStateViewModelFactory, a SavedStateHandle jest tworzona tylko dla ViewModels, które ją zażądały (aosp/1113593).

ViewModel-SavedState w wersji 1.0.0-alpha03

7 sierpnia 2019 r.

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Zmiany powodujące niezgodność

ViewModel-SavedState w wersji 1.0.0-alpha02

2 lipca 2019 r.

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha02 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Dodano przeciążenie funkcji SavedStateHandle.getLiveData(), która przyjmuje 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.

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01 został zwolniony. Pełny log zatwierdzeń dla tej wstępnej wersji znajdziesz tutaj.

Nowe funkcje

  • Teraz ViewModels może współtworzyć stan zapisany. W tym celu używasz nowo wprowadzonej fabryki viewmodel SavedStateVMFactory, a Twoja klasa ViewModel powinna mieć konstruktor, który jako parametr przyjmuje obiekt SavedStateHandle.

Wersja 2.1.0

Ważne zmiany od wersji 2.0.0

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

Wersja 2.1.0

5 września 2019 r.

androidx.lifecycle:lifecycle-*:2.1.0 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Wersja 2.1.0-rc01

2 lipca 2019 r.

androidx.lifecycle:*:2.1.0-rc01 jest publikowany bez zmian z androidx.lifecycle:*:2.1.0-beta01. Zmiany zawarte w tej wersji znajdziesz tutaj.

Wersja 2.1.0-beta01

7 maja 2019 r.

androidx.lifecycle:*:2.1.0-beta01 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Cykle życia są dostępne w wersji beta: interfejsy API wprowadzone w poprzednich wersjach alfa, takie jak liveData funkcje rozszerzeń do przekształcania i obserwowania, ViewModel inicjalizacja z delegowaniem właściwości i inne, są stabilne i nie ulegną zmianie.

Wersja 2.1.0-alpha04

3 kwietnia 2019 r.

androidx.lifecycle:*:2.1.0-alpha04 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Zmiany w interfejsie API

  • Zmiana wprowadzająca: interfejs API używany przez 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.

androidx.lifecycle:*:2.1.0-alpha03 został zwolniony. Pełną listę zatwierdzeń zawartych w tej wersji znajdziesz tutaj.

Zmiany w interfejsie API

  • Pole „ViewModelProvider.KeyedFactory” zostało usunięte. Drugi interfejs oprócz ViewModelProvider.Factory nie współpracował dobrze z nowymi funkcjami, takimi jak delegowanie właściwości w Kotlinie by viewmodels {}. (aosp/914133)

Wersja 2.1.0-alpha02

30 stycznia 2019 r.

androidx.lifecycle 2.1.0-alpha02 został zwolniony.

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ę fałszywych instancji ViewModel po wyczyszczeniu zawierającego je obiektu ViewModelStore. b/122273087

Wersja 2.1.0-alpha01

17 grudnia 2018 r.

androidx.lifecycle 2.1.0-alpha01 został zwolniony.

Nowe funkcje

  • Dodano LifecycleEventObserver na potrzeby sytuacji, w których potrzebny jest strumień zdarzeń cyklu życia. Jest to publiczny interfejs API, a nie ukryta klasa GenericLifecycleObserver.
  • Dodano rozszerzenia ktx dla metod LiveData.observe i Transformations.*.
  • Dodano metodę Transformations.distinctUntilChanged. Tworzy on nowy obiekt LiveData, który nie emituje wartości, dopóki nie zmieni się źródłowa wartość LiveData.
  • Obsługa coroutine w ViewModels: dodano właściwość rozszerzenia ViewModel.viewModelScope.
  • Dodaliśmy ViewModelProvider.KeyedFactory, fabrykę ViewModels, która w metodzie create przyjmuje parametry keyClass.

Wersja 2.0.0

Wersja 2.0.0

21 września 2018 r.

Wersja 2.0.0 interfejsu Lifecycle zawiera poprawkę błędu z wersji 2.0.0-rc01 w ViewModel.

Poprawki błędów

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

Wersja 2.0.0-beta01

2 lipca 2018 r.

Poprawki błędów

  • Naprawiono regułę Proguarda LifecycleObserver, aby zachować tylko implementacje, a nie interfejsy podrzędne b/71389427
  • Poprawiono reguły Proguarda dotyczące ViewModel, aby umożliwić zaciemnianie i skracanie

Wersje starsze niż AndroidX

W przypadku wersji Cyklu życia, które powstały przed Androidem X, 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 mała 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 w czasie wykonywania, np. w paging:common poniżej.

lifecycle:common jest zależne od 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 parametry LifecycleActivityLifecycleFragment zostały usunięte. Użyj parametrów FragmentActivity, AppCompatActivity lub Fragment.
  • Do dysku ViewModelProviders i ViewModelStores dodano adnotacje @NonNull
  • Konstruktor ViewModelProviders został wycofany – używaj bezpośrednio jego metod statycznych.
  • Środowisko wykonawcze ViewModelProviders.DefaultFactory zostało wycofane – użyj środowiska wykonawczego ViewModelProvider.AndroidViewModelFactory
  • Dodano statyczną metodę ViewModelProvider.AndroidViewModelFactory.getInstance(Application), która umożliwia pobieranie statycznego obiektu Factory odpowiedniego do tworzenia instancji ViewModelAndroidViewModel.