Cykl życia

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

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

Artefakt Wersja stabilna Wersja kandydująca do publikacji Wersja beta Wersja alfa
lifecycle-* 2.11.0 - - 2.12.0-alpha04
lifecycle-viewmodel-navigation3 2.11.0 - - 2.12.0-alpha04
Ostatnia aktualizacja tej biblioteki: 23 września 2026 r.

Deklarowanie zależności

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

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

Kotlin

Groovy

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

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

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

        // ViewModel integration with Navigation3
        implementation "androidx.lifecycle:lifecycle-viewmodel-navigation3:2.12.0-alpha04"

        // 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.11.0"
        val arch_version = "2.2.0"

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

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

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

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

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

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

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

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

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

Java

Groovy

    dependencies {
        def lifecycle_version = "2.11.0"
        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.11.0"
        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.

Prześlij opinię

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

Tworzenie nowego problemu

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

Wersja 2.12

Wersja 2.12.0-alpha04

23 września 2026 r.

Publikacja androidx.lifecycle:lifecycle-*:2.12.0-alpha04 Wersja 2.12.0-alpha04 zawiera te zmiany.

Wersja 2.12.0-alpha03

9 września 2026 r.

Publikacja androidx.lifecycle:lifecycle-*:2.12.0-alpha03 Wersja 2.12.0-alpha03 zawiera te zmiany.

Poprawki błędów

  • compileSdk bibliotek Compose zaktualizowanych do wersji 37.1. Wymaga to przechodniego zaktualizowania compileSdk we wszystkich aplikacjach i bibliotekach korzystających z Compose. (I05b0f)

Wersja 2.12.0-alpha02

26 sierpnia 2026 r.

Publikacja androidx.lifecycle:lifecycle-*:2.12.0-alpha02 Wersja 2.12.0-alpha02 zawiera te zmiany.

Zmiany w interfejsie API

  • Wycofano metody AutoRecreatedrunOnNextRecreation na rzecz metod SavedStateProviderSavedStateRestorer. (Iadc00)

Wersja 2.12.0-alpha01

12 sierpnia 2026 r.

Publikacja androidx.lifecycle:lifecycle-*:2.12.0-alpha01 Wersja 2.12.0-alpha01 zawiera te zmiany.

Poprawki błędów

  • Wycofaj procesor adnotacji lifecycle-compiler. Zamiast procesora adnotacji używaj DefaultLifecycleObserver lub LifecycleEventObserver. (Ibf571, b/541926513)
  • Funkcje SavedStateViewModelFactoryAbstractSavedStateViewModelFactory natychmiast zwracają błąd, jeśli podany element SavedStateRegistryOwner nie implementuje interfejsu ViewModelStoreOwner, co zapobiega opóźnionym awariom podczas ponownego tworzenia komponentu. (Icf317)
  • Dodaj śledzenie systemu do wysyłania zdarzeń LifecycleRegistry. (Ie1f92, b/112161409)

Wersja 2.11

Wersja 2.11.0

17 czerwca 2026 r.

Publikacja androidx.lifecycle:lifecycle-*:2.11.0 Wersja 2.11.0 zawiera te zmiany.

Ważne zmiany od wersji 2.10.0:

Scoped ViewModels w Compose – wprowadzenie adnotacji ViewModelStoreProvider, rememberViewModelStoreProviderrememberViewModelStoreOwner, które umożliwiają powiązanie ViewModels z określonymi zakresami interfejsu (np. stronami w Pagerze). Przetrwają one zmiany konfiguracji i zostaną automatycznie wyczyszczone, gdy element kompozycyjny zostanie usunięty z hierarchii.

Obsługa KMP – ViewModel-ComposeViewModel-Navigation3 obsługują teraz wszystkie platformy Kotlin Multiplatform.

Integracja z Navigation3 – ViewModelStoreNavEntryDecorator akceptuje teraz ViewModelStoreOwner do propagowania CreationExtras i fabryk do zagnieżdżonych elementów ViewModel. Możesz też podnosić dostawców za pomocą nowego przeciążenia rememberViewModelStoreNavEntryDecorator, aby obsługiwać wiele stosów wstecznych. Środowisko wykonawcze removeViewModelStoreOnPop zostało wycofane.

Lifecycle Utilities – dodano rozszerzenie ViewModelProvider.get<VM>(key), rozszerzenie Lifecycle.addObserver oparte na lambdzie i domyślne rozszerzenia fabryczne dla ViewModelStoreOwner. ViewModel.onCleared jest teraz oznaczony(a) adnotacją @EmptySuper.

Inne zmiany – interfejs Compose 1.7.0+ jest teraz wymagany w przypadku LocalLifecycleOwner, aby usunąć rezerwowe odbicia. Aktualizacje Compose compileSdk wymagają AGP w wersji co najmniej 9.2.0.

Wersja 2.11.0-rc01

3 czerwca 2026 r.

Publikacja androidx.lifecycle:lifecycle-*:2.11.0-rc01 Wersja 2.11.0-rc01 zawiera te zmiany.

Wersja 2.11.0-beta02

19 maja 2026 r.

Publikacja androidx.lifecycle:lifecycle-*:2.11.0-beta02 Wersja 2.11.0-beta02 zawiera te zmiany.

Zmiany w interfejsie API

  • Dodaj przeciążenie rememberViewModelStoreNavEntryDecorator, które akceptuje ViewModelStoreProvider. Umożliwia to deweloperom przeniesienie dostawcy ponad zakres kompozycji dekoratora, co pozwala na obsługę wielu stosów wstecznych, w których ten sam wpis występuje w obu, ale wymaga oddzielnego stanu. (Ibbbfe, b/503420425)
  • Zapobiega przedwczesnemu usuwaniu udostępnionych ViewModels, gdy z kompozycji zostanie usunięty powiązany dostawca. (Ib321a)

Poprawki błędów

  • Aby korzystać z usługi LocalLifecycleOwner, musisz mieć interfejs Compose UI w wersji 1.7.0 lub nowszej. Usuwa to wewnętrzne rezerwowe mechanizmy odbicia, co zwiększa wydajność, ale wymusza ścisłą aktualizację zależności w przypadku klientów. (I48e65)
  • Zapobieganie duplikowaniu symboli w starszych wersjach forka JetBrains podczas uaktualniania do Compose Multiplatform 1.11.0. (Iccd64)
  • Rozwiązaliśmy problem, który powodował nieprawidłowe czyszczenie ViewModels podczas rekompozycji w przypadku używania rememberViewModelStoreProvider z niestabilnymi parametrami domyślnymi. Dostawca odtwarza teraz tylko wtedy, gdy zmieni się właściciel nadrzędny lub jawny klucz. (Ibe296, b/501792448)

Wersja 2.11.0-beta01

22 kwietnia 2026 r.

Publikacja androidx.lifecycle:lifecycle-*:2.11.0-beta01 Wersja 2.11.0-beta01 zawiera te zmiany.

Zmiany w interfejsie API

  • Podziel funkcje rememberViewModelStoreOwnerrememberViewModelStoreProvider na osobne funkcje dla przypadków użycia z kluczem i bez klucza. (Ifd154, b/500802788)

Poprawki błędów

  • Zaktualizowano Compose compileSdk do interfejsu API 37. Oznacza to, że podczas korzystania z Compose wymagana jest minimalna wersja AGP 9.2.0. (Id45cd, b/413674743)

Wersja 2.11.0-alpha03

25 marca 2026 r.

Publikacja androidx.lifecycle:lifecycle-*:2.11.0-alpha03 Wersja 2.11.0-alpha03 zawiera te zmiany.

Zmiany w interfejsie API

  • Ustaw parentKey jako opcjonalny parametr w konstruktorach ViewModelStoreProvider, domyślnie ustawiając go na null, i przenieś go za parentStore lub parentOwner. Upraszcza to tworzenie instancji, gdy nie jest potrzebny klucz zakresu udostępnionego. (I66b67)
  • ViewModelStoreNavEntryDecorator akceptuje teraz ViewModelStoreOwner zamiast ViewModelStore. Umożliwia to bibliotece Navigation3 propagowanie domyślnych wartości CreationExtrasViewModelProvider.Factory rodzica do zagnieżdżonych obiektów ViewModel, co zapewnia obsługę zależności na poziomie aplikacji. (Ia6018, b/434651920)
  • Izoluj stan ViewModelStoreProvider za pomocą unikalnego klucza. Zapobiega to przypadkowemu usuwaniu przez dostawców rodzeństwa swoich obiektów ViewModel podczas zwalniania zasobów. (I59c0b, b/434651920)
  • Dodaj funkcję rozszerzenia ViewModelProvider.get<VM>(key: String). Umożliwia to deweloperom łatwiejsze pobieranie obiektów ViewModel za pomocą niestandardowego key z parametrami typu reifikowanego Kotlin, co eliminuje konieczność jawnego przekazywania typu klasy. (Ic1f59)
  • Dodaj obsługę defaultArgs do ViewModelStoreProvider, aby umożliwić inicjowanie obiektów ViewModel z domyślnymi wartościami SavedState. (I1e933, b/434651920, b/165642391)
  • Wycofaj removeViewModelStoreOnPop i powiązany z nim ViewModelStoreNavEntryDecoratorDefaults. Ten interfejs API był obejściem zmian konfiguracji, które są teraz obsługiwane wewnętrznie. Wszystkie stany dekoratora, w tym obiekty ViewModel, muszą być teraz usuwane w tym samym czasie po zamknięciu. Aby zachować stan dekoratora poza momentem, w którym stos wsteczny jest przekazywany do NavDisplay, użyj interfejsu rememberDecoratedNavEntries API. (I852d9)

Poprawki błędów

  • Dodaj toString() do CreationExtras.Key, aby wyświetlić nazwę zajęć. (I5de52)

Wersja 2.11.0-alpha02

11 marca 2026 r.

Publikacja androidx.lifecycle:lifecycle-*:2.11.0-alpha02 Wersja 2.11.0-alpha02 zawiera te zmiany.

Scoped ViewModels

  • W tej wersji wprowadziliśmy interfejsy API do tworzenia instancji ViewModelStore w Compose. Umożliwia to powiązanie ViewModels z konkretnymi zakresami interfejsu (np. z poszczególnymi stronami Pager lub elementami LazyList). Te ViewModels przetrwają zmiany konfiguracji i zostaną automatycznie wyczyszczone, gdy odpowiadający im komponent Composable zostanie trwale usunięty z hierarchii.

    // Hoist the parent provider outside the Pager.
    val provider = rememberViewModelStoreProvider()
    val pagerState = rememberPagerState(pageCount = { 5 })
    
    HorizontalPager(state = pagerState) { page ->
        // Create an owner scoped to the current page.
        val storeOwner = rememberViewModelStoreOwner(provider, key = page)
    
        // Provide the scoped owner to this composition.
        CompositionLocalProvider(LocalViewModelStoreOwner provides storeOwner) {
            // ViewModel is now scoped specifically to this page.
            val viewModel: PageViewModel = viewModel()
        }
    }
    

Pamiętaj, że ViewModelStoreProvider jest dostępny poza Compose i może być używany z aktywnościami, fragmentami lub widokami.

Nowe funkcje

  • Dodanie obsługi wszystkich platform docelowych KMP do ViewModel Navigation3. (I60fa5)
  • Dodaj funkcje fabryczne dla LifecycleOwner, ViewModelStoreOwner i SavedStateRegistryOwner, aby zmniejszyć ilość kodu szablonowego podczas tworzenia niestandardowych komponentów właściciela. (I9682c)
  • Dodaj funkcję rozszerzenia Lifecycle.addObserver opartą na lambdzie, aby umożliwić obserwowanie zdarzeń cyklu życia bez tworzenia instancji obiektu anonimowego. (I94f38)
  • Dodaj rozszerzenia defaultViewModelProviderFactory i defaultViewModelCreationExtras do kampanii ViewModelStoreOwner. Zapewniają bezpieczny dostęp do wartości domyślnych bez konieczności ręcznego sprawdzania typów w odniesieniu do HasDefaultViewModelProviderFactory. (Ifa83d)

Zmiany w interfejsie API

  • Dodaj rememberViewModelStoreOwner, aby łatwo tworzyć ViewModelStoreOwner w Compose. Ta funkcja zwraca właściciela powiązanego z cyklem życia komponentu, automatycznie czyszcząc jego obiekty ViewModel, gdy komponent zostanie usunięty z interfejsu. (I2a15b, b/165642391)
  • Dodaj rememberViewModelStoreProvider, aby umożliwić tworzenie instancji ViewModelStore o ograniczonym zakresie w Compose. Ta funkcja łączy sklep podrzędny z właścicielem nadrzędnym, dzięki czemu obiekty ViewModel przetrwają zmiany konfiguracji, a gdy funkcja Composable zostanie usunięta z hierarchii, zostaną automatycznie wyczyszczone. (I0f57a, b/165642391)
  • Dodaj ViewModelStoreProvider, aby zarządzać instancjami z określonym zakresem ViewModelStore. Ta klasa umożliwia tworzenie zakresów podrzędnych, które przetrwają zmiany konfiguracji, ale można je niezależnie wyczyścić. Zawiera też ViewModelStoreOwnerotoczki, które dziedziczą domyślne fabryki i dodatki do tworzenia z elementu nadrzędnego. (I87f4f, b/434651920)

Wersja 2.11.0-alpha01

25 lutego 2026 r.

Publikacja androidx.lifecycle:lifecycle-*:2.11.0-alpha01 Wersja 2.11.0-alpha01 zawiera te zmiany.

Nowe funkcje

  • Obsługa wszystkich platform Kotlin Multiplatform (KMP) w ViewModel-Compose. Oddzielenie określania właściciela od LocalView, aby umożliwić hostom platformy udostępnianie domyślnego ViewModelStoreOwner przy zachowaniu LocalView jako bezpiecznego rozwiązania rezerwowego na Androidzie. (I09fab, b/434940570, Ic8526, b/478146897)

Zmiany w interfejsie API

  • Dodaj implementację toString do ViewModelStore, która zawiera listę wszystkich zapisanych kluczy, aby ułatwić debugowanie. (I0a6f4)
  • Dodaj domyślną implementację dla HasDefaultViewModelProviderFactory.defaultViewModelProviderFactory, co oznacza, że podczas implementowania interfejsu nie musisz już jawnie zastępować tej właściwości. (Ia7095)
  • Dodaj do adnotacji ViewModel.onCleared adnotację @EmptySuper, aby wyraźnie wskazać, że metody zastępujące nie muszą wywoływać super.onCleared(). (I8c226)

Wersja 2.10

Wersja 2.10.0

19 listopada 2025 r.

Publikacja androidx.lifecycle:lifecycle-*:2.10.0 Wersja 2.10.0 zawiera te zmiany.

Ważne zmiany od wersji 2.9.0:

  • Dodaj funkcję kompozycyjną rememberLifecycleOwner, aby umożliwić tworzenie cykli życia o określonym zakresie bezpośrednio w interfejsie. Jest to przydatne w przypadku komponentów, które muszą zarządzać własnym cyklem życia niezależnie, np. w przypadku komponentu HorizontalPager, który chce, aby tylko bieżąca strona była RESUMED, lub bibliotek takich jak Navigation3:

    @Composable
    fun MyComposable() {
        // This LifecycleOwner is automatically moved to DESTROYED when
        // it leaves composition and its maxLifecycle is the maximum of either
        // the maxLifecycle you set or the Lifecycle.State of the parentLifecycleOwner
        val lifecycleOwner = rememberLifecycleOwner(
            maxLifecycle = RESUMED,
            parentLifecycleOwner = LocalLifecycleOwner.current,
        )
        CompositionLocalProvider(LocalLifecycleOwner provides lifecycleOwner) {
            val childLifecycleOwner = LocalLifecycleOwner.current
        }
    }
    
  • Artefakt lifecycle-viewmodel-navigation3 zapewnia gotową integrację z Navigation3, co umożliwia włączenie zakresu instancji ViewModel dla poszczególnych ekranów („wpisów”) za pomocą interfejsu rememberViewModelStoreNavEntryDecorator() API:

    @Composable
    fun MyComposable() {
        NavDisplay(
            backStack = backStack,
            entryDecorators =
                listOf(
                    rememberSaveableStateHolderNavEntryDecorator(),
                    // Add this line to automatically scope ViewModels to each entry
                    rememberViewModelStoreNavEntryDecorator(),
                ),
            entryProvider = entryProvider {
                // Add your entries here
            }
        }
    }
    
  • Dodaj funkcję fabryki konstruktora dla CreationExtras, która zapewnia wygodniejszy i bardziej idiomatyczny interfejs Kotlin API.

    override val defaultViewModelCreationExtras: CreationExtras
        // Use the CreationExtras builder to add in a custom value to the default
        // CreationExtras in your Activity or Fragment
        get() = super.defaultViewModelCreationExtras + CreationExtras {
            this[CustomKey] = "customValue"
       }
    
  • Dodaliśmy natywną obsługę typów dopuszczających wartość null w SavedStateHandle.saved, co upraszcza zapisywanie i przywracanie właściwości dopuszczających wartość null.

  • Oznacz konstruktory SavedStateHandle jako @VisibleForTesting.

  • Wartość minSdk została zmieniona z API 21 na API 23.

Wersja 2.10.0-rc01

5 listopada 2025 r.

Publikacja androidx.lifecycle:lifecycle-*:2.10.0-rc01 Wersja 2.10.0-rc01 zawiera te zmiany.

Wersja 2.10.0-beta01

22 października 2025 r.

Publikacja androidx.lifecycle:lifecycle-*:2.10.0-beta01 Wersja 2.10.0-beta01 zawiera te zmiany.

Zmiany w interfejsie API

  • Nazwa ViewModelStoreNavEntryDecoratorDefault została zmieniona na ViewModelStoreNavEntryDecoratorDefaults. (I6d27b, b/444447434)

Poprawki błędów

  • rememberLifecycleOwner nie ulega już awarii, jeśli właściciel otrzyma zdarzenie Lifecycle.Event.ON_DESTROY przed przejściem do Lifeycle.State.CREATED. (I6f98e, b/444594991)

Wersja 2.10.0-alpha05

8 października 2025 r.

Publikacja androidx.lifecycle:lifecycle-*:2.10.0-alpha05 Wersja 2.10.0-alpha05 zawiera te zmiany.

Zmiany w interfejsie API

  • Wartość removeViewModelStoreOnPopCallback() jest teraz częścią obiektu ViewModelStoreNavEntryDecoratorDefault, w którym inne platformy i implementacje mogą wywoływać wartość domyślną. (Ia1f23, b/444447434)
  • Zmieniliśmy ViewModelStoreNavEntryDecorator z funkcji na klasę, aby lepiej odzwierciedlała jej funkcjonalność jako fabryki NavEntryDecorator, a parametr dekoratora shouldRemoveViewModelStore zmieniliśmy na removeViewModelStoreOnPop, aby wyjaśnić, że to wywołanie zwrotne jest wywoływane tylko wtedy, gdy wpis jest usuwany z backStack. (Iefdc5, b/444447434)

Wersja 2.10.0-alpha04

24 września 2025 r.

Publikacja androidx.lifecycle:lifecycle-*:2.10.0-alpha04 Wersja 2.10.0-alpha04 zawiera te zmiany.

Zmiany w interfejsie API

  • Refaktoryzuj funkcję kompozycyjną LifecycleOwner na rememberLifecycleOwner. Funkcja zwraca teraz bezpośrednio wartość LifecycleOwner. Aby przekazać tego właściciela do kompozycji podrzędnej, użyj atrybutu CompositionLocalProvider. (Ic57f0, b/444446629)
  • Dodaj do lifecycle-viewmodel-navigation3 stuby KMP, aby umożliwić JetBrains dostarczanie rozwidleń, które wypełniają te cele, a tym samym obsługują CMP. (I44a4c)

Wersja 2.10.0-alpha03

27 sierpnia 2025 roku

Publikacja androidx.lifecycle:lifecycle-*:2.10.0-alpha03 Wersja 2.10.0-alpha03 zawiera te zmiany.

Zmiany w interfejsie API

  • Zaktualizuj Compose do wersji 1.9.0. (I2b9de)

Wersja 2.10.0-alpha02

13 sierpnia 2025 r.

Publikacja androidx.lifecycle:lifecycle-*:2.10.0-alpha02 Wersja 2.10.0-alpha02 zawiera te zmiany.

Nowe funkcje

  • Funkcja LifecycleOwner może teraz tworzyć samodzielny cykl życia głównego elementu. Gdy jawnie ustawisz parent = null, nowy cykl życia działa niezależnie od hosta (np. Activity, Fragment lub NavBackStackEntry). Rozpoczyna się, gdy funkcja kompozycyjna wchodzi w skład kompozycji, i jest automatycznie niszczona, gdy z niej wychodzi. (I8dfbe, b/433659048)

    @Composable
    fun IndependentComponent() {
        // Create a standalone lifecycle, not tied to the parent Activity/Fragment.
        LifecycleOwner(parent = null) {
            val rootLifecycle = LocalLifecycleOwner.current.lifecycle
        }
    }
    

Zmiany w interfejsie API

  • W funkcji kompozycyjnej LifecycleOwner parametr parentLifecycleOwner został zmieniony na parent. (I080bc)

Poprawki błędów

  • LifecycleOwner – komponent kompozycyjny prawidłowo przenosi swój cykl życia do stanu DESTROYED po usunięciu. Zapobiega to potencjalnym wyciekom w przypadku kodu zewnętrznego, który zawiera odwołanie do cyklu życia. (I9e5b7, b/433659048)
  • Przeniesienie domyślnego minSdk z API 21 na API 23 (Ibdfca, b/380448311, b/435705964, b/435705223)

Wkład zewnętrzny

  • Usuń z LifecycleOwner niepotrzebne wewnętrzne pola pomocnicze. Dziękujemy Jake’owi Whartonowi za pomoc. (Ideddb)

Wersja 2.10.0-alpha01

30 lipca 2025 r.

Publikacja androidx.lifecycle:lifecycle-*:2.10.0-alpha01 Wersja 2.10.0-alpha01 zawiera te zmiany.

Nowe funkcje

  • Dodaj funkcję kompozycyjną LifecycleOwner, aby umożliwić tworzenie cykli życia o określonym zakresie bezpośrednio w interfejsie. Jest to przydatne w przypadku komponentów, które muszą zarządzać własnym cyklem życia niezależnie od innych. Przykład integracji tego nowego komponentu z Navigation3 znajdziesz w aosp/3708610. (76cbf7)

    @Composable
    fun MyComposable() {
        LifecycleOwner(
            maxLifecycle = RESUMED,
            parentLifecycleOwner = LocalLifecycleOwner.current,
        ) {
            val childLifecycleOwner = LocalLifecycleOwner.current
        }
    }
    

Zmiany w interfejsie API

  • Dodaj funkcję fabryki konstruktora dla CreationExtras, która zapewnia wygodniejszy i bardziej idiomatyczny interfejs Kotlin API. (Iab2bd)
  • Dodaliśmy natywną obsługę typów dopuszczających wartość null w SavedStateHandle.saved, co upraszcza zapisywanie i przywracanie właściwości dopuszczających wartość null. (I54d69, b/421325690)
  • Oznacz zespoły SavedStateHandle jako @VisibleForTesting. (Iff0e0, b/408002794)

Wersja 2.9

Wersja 2.9.4

17 września 2025 r.

Publikacja androidx.lifecycle:lifecycle-*:2.9.4 Wersja 2.9.4 zawiera te zmiany.

Poprawki błędów

  • Naprawiono błąd polegający na tym, że wtyczka Compose Compiler nie była stosowana, co powodowało uszkodzenie artefaktów Lifecycle KMP. (Ie95bc, b/443096483, b/443965665)

Wersja 2.9.3

27 sierpnia 2025 roku

Publikacja androidx.lifecycle:lifecycle-*:2.9.3 Wersja 2.9.3 zawiera te zmiany.

Nowe funkcje

  • Dodaj nowe platformy Kotlin Multiplatform (KMP) do artefaktów cyklu życia *-compose. Biblioteka Lifecycle obsługuje teraz te platformy: JVM (Android i komputery), Native (Linux, iOS, watchOS, macOS, MinGW) i Web (JavaScript, WasmJS). (I0a0e4)

Poprawki błędów

Wersja 2.9.2

16 lipca 2025 r.

Publikacja androidx.lifecycle:lifecycle-*:2.9.2 Wersja 2.9.2 zawiera te zmiany.

Poprawki błędów

  • Dodaliśmy nowe platformy Kotlin Multiplatform (KMP) do artefaktów Lifecycle. Biblioteka Lifecycle obsługuje teraz te platformy: JVM (Android i komputery), Native (Linux, iOS, watchOS, macOS, MinGW) i Web (JavaScript, WasmJS). Pamiętaj, że do artefaktów *-compose nie dodano żadnych nowych środowisk docelowych KMP, ponieważ zależy to od stabilnej wersji Compose 1.9. (I01cb8).

Aktualizacje zależności

Wersja 2.9.1

4 czerwca 2025 r.

Publikacja androidx.lifecycle:lifecycle-*:2.9.1 Wersja 2.9.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązywanie problemu z nieusuwaniem stanów SavedStateHandle.getMutableStateFlow(key) przez SavedStateHandle.remove(key). (d5f939, b/418746333)

Wersja 2.9.0

7 maja 2025 r.

Publikacja androidx.lifecycle:lifecycle-*:2.9.0 Wersja 2.9.0 zawiera te zmiany.

Ważne zmiany od wersji 2.8.0

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

Obsługa serializacji KotlinX

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

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

Kotlin Multiplatform

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

Zmiany w zachowaniu

  • Stan Lifecycle.DESTROYED jest stanem końcowym, a każda próba przeniesienia z niego elementu Lifecycle do innego stanu spowoduje teraz wystąpienie błędu IllegalStateException.
  • SavedStateHandle nie zawiera już żadnych SavedStateProvider.saveState(), w których zwrócony Bundle jest pusty.

Wersja 2.9.0-rc01

23 kwietnia 2025 r.

Publikacja androidx.lifecycle:lifecycle-*:2.9.0-rc01 Wersja 2.9.0-rc01 zawiera te zmiany.

Ostrzeżenie o zgodności interfejsu API Lint

  • Firma JetBrains zmieniła KaCallableMemberCallklasy na interfejs, co powoduje utratę zgodności binarnej. Może to powodować awarie, jeśli wersja AGP w projekcie różni się od wersji użytej do skompilowania testów lint. Ta aktualizacja została wprowadzona w aosp/3577172, ale nie było jej w informacjach o wersji – wyjaśniamy to tutaj. Zalecane rozwiązanie: zaktualizuj AGP do najnowszej stabilnej wersji. Jeśli nie możesz w pełni zaktualizować wersji, użyj android.experimental.lint.version, aby dostosować sprawdzanie kodu do wersji AGP. Więcej informacji znajdziesz w artykule Zmiany w działaniu środowiska wykonawczego Compose.

Wersja 2.9.0-beta01

9 kwietnia 2025 r.

Publikacja androidx.lifecycle:lifecycle-*:2.9.0-beta01 Wersja 2.9.0-beta01 zawiera te zmiany.

Zmiany w interfejsie API

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

Aktualizacje zależności

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

Wersja 2.9.0-alpha13

26 marca 2025 r.

androidx.lifecycle:lifecycle-*:2.9.0-alpha13 zostaje opublikowana bez znaczących zmian publicznych. Wersja 2.9.0-alpha13 zawiera te zmiany.

Wersja 2.9.0-alpha12

12 marca 2025 r.

Publikacja androidx.lifecycle:lifecycle-*:2.9.0-alpha12 Wersja 2.9.0-alpha12 zawiera te zmiany.

Zmiany w interfejsie API

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

Wersja 2.9.0-alpha11

26 lutego 2025 r.

Publikacja androidx.lifecycle:lifecycle-*:2.9.0-alpha11 Wersja 2.9.0-alpha11 zawiera te zmiany.

Zmiany w interfejsie API

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

Wersja 2.9.0-alpha10

12 lutego 2025 r.

Publikacja androidx.lifecycle:lifecycle-*:2.9.0-alpha10 Wersja 2.9.0-alpha10 zawiera te zmiany.

Zmiany w interfejsie API

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

Wkład zewnętrzny

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

Wersja 2.9.0-alpha09

29 stycznia 2025 r.

Publikacja androidx.lifecycle:lifecycle-*:2.9.0-alpha09 Wersja 2.9.0-alpha09 zawiera te zmiany.

Nowe funkcje

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

Zmiany w interfejsie API

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

Wersja 2.9.0-alpha08

11 grudnia 2024 r.

Publikacja androidx.lifecycle:lifecycle-*:2.9.0-alpha08 Wersja 2.9.0-alpha08 zawiera te zmiany.

Nowe funkcje

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

Zmiany w interfejsie API

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

Poprawki błędów

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

Wersja 2.9.0-alpha07

13 listopada 2024 r.

Publikacja androidx.lifecycle:lifecycle-*:2.9.0-alpha07 Wersja 2.9.0-alpha07 zawiera te zmiany.

Zgodność z Kotlin Multiplatform

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

Obsługa serializacji KotlinX

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

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

Zmiany w interfejsie API

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

Wersja 2.9.0-alpha06

30 października 2024 r.

Publikacja androidx.lifecycle:lifecycle-*:2.9.0-alpha06 Wersja 2.9.0-alpha06 zawiera te zmiany.

Zmiany w zachowaniu

  • Stan Lifecycle.DESTROYED jest stanem końcowym, a każda próba przeniesienia z niego elementu Lifecycle do innego stanu spowoduje teraz wystąpienie błędu IllegalStateException. (I116c4, b/370577987)
  • SavedStateHandle nie zawiera już żadnych SavedStateProvider.saveState(), w których zwrócony Bundle jest pusty. (I910b5, b/370577987)

Poprawki błędów

  • Lifecycle.eventFlow jest teraz prawidłowo uzupełniane, 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 została wydana bez znaczących zmian. Wersja 2.9.0-alpha05 zawiera te zmiany.

Wersja 2.9.0-alpha04

2 października 2024 r.

Publikacja androidx.lifecycle:lifecycle-*:2.9.0-alpha04 Wersja 2.9.0-alpha04 zawiera te zmiany.

Kotlin Multiplatform

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

Wersja 2.9.0-alpha03

18 września 2024 r.

Publikacja androidx.lifecycle:lifecycle-*:2.9.0-alpha03 Wersja 2.9.0-alpha03 zawiera te zmiany.

Poprawki błędów

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

Aktualizacje zależności

Wersja 2.9.0-alpha02

4 września 2024 r.

Publikacja androidx.lifecycle:lifecycle-*:2.9.0-alpha02 Wersja 2.9.0-alpha02 zawiera te zmiany.

Poprawki błędów

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

Wkład zewnętrzny

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

Wersja 2.9.0-alpha01

7 sierpnia 2024 r.

Publikacja androidx.lifecycle:lifecycle-*:2.9.0-alpha01 Wersja 2.9.0-alpha01 zawiera te zmiany.

Kotlin Multiplatform

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

Nowe funkcje

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

Zmiany w interfejsie API

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

Poprawki błędów

  • Usunęliśmy ręczne określanie dostępu do nowych interfejsów API platformy, ponieważ odbywa się to automatycznie za pomocą modelowania interfejsu API podczas korzystania z R8 z AGP 7.3 lub nowszą (np. R8 w wersji 3.3) oraz w przypadku wszystkich kompilacji podczas korzystania z AGP 8.1 lub nowszej (np. D8 w wersji 8.1). Klientom, którzy nie korzystają z wtyczki Androida do obsługi Gradle, zalecamy przejście na D8 w 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.

Publikacja androidx.lifecycle:lifecycle-*:2.8.7 Wersja 2.8.7 zawiera te zmiany.

Zmiany w interfejsie API

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

Wersja 2.8.6

18 września 2024 r.

Publikacja androidx.lifecycle:lifecycle-*:2.8.6 Wersja 2.8.6 zawiera te zmiany.

Poprawki błędów

  • NullSafeMutableLiveData Błąd lintera ma ulepszoną obsługę inteligentnego rzutowania, co pozwala uniknąć fałszywych alarmów. (85fed6, b/181042665)

Aktualizacje zależności

Wersja 2.8.5

4 września 2024 r.

Publikacja androidx.lifecycle:lifecycle-*:2.8.5 Wersja 2.8.5 zawiera te zmiany.

Poprawki błędów

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

Wkład zewnętrzny

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

Wersja 2.8.4

24 lipca 2024 r.

Publikacja androidx.lifecycle:lifecycle-*:2.8.4 Wersja 2.8.4 zawiera te zmiany.

Poprawki błędów

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

Wersja 2.8.3

1 lipca 2024 r.

Publikacja androidx.lifecycle:lifecycle-*:2.8.3 Wersja 2.8.3 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem ze zgodnością wsteczną biblioteki Lifecycle w wersji 2.8 z biblioteką Compose w wersji 1.6.0 i starszych podczas korzystania ze zmniejszania kodu. (aosp/3133056, b/346808608)

Wersja 2.8.2

12 czerwca 2024 r.

Publikacja androidx.lifecycle:lifecycle-*:2.8.2 Wersja 2.8.2 zawiera te zmiany.

Poprawki błędów

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

Wersja 2.8.1

29 maja 2024 r.

Publikacja androidx.lifecycle:lifecycle-*:2.8.1 Wersja 2.8.1 zawiera te zmiany.

Poprawki błędów

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

Wersja 2.8.0

14 maja 2024 r.

Publikacja androidx.lifecycle:lifecycle-*:2.8.0 Wersja 2.8.0 zawiera te zmiany.

Ważne zmiany od wersji 2.7.0

  • LocalLifecycleOwner został przeniesiony z Compose UI do lifecycle-runtime-compose, aby jego interfejsy API pomocnicze oparte na Compose można było używać poza Compose UI.
  • Artefakt lifecycle-runtime-compose zawiera teraz interfejsy API dropUnlessResumeddropUnlessStarted, które umożliwiają pomijanie kliknięć lub innych zdarzeń występujących nawet po tym, jak wartość LifecycleOwner spadnie poniżej podanej wartości Lifecycle.State. Możesz na przykład użyć tego parametru w przypadku Navigation Compose, aby uniknąć obsługi zdarzeń kliknięcia po rozpoczęciu przejścia na inny ekran: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
  • ViewModel.viewModelScope jest teraz parametrem konstruktora, który można zastąpić. Umożliwia to wstrzykiwanie własnego dyspozytora i SupervisorJob() lub zastępowanie domyślnego dyspozytora za pomocą backgroundScope dostępnego w runTest. (I2817c, b/264598574)

    class MyViewModel(
      // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate
      viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob()
    ) : ViewModel(viewModelScope) {
      // Use viewModelScope as before, without any code changes
    }
    
    // Allows overriding the viewModelScope in a test
    fun Test() = runTest {
      val viewModel = MyViewModel(backgroundScope)
    }
    
  • ViewModel został przepisany w języku Kotlin i teraz używa AutoClosable zamiast Closeable. Umożliwia teraz dodawanie AutoCloseable obiektów z key, które pozwalają na ich pobieranie za pomocą getCloseable().

  • Wywoływanie funkcji LifecycleStartEffectLifecycleResumeEffect bez klucza jest teraz błędem, zgodnie z tą samą konwencją co w przypadku interfejsu DisposableEffect API, który te interfejsy API 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.

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

Zgodność z Kotlin Multiplatform w zakresie cyklu życia

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

Artefakty, których to dotyczy:

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

Zgodność ViewModel z Kotlin Multiplatform

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

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

Zgodność binarna w Androidzie została zachowana, ale w porównaniu z wspólnym interfejsem API występuje kilka istotnych zmian:

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

Artefakty, których to dotyczy:

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

Zmiany w zachowaniu

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

Znane problemy

Wersja 2.8.0-rc01

1 maja 2024 r.

Publikacja androidx.lifecycle:lifecycle-*:2.8.0-rc01 Wersja 2.8.0-rc01 zawiera te zmiany.

Poprawki błędów

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

Wkład zewnętrzny

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

Wersja 2.8.0-beta01

17 kwietnia 2024 r.

Publikacja androidx.lifecycle:lifecycle-*:2.8.0-beta01 Wersja 2.8.0-beta01 zawiera te zmiany.

Nowe funkcje

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

Wersja 2.8.0-alpha04

3 kwietnia 2024 r.

Publikacja androidx.lifecycle:lifecycle-*:2.8.0-alpha04 Wersja 2.8.0-alpha04 zawiera te zmiany.

Nowe funkcje

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

Poprawki błędów

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

Aktualizacja zależności

Wersja 2.8.0-alpha03

20 marca 2024 r.

Publikacja androidx.lifecycle:lifecycle-*:2.8.0-alpha03 Wersja 2.8.0-alpha03 zawiera te zmiany.

Nowe funkcje

  • ViewModel.viewModelScope jest teraz parametrem konstruktora, który można zastąpić. Umożliwia to wstrzykiwanie własnego dyspozytora i SupervisorJob() lub zastępowanie domyślnego dyspozytora za pomocą backgroundScope dostępnego w runTest. (I2817c, b/264598574)

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

Zgodność z Kotlin Multiplatform

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

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

Zgodność binarna w Androidzie została zachowana, ale w porównaniu z wspólnym interfejsem API występuje kilka istotnych zmian:

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

Zmiany w zachowaniu

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

Poprawki błędów

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

Wkład zewnętrzny

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

Wersja 2.8.0-alpha02

21 lutego 2024 r.

Publikacja androidx.lifecycle:lifecycle-*:2.8.0-alpha02 Wersja 2.8.0-alpha02 zawiera te zatwierdzenia.

Nowe funkcje

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

Konwersje w Kotlinie

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

Zgodność z Kotlin Multiplatform

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

Zmiany w interfejsie API

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

Wkład zewnętrzny

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

Wersja 2.8.0-alpha01

24 stycznia 2024 r.

Publikacja androidx.lifecycle:lifecycle-*:2.8.0-alpha01 Wersja 2.8.0-alpha01 zawiera te zatwierdzenia.

Nowe funkcje

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

Wersja 2.7

Wersja 2.7.0

10 stycznia 2024 r.

Publikacja androidx.lifecycle:lifecycle-*:2.7.0 Wersja 2.7.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 2.6.0

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

Dostrzegalność zdarzeń cyklu życia

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

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

Obserwowanie stanu cyklu życia

  • Bieżą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żywać rozszerzenia Lifecycle.currentStateAsState(), aby bezpośrednio udostępniać Lifecycle.State jako State w Compose. Jest to odpowiednik (i krótsza alternatywa) funkcji lifecycle.currentStateFlow.collectAsState().

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

Wersja 2.7.0-rc02

13 grudnia 2023 r.

Publikacja androidx.lifecycle:lifecycle-*:2.7.0-rc02 Wersja 2.7.0-rc02 zawiera te zatwierdzenia.

Poprawki błędów

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

Wersja 2.7.0-rc01

15 listopada 2023 r.

Publikacja androidx.lifecycle:lifecycle-*:2.7.0-rc01 Wersja 2.7.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

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

Wersja 2.7.0-beta01

1 listopada 2023 roku

androidx.lifecycle:lifecycle-*:2.7.0-beta01 jest publikowany bez zmian. Wersja 2.7.0-beta01 zawiera te zatwierdzenia.

  • Wersja beta, bez większych zmian w tej wersji do publikacji.

Wersja 2.7.0-alpha03

18 października 2023 r.

Publikacja androidx.lifecycle:lifecycle-*:2.7.0-alpha03 Wersja 2.7.0-alpha03 zawiera te zatwierdzenia.

Nowe funkcje

  • lifecycle-runtime-testing zawiera teraz nowe sprawdzenie lintera, które zapobiega ustawianiu Lifecycle.State TestLifecycleOwner za pomocą pola currentState w obrębie współprogramu. Sprawdzanie Lint sugeruje teraz zawieszenie setCurrentState, które umożliwia ustawienie Lifecycle.State bez blokowania. (Icf728, b/297880630)

Poprawki błędów

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

Wersja 2.7.0-alpha02

6 września 2023 r.

Publikacja androidx.lifecycle:lifecycle-*:2.7.0-alpha02 Wersja 2.7.0-alpha02 zawiera te zatwierdzenia.

Nowe funkcje

  • TestLifecycleOwner zawiera teraz funkcję zawieszania setCurrentState(), która umożliwia użytkownikom korzystanie z TestLifecycleOwner w ramach współprogramu, np. tego udostępnianego 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 LiveData, jeśli poprzedni LiveData miał ustawioną wartość, co zapewnia, że używanie wynikowego obiektu LiveData w Jetpack Compose ma odpowiedni stan podczas początkowej kompozycji. (I91d2b, b/269479952)
  • ViewModeladdCloseable() natychmiast zamyka Closeable, jeśli ViewModel otrzymał już połączenie do onCleared(). (I4712e, b/280294730)

Poprawki błędów

  • W sekcji Lifecycle2.6.2: rozwiązaliśmy problem polegający na tym, że SavedStateHandle nie był prawidłowo przywracany po śmierci procesu, jeśli stan został przywrócony, wywołano save() bez zapisywania stanu w nadrzędnym SavedStateRegistry, a następnie stan został ponownie przywrócony. Rozwiązuje to problem z interakcją między rememberSaveableNavHost w Navigation Compose. (aosp/2729289)

Wersja 2.7.0-alpha01

26 lipca 2023 r.

Publikacja androidx.lifecycle:lifecycle-*:2.7.0-alpha01 Wersja 2.7.0-alpha01 zawiera te zatwierdzenia.

Zmiany w interfejsie API

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

Poprawki błędów

  • Rozszerzenie LiveData.distinctUntilChanged() ustawia teraz wartość value zwróconego elementu LiveData, jeśli poprzedni element LiveData miał ustawioną wartość. Nie zmienia to sposobu działania obserwacji – zaktualizowane wartości ze źródła LiveData będą nadal stosowane dopiero po rozpoczęciu obserwacji LiveData zwróconego przez distinctUntilChanged(). (Ib482f)
  • 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ą odbicia, będzie musiał podać własne reguły zachowania w odniesieniu do konkretnego przypadku użycia. (Ia12fd)

Wersja 2.6

Wersja 2.6.2

6 września 2023 r.

Publikacja androidx.lifecycle:lifecycle-*:2.6.2 Wersja 2.6.2 zawiera te zatwierdzenia.

Poprawki błędów

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

Wersja 2.6.1

22 marca 2023 r.

Publikacja androidx.lifecycle:lifecycle-*:2.6.1 Wersja 2.6.1 zawiera te zatwierdzenia.

Aktualizacje zależności

Wersja 2.6.0

8 marca 2023 r.

Publikacja androidx.lifecycle:lifecycle-*:2.6.0 Wersja 2.6.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 2.5.0

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

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

Cykl życia 2.5 Cykl życia 2.5 (KTX) Cykl życia 2.6
Transformations.switchMap(liveData) {...} liveData.switchMap {...} liveData.switchMap {...}
Transformations.map(liveData) {...} liveData.map {...} liveData.map {...}
Transformations.distinctUntilChanged(liveData) {...} liveData.distinctUntilChanged{...} liveData.distinctUntilChanged{...}
LiveDataReactiveStreams.fromPublisher(publisher) publisher.toLiveData() publisher.toLiveData()
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) liveData.toPublisher(lifecycleOwner) liveData.toPublisher(lifecycleOwner)
override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory override val defaultViewModelProviderFactory = factory
override fun getDefaultViewModelCreationExtras(): CreationExtras = extras override fun getDefaultViewModelCreationExtras(): CreationExtras = extras override val defaultViewModelProviderCreationExtras = extras
ViewTreeLifecycleOwner.set(view, owner) ViewTreeLifecycleOwner.set(view, owner) view.setViewTreeLifecycleOwner(owner)
ViewTreeLifecycleOwner.get(view) view.findViewTreeLifecycleOwner() view.findViewTreeLifecycleOwner()
override fun getViewModelStore(): ViewModelStore = store override fun getViewModelStore(): ViewModelStore = store override val viewModelStore: ViewModelStore = store
override fun getLifecycle(): Lifecycle = registry override fun getLifecycle(): Lifecycle = registry override val lifecycle: Lifecycle get() = registry
  • Dopuszczalność wartości null metody onChanged obiektu Observer utworzonego w języku Kotlin jest teraz zgodna z dopuszczalnością wartości null typu ogólnego. Jeśli chcesz, aby funkcja Observer.onChanged() akceptowała typ dopuszczający wartość null, musisz utworzyć instancję funkcji Observer z typem dopuszczającym wartość null.
  • Te klasy zostały również przekonwertowane na język Kotlin, ale zachowują zgodność ze źródłem: DefaultLifecycleObserver, LifecycleEventObserver, Lifecycle, LifecycleRegistry, LifecycleObserver, ViewModelStore, AndroidViewModel, AbstractSavedStateViewModelFactory, LifecycleService, ServiceLifecycleDispatcherProcessLifecycleOwner.

Wersja 2.6.0-rc01

22 lutego 2023 roku

Publikacja androidx.lifecycle:lifecycle-*:2.6.0-rc01 Wersja 2.6.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

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

Wersja 2.6.0-beta01

8 lutego 2023 r.

Publikacja androidx.lifecycle:lifecycle-*:2.6.0-beta01 Wersja 2.6.0-beta01 zawiera te zatwierdzenia.

Konwersje w Kotlinie

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

Wersja 2.6.0-alpha05

25 stycznia 2023 r.

Publikacja androidx.lifecycle:lifecycle-*:2.6.0-alpha05 Wersja 2.6.0-alpha05 zawiera te zatwierdzenia.

Konwersje w Kotlinie

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

Wersja 2.6.0-alpha04

11 stycznia 2023 r.

Publikacja androidx.lifecycle:lifecycle-*:2.6.0-alpha04 Wersja 2.6.0-alpha04 zawiera te zatwierdzenia.

Nowe funkcje

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

Zmiany w interfejsie API

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

Konwersje w Kotlinie

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

Poprawki błędów

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

Wersja 2.6.0-alpha03

24 października 2022 r.

Publikacja androidx.lifecycle:lifecycle-*:2.6.0-alpha03 Wersja 2.6.0-alpha03 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem polegający 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 o błędach, które informują programistów o komponencie powodującym błąd. (Idf4b2, b/244910446)

Wersja 2.6.0-alpha02

7 września 2022 roku

Publikacja androidx.lifecycle:lifecycle-*:2.6.0-alpha02 Wersja 2.6.0-alpha02 zawiera te zatwierdzenia.

Zmiany w interfejsie API

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

Poprawki błędów

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

Wersja 2.6.0-alpha01

29 czerwca 2022 r.

Publikacja androidx.lifecycle:lifecycle-*:2.6.0-alpha01 Wersja 2.6.0-alpha01 zawiera te zatwierdzenia.

Nowe funkcje

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

Wersja 2.5

Wersja 2.5.1

27 lipca 2022 roku

Publikacja androidx.lifecycle:lifecycle-*:2.5.1 Wersja 2.5.1 zawiera te zatwierdzenia.

Poprawki błędów

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

Wersja 2.5.0

29 czerwca 2022 r.

Publikacja androidx.lifecycle:lifecycle-*:2.5.0 Wersja 2.5.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 2.4.0

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

  • ViewModel CreationExtras – podczas pisania niestandardowego ViewModelProvider.Factory nie trzeba już rozszerzać AndroidViewModelFactory ani AbstractSavedStateViewModelFactory, aby uzyskać dostęp odpowiednio do Application lub SavedStateHandle. Zamiast tego te pola są udostępniane każdej podklasie ViewModelProvider.Factory jako CreationExtras za pomocą nowego przeciążenia create: create(Class<T>, CreationExtras). Te dodatkowe informacje są dostarczane automatycznie przez aktywność lub fragment podczas korzystania odpowiednio z Activity 1.5.0Fragment 1.5.0.

    class CustomFactory : ViewModelProvider.Factory {
        override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
            return when (modelClass) {
                HomeViewModel::class -> {
                    // Get the Application object from extras
                    val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY])
                    // Pass it directly to HomeViewModel
                    HomeViewModel(application)
                }
                DetailViewModel::class -> {
                    // Create a SavedStateHandle for this ViewModel from extras
                    val savedStateHandle = extras.createSavedStateHandle()
                    DetailViewModel(savedStateHandle)
                }
                else -> throw IllegalArgumentException("Unknown class $modelClass")
            } as T
        }
    }
    
  • lifecycle-viewmodel udostępnia teraz viewModelFactory Kotlin DSL, który umożliwia definiowanie ViewModelProvider.Factory za pomocą co najmniej 1 inicjatora lambda, po jednym dla każdej klasy ViewModel obsługiwanej przez fabrykę niestandardową, przy użyciu CreationExtras jako głównego źródła danych.

    val customFactory = viewModelFactory {
        // The return type of the lambda automatically sets what class this lambda handles
        initializer {
            // Get the Application object from extras provided to the lambda
            val application = checkNotNull(get(ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY))
            HomeViewModel(application)
        }
        initializer {
            val savedStateHandle = createSavedStateHandle()
            DetailViewModel(savedStateHandle)
        }
    }
    
  • lifecycle-viewmodel-compose udostępnia teraz interfejs API viewModel(), który przyjmuje fabrykę lambda do tworzenia instancji ViewModel bez konieczności tworzenia niestandardowego ViewModelProvider.Factory.

    // Within a @Composable, you can now skip writing a custom Factory
    // and instead write a lambda to do the initialization of your ViewModel
    val detailViewModel = viewModel {
      // This lambda is only called the first time the ViewModel is created
      // and all CreationExtras are available inside the lambda
      val savedStateHandle = createSavedStateHandle()
      DetailViewModel(savedStateHandle)
    }
    
  • Integracja komponentu SavedStateHandle z komponentem Saver Compose – artefakt lifecycle-viewmodel-compose zawiera teraz nowe eksperymentalne interfejsy API w SavedStateHandle.saveable, które umożliwiają zachowanie podobne do rememberSaveable, oparte na SavedStateHandle komponentu `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 nowe przeciążenie konstruktora, które umożliwiają dodawanie do obiektu ViewModel co najmniej 1 obiektu Closeable. Obiekty te zostaną zamknięte po wyczyszczeniu obiektu ViewModel bez konieczności ręcznego wykonywania jakichkolwiek działań w obiekcie onCleared().

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

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

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

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

Zmiany w zachowaniu

  • Próba przeniesienia Lifecycle.StateINITIALIZED do DESTROYED zawsze będzie teraz zgłaszać błąd 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.

Publikacja androidx.lifecycle:lifecycle-*:2.5.0-rc02 Wersja 2.5.0-rc02 zawiera te zatwierdzenia.

Poprawki błędów

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

Wersja 2.5.0-rc01

11 maja 2022 roku

Publikacja androidx.lifecycle:lifecycle-*:2.5.0-rc01 Wersja 2.5.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

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

Wersja 2.5.0-beta01

20 kwietnia 2022 r.

Publikacja androidx.lifecycle:lifecycle-*:2.5.0-beta01 Wersja 2.5.0-beta01 zawiera te zatwierdzenia.

Zmiany w interfejsie API

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

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że zagnieżdżenie jednego elementu NavHost w innym elemencie NavHost na karcie nawigacji u dołu, która nie jest podstawowa, prowadziło do wyświetlenia elementu IllegalStateException w przypadku używania wielu stosów wstecznych. (I11bd5, b/228865698)

Wersja 2.5.0-alpha06

6 kwietnia 2022 roku

Publikacja androidx.lifecycle:lifecycle-*:2.5.0-alpha06 Wersja 2.5.0-alpha06 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodano eksperymentalne przeciążenie MutableState do SavedStateHandle.saveable, aby zapewnić zgodność z rememberSaveable (I38cfe, b/224565154)

Zmiany w interfejsie API

  • Klasa CreationExtras jest teraz abstrakcyjna zamiast zamknięta. (Ib8a7a)

Poprawki błędów

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

Wersja 2.5.0-alpha05

23 marca 2022 r.

Publikacja androidx.lifecycle:lifecycle-*:2.5.0-alpha05 Wersja 2.5.0-alpha05 zawiera te zmiany.

Nowe funkcje

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

Zmiany w interfejsie API

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

Poprawki błędów

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

Wersja 2.5.0-alpha04

9 marca 2022 r.

Publikacja androidx.lifecycle:lifecycle-*:2.5.0-alpha04 Wersja 2.5.0-alpha04 zawiera te zatwierdzenia.

Zmiany w interfejsie API

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

Wersja 2.5.0-alpha03

23 lutego 2022 r.

Publikacja androidx.lifecycle:lifecycle-*:2.5.0-alpha03 Wersja 2.5.0-alpha03 zawiera te zatwierdzenia.

Nowe funkcje

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

Zmiany w interfejsie API

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

Zmiany w zachowaniu

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

Wersja 2.5.0-alpha02

9 lutego 2022 r.

Publikacja androidx.lifecycle:lifecycle-*:2.5.0-alpha02 Wersja 2.5.0-alpha02 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Pliki SavedStateHandleSavedStateViewModelFactory zostały przekonwertowane na język Kotlin. Poprawiło to dopuszczalność wartości null w przypadku typów ogólnych w obu klasach. (Ib6ce2, b/216168263, I9647a, b/177667711)
  • Parametr funkcji LiveData switchMap może teraz mieć wartość wyjściową dopuszczającą wartość null. (I40396, b/132923666)
  • Rozszerzenia LiveData-ktx są teraz oznaczone adnotacją @CheckResult, aby wymusić użycie wyniku podczas wywoływania tych funkcji. (Ia0f05, b/207325134)

Zmiany w zachowaniu

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

Poprawki błędów

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

Wersja 2.5.0-alpha01

26 stycznia 2022 r.

Publikacja androidx.lifecycle:lifecycle-*:2.5.0-alpha01 Wersja 2.5.0-alpha01 zawiera te zatwierdzenia.

ViewModel CreationExtras

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

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

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

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

Te CreationExtras umożliwiają utworzenie ViewModelProvider.Factory, które przekazuje tylko potrzebne informacje do każdego ViewModel bez konieczności korzystania ze ścisłej hierarchii podklas Factory:

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

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

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

Poprawki błędów

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

Wersja 2.4

Wersja 2.4.1

9 lutego 2022 r.

Publikacja androidx.lifecycle:lifecycle-*:2.4.1 Wersja 2.4.1 zawiera te zatwierdzenia.

Poprawki błędów

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

Wersja 2.4.0

27 października 2021 r.

Publikacja androidx.lifecycle:lifecycle-*:2.4.0 Wersja 2.4.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 2.3.0

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

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

    Jeśli w przeszłości do inicjowania cyklu życia procesu używano tools:node="remove"ContentProvider, musisz wykonać 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 została opublikowana bez zmian w porównaniu z wersją Lifecycle 2.4.0-beta01. Wersja 2.4.0-rc01 zawiera te zatwierdzenia.

Wersja 2.4.0-beta01

15 września 2021 r.

Publikacja androidx.lifecycle:lifecycle-*:2.4.0-beta01 Wersja 2.4.0-beta01 zawiera te zatwierdzenia.

Zmiany w interfejsie API

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

Wkład zewnętrzny

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

Wersja 2.4.0-alpha03

4 sierpnia 2021 r.

Publikacja androidx.lifecycle:lifecycle-*:2.4.0-alpha03 Wersja 2.4.0-alpha03 zawiera te zatwierdzenia.

Zmiany w interfejsie API

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

Zmiany w zachowaniu

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

Wkład zewnętrzny

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

Wersja 2.4.0-alpha02

16 czerwca 2021 r.

Publikacja androidx.lifecycle:lifecycle-*:2.4.0-alpha02 Wersja 2.4.0-alpha02 zawiera te zatwierdzenia.

Nowe funkcje

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

Zmiany w interfejsie API

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

Poprawki błędów

  • Rozwiązaliśmy problem z NullSafeMutableLiveData sprawdzaniem kodu, gdy pole zawiera modyfikatory. (#147, b/183696616)
  • Rozwiązaliśmy kolejny problem z kontrolą NullSafeMutableLiveData podczas używania typów generycznych. (#161, b/184830263)

Wkład zewnętrzny

Wersja 2.4.0-alpha01

24 marca 2021 r.

Publikacja androidx.lifecycle:lifecycle-*:2.4.0-alpha01 Wersja 2.4.0-alpha01 zawiera te zatwierdzenia.

Zmiany w zachowaniu

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

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

    Jeśli w przeszłości do inicjowania cyklu życia procesu używano tools:node="remove"ContentProvider, musisz wykonać 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 przepływu nadrzędnego, gdy cykl życia jest w określonym stanie, za pomocą interfejsu API Lifecycle.repeatOnLifecycle. Jest to alternatywa dla nowego interfejsu LifecycleOwner.addRepeatinJob API. (I0f4cd)

Poprawki błędów

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

Lifecycle Viewmodel Compose w wersji 1.0.0

Wersja 1.0.0-alpha07

16 czerwca 2021 r.

Publikacja androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07 Wersja 1.0.0-alpha07 zawiera te zatwierdzenia.

Zmiany w interfejsie API powodujące niezgodność

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

Wersja 1.0.0-alpha06

2 czerwca 2021 r.

Publikacja androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06 Wersja 1.0.0-alpha06 zawiera te zatwierdzenia.

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

Wersja 1.0.0-alpha05

18 maja 2021 r.

Publikacja androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05 Wersja 1.0.0-alpha05 zawiera te zatwierdzenia.

Nowe funkcje

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

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.

Publikacja androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04 Wersja 1.0.0-alpha04 zawiera te zatwierdzenia.

Zmiany zależności

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

Wersja 1.0.0-alpha03

10 marca 2021 r.

Publikacja androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha03 Wersja 1.0.0-alpha03 zawiera te zatwierdzenia.

Zmiany w interfejsie API

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

Lifecycle-Viewmodel-Compose w wersji 1.0.0-alpha02

24 lutego 2021 r.

Publikacja androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02 Wersja 1.0.0-alpha02 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • LocalViewModelStoreOwner ma teraz provides, które można używać z CompositionLocalProvider zamiast interfejsu asProvidableCompositionLocal() API. (I45d24)

Lifecycle-Viewmodel-Compose w wersji 1.0.0-alpha01

10 lutego 2021 r.

Publikacja androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01 Wersja 1.0.0-alpha01 zawiera te zatwierdzenia.

Nowe funkcje

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

Wersja 2.3.1

Lifecycle w wersji 2.3.1

24 marca 2021 r.

Publikacja androidx.lifecycle:lifecycle-*:2.3.1 Wersja 2.3.1 zawiera te zatwierdzenia.

Poprawki błędów

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

Wersja 2.3.0

Wersja 2.3.0

10 lutego 2021 r.

Publikacja androidx.lifecycle:lifecycle-*:2.3.0 Wersja 2.3.0 zawiera te zatwierdzenia.

Najważniejsze zmiany od wersji 2.2.0

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

Wersja 2.3.0-rc01

16 grudnia 2020 roku

Publikacja androidx.lifecycle:lifecycle-*:2.3.0-rc01 Wersja 2.3.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

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

Wkład zewnętrzny

Wersja 2.3.0-beta01

1 października 2020 roku

Publikacja androidx.lifecycle:lifecycle-*:2.3.0-beta01 Wersja 2.3.0-beta01 zawiera te zatwierdzenia.

Zmiany w interfejsie API

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

Poprawki błędów

Zmiany w dokumentacji

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

Wersja 2.3.0-alpha07

19 sierpnia 2020 r.

Publikacja androidx.lifecycle:lifecycle-*:2.3.0-alpha07 Wersja 2.3.0-alpha07 zawiera te zmiany.

Poprawki błędów

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

Wersja 2.3.0-alpha06

22 lipca 2020 r.

Publikacja androidx.lifecycle:lifecycle-*:2.3.0-alpha06 Wersja 2.3.0-alpha06 zawiera te zatwierdzenia.

Nowe funkcje

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

Zmiany w zachowaniu

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

Poprawki błędów

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

Wersja 2.3.0-alpha05

24 czerwca 2020 r.

Publikacja androidx.lifecycle:lifecycle-*:2.3.0-alpha05 Wersja 2.3.0-alpha05 zawiera te zatwierdzenia.

Poprawki błędów

  • LiveData lepiej obsługuje przypadki ponownego wejścia, unikając duplikatów wywołań funkcji onActive() lub onInactive(). (b/157840298)
  • Rozwiązaliśmy problem, który powodował, że podczas korzystania z Androida Studio 4.1 Canary 6 lub nowszego nie można było uruchomić lintowania. (aosp/1331903)

Wersja 2.3.0-alpha04

10 czerwca 2020 r.

Publikacja androidx.lifecycle:lifecycle-*:2.3.0-alpha04 Wersja 2.3.0-alpha04 zawiera te zatwierdzenia.

Poprawki błędów

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

Wersja 2.3.0-alpha03

20 maja 2020 r.

androidx.lifecycle:lifecycle-*:2.3.0-alpha03 są publikowane. Wersja 2.3.0-alpha03 zawiera te zatwierdzenia.

Nowe funkcje

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

Poprawki błędów

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

Wersja 2.3.0-alpha02

29 kwietnia 2020 r.

Publikacja androidx.lifecycle:lifecycle-*:2.3.0-alpha02 Wersja 2.3.0-alpha02 zawiera te zatwierdzenia.

Zmiany w interfejsie API

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

Poprawki błędów

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

Wersja 2.3.0-alpha01

4 marca 2020 r.

Publikacja androidx.lifecycle:lifecycle-*:2.3.0-alpha01 Wersja 2.3.0-alpha01 zawiera te zatwierdzenia.

Nowe funkcje

  • Nowy interfejs ViewTreeLifecycleOwner.get(View) API umożliwia pobieranie kontenera LifecycleOwner na podstawie instancji View. Aby poprawnie wypełnić to pole, musisz przejść na Aktywność 1.2.0-alpha01Fragment 1.3.0-alpha01. findViewTreeLifecycleOwner Rozszerzenie Kotlin jest dostępne w lifecycle-runtime-ktx. (aosp/1182361, aosp/1182956)
  • Dodano nowe sprawdzenie Lint, które ostrzega, gdy ustawiasz wartość null w przypadku elementu MutableLiveData zdefiniowanego w Kotlinie jako niepusty. Jest to dostępne, 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 zawiera TestLifecycleOwner implementujący LifecycleOwner i zapewniający bezpieczny wątkowo modyfikowalny obiekt Lifecycle. (aosp/1242438)

Poprawki błędów

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

Wersja 2.2.0

ViewModel-Savedstate w wersji 2.2.0

5 lutego 2020 r.

Publikacja androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0 Wersja 2.2.0 zawiera te zatwierdzenia.

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

Wersja 2.2.0

22 stycznia 2020 r.

Publikacja androidx.lifecycle:lifecycle-*:2.2.0 Wersja 2.2.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 2.1.0

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

Wersja 2.2.0-rc03

4 grudnia 2019 r.

Publikacja androidx.lifecycle:lifecycle-*:2.2.0-rc03 Wersja 2.2.0-rc03 zawiera te zmiany.

Poprawki błędów

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

Współpraca z osobami z zewnątrz

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

Zmiany zależności

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

Wersja 2.2.0-rc02

7 listopada 2019 r.

Publikacja androidx.lifecycle:lifecycle-*:2.2.0-rc02 Wersja 2.2.0-rc02 zawiera te zmiany.

Poprawki błędów

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

Wersja 2.2.0-rc01

23 października 2019 r.

Publikacja androidx.lifecycle:lifecycle-*:2.2.0-rc01 Wersja 2.2.0-rc01 zawiera te zmiany.

Poprawki błędów

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

Materiały zewnętrzne

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

Wersja 2.2.0-beta01

9 października 2019 r.

Publikacja androidx.lifecycle:lifecycle-*:2.2.0-beta01 Wersja 2.2.0-beta01 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono regresję wprowadzoną w Lifecycle 2.2.0-alpha05 w kolejności wywoływania metod ProcessLifecycleOwnerLifecycleOwner w przypadku działania przechodzącego w stan rozpoczęty i wznowiony na urządzeniach z Androidem 10. (aosp/1128132)
  • Naprawiliśmy regresję wprowadzoną w Lifecycle 2.2.0-alpha05, która powodowała NullPointerException podczas korzystania z wersji 2.0.0 lub 2.1.0 biblioteki lifecycle-process. (b/141536990)

Wersja 2.2.0-alpha05

18 września 2019 r.

Publikacja androidx.lifecycle:lifecycle-*:2.2.0-alpha05 Wersja 2.2.0-alpha05 zawiera te zmiany.

Poprawki błędów

  • Naprawiono warunek wyścigu w narzędziu do tworzenia danych LiveData w rutynach. b/140249349

Wersja 2.2.0-alpha04

5 września 2019 r.

Publikacja androidx.lifecycle:lifecycle-*:2.2.0-alpha04 Zatwierdzenia uwzględnione w tej wersji znajdziesz tutaj.

Nowe funkcje

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

Współpraca z osobami z zewnątrz

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

Wersja 2.2.0-alpha03

7 sierpnia 2019 r.

Publikacja androidx.lifecycle:lifecycle-*:2.2.0-alpha03 Zatwierdzenia uwzględnione 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ć wartość Fragment lub FragmentActivity do nowego konstruktora ViewModelProvider(ViewModelStoreOwner). (aosp/1009889)

Wersja 2.2.0-alpha02

2 lipca 2019 r.

Publikacja androidx.lifecycle:*:2.2.0-alpha02 Zatwierdzenia uwzględnione w tej wersji znajdziesz tutaj.

Zmiany w interfejsie API

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

Wersja 2.2.0-alpha01

7 maja 2019 r.

Publikacja androidx.lifecycle:*:2.2.0-alpha01 Zatwierdzenia uwzględnione w tej wersji znajdziesz tutaj.

Nowe funkcje

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

ViewModel-SavedState w wersji 1.0.0

Wersja 1.0.0

22 stycznia 2020 r.

Publikacja androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0 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 dodawanie do niego treści. Ten obiekt można otrzymać w konstruktorze klasy ViewModel, a fabryki domyślnie udostępniane przez klasy Fragment i AppCompatActivity automatycznie wstrzykną obiekt SavedStateHandle.
  • Dodano klasę AbstractSavedStateViewModelFactory. Umożliwia tworzenie niestandardowych fabryk dla obiektów ViewModel i zapewnianie im dostępu do obiektów SavedStateHandle.

ViewModel-Savedstate w wersji 1.0.0-rc03

4 grudnia 2019 r.

Publikacja androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03 Wersja 1.0.0-rc03 zawiera te zatwierdzenia.

Zmiany zależności

  • ViewModel SavedState w cyklu życia zależy teraz od cyklu życia 2.2.0-rc03.

Viewmodel-Savedstate w wersji 1.0.0-rc02

7 listopada 2019 r.

Publikacja androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc02 Wersja 1.0.0-rc02 zawiera te zmiany.

Zmiany zależności

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

ViewModel-SavedState w wersji 1.0.0-rc01

23 października 2019 r.

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01 zostaje opublikowana bez zmian w stosunku do wersji 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.

Publikacja androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01 Wersja 1.0.0-beta01 zawiera te zmiany.

Poprawki błędów

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

ViewModel-SavedState w wersji 1.0.0-alpha05

18 września 2019 r.

Publikacja androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha05 Wersja 1.0.0-alpha05 zawiera te zmiany.

Zmiany w interfejsie API

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

ViewModel-SavedState w wersji 1.0.0-alpha03

7 sierpnia 2019 r.

Publikacja androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03 Zatwierdzenia uwzględnione w tej wersji znajdziesz tutaj.

Zmiany powodujące niezgodność

ViewModel-SavedState w wersji 1.0.0-alpha02

2 lipca 2019 r.

Publikacja androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha02 Zatwierdzenia uwzględnione w tej wersji znajdziesz tutaj.

Nowe funkcje

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

Zmiany w interfejsie API

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

ViewModel-Savedstate w wersji 1.0.0-alpha01

13 marca 2019 r.

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

Nowe funkcje

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

Wersja 2.1.0

Ważne zmiany od wersji 2.0.0

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

Wersja 2.1.0

5 września 2019 r.

Publikacja androidx.lifecycle:lifecycle-*:2.1.0 Zatwierdzenia uwzględnione w tej wersji znajdziesz tutaj.

Wersja 2.1.0-rc01

2 lipca 2019 r.

androidx.lifecycle:*:2.1.0-rc01 zostaje opublikowana bez zmian w stosunku do wersji androidx.lifecycle:*:2.1.0-beta01. Zatwierdzenia uwzględnione w tej wersji znajdziesz tutaj.

Wersja 2.1.0-beta01

7 maja 2019 r.

Publikacja androidx.lifecycle:*:2.1.0-beta01 Zatwierdzenia uwzględnione w tej wersji znajdziesz tutaj.

Nowe funkcje

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

Wersja 2.1.0-alpha04

3 kwietnia 2019 r.

Publikacja androidx.lifecycle:*:2.1.0-alpha04 Zatwierdzenia uwzględnione w tej wersji znajdziesz tutaj.

Zmiany w interfejsie API

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

Wersja 2.1.0-alpha03

13 marca 2019 r.

Publikacja androidx.lifecycle:*:2.1.0-alpha03 Pełną listę zmian wprowadzonych w tej wersji znajdziesz tutaj.

Zmiany w interfejsie API

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

Wersja 2.1.0-alpha02

30 stycznia 2019 r.

Publikacja androidx.lifecycle 2.1.0-alpha02

Zmiany w interfejsie API

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

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował awarię instancji testowych ViewModel po wyczyszczeniu zawierającego elementu ViewModelStore. b/122273087

Wersja 2.1.0-alpha01

17 grudnia 2018 r.

Publikacja androidx.lifecycle 2.1.0-alpha01

Nowe funkcje

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

Wersja 2.0.0

Wersja 2.0.0

21 września 2018 r.

Biblioteka Lifecycle 2.0.0 została wydana z jedną poprawką błędu z 2.0.0-rc01 w ViewModel.

Poprawki błędów

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

Wersja 2.0.0-beta01

2 lipca 2018 r.

Poprawki błędów

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

Wersje sprzed Androida X

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

dependencies {
    def lifecycle_version = "1.1.1"

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

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

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

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

Wersja 1.1.1

21 marca 2018 r.

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

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

Wersja 1.1.0

22 stycznia 2018 r.

Zmiany w opakowaniu

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

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

Zmiany w interfejsie API

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