Cykl życia

Skuteczność komponentów uwzględniających cykl życia działania w odpowiedzi na zmianę stanu cyklu życia innego komponentu, takich jak działania i fragmenty. które pomagają w tworzeniu czyli prostszy kod i łatwiejszy w utrzymaniu.

Ta tabela zawiera wszystkie artefakty w grupie androidx.lifecycle.

Artefakt Wersja stabilna Kandydat do wydania Wersja Beta Wydanie alfa
cykl życia-* 2.8.5 - - 2.9.0-alfa02
cykl życia-widok modelu-kompozycja 2.8.5 - - 2.9.0-alfa02
Data ostatniej aktualizacji: 4 września 2024 r.

Deklarowanie zależności

Aby dodać zależność do cyklu życia, musisz dodać repozytorium Google Maven do swojego w projektach AI. Zapoznaj się z repozytorium Google Maven. .

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

Kotlin

Odlotowe

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

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

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

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

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

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

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

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

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

Kotlin

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

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

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

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

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

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

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

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

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

Java

Odlotowe

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

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

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

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

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

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

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

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

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

Kotlin

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

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

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

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

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

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

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

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

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

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

Opinia

Twoja opinia pomoże nam ulepszyć Jetpack. Daj nam znać, jeśli odkryjesz nowe problemy jak ulepszyć tę bibliotekę. Przyjrzyj się istniejące problemy w tej bibliotece, zanim utworzysz nową. Możesz zagłosować nad istniejącym problemem przez klikając przycisk gwiazdki.

Tworzenie nowego numeru

Zobacz dokumentację narzędzia Issue Tracker. .

Wersja 2.9

Wersja 2.9.0-alpha02

4 września 2024 r.

Usługa androidx.lifecycle:lifecycle-*:2.9.0-alpha02 została zwolniona. Wersja 2.9.0-alfa02 zawiera te zatwierdzenia.

Poprawki błędów

  • Z poziomu Cykl życia 2.8.5: zaktualizuj androidx.lifecycle.ReportFragmentreguły ProGuard, aby umożliwić zaciemnianie kodu . (ff898e1).

Treści tłumaczone przez użytkowników zewnętrznych

  • Przenieś zasób androidx.compose.ui.platform.LocalLifecycleOwner do wspólnego zestawu źródłowego (KMP). Dziękujemy Ivanowi Matkovowi z zespołu JetBrains za pomoc. (8cd5d03)
  • Z obszaru Cykl życia 2.8.5: przedstawiciel rozszerzenia SavedStateHandle.saveable` obsługuje teraz wartości dopuszczone do wartości null. Dziękujemy Romanowi Kalukiewiczowi za pomoc. (0D78ea6)

Wersja 2.9.0-alpha01

7 sierpnia 2024 r.

Usługa androidx.lifecycle:lifecycle-*:2.9.0-alpha01 została zwolniona. Wersja 2.9.0-alfa01 zawiera te zatwierdzenia.

Wiele platform Kotlin

  • Aplikacja lifecycle-testing jest teraz zgodna z KMP. (Iea41e).
  • Dodaj obsługę wieloplatformowego celu kotlin linuxArm64 (I139d3, b/338268719)

Nowe funkcje

  • Dostępny jest nowy artefakt KMP androidx.lifecycle:lifecycle-viewmodel-testing, który udostępnia klasę ViewModelScenario do niezależnego testowania modeli widoków. Obsługuje ona onCleared (wszystkie platformy) i SavedStateHandle (tylko Android). (337f68d, c9b3409, 9799a95c, b/264602919)
  • Tworzenie ViewModel przy użyciu ViewModelProvider jest teraz bezpieczne w wątku. Liczba usuniętych adnotacji: @MainThread. (Ifd978, b/237006831)

Zmiany interfejsu API

  • Dodaj funkcję fabryczną CreationExtras.Key(), aby uprościć tworzenie anonimowych obiektów CreationExtras.Key. (I970ee)
  • CreationExtras zawiera teraz przeciążenia operatorów podobne do map, co umożliwia idiomatyczne manipulowanie treścią w Kotlin. Umożliwia korzystanie z usług in, += i + w połączeniu z usługą CreationExtras. (IB4353)
  • CreationExtras implementuje teraz metody equals, hashCode i toString. (IB4353)
  • Usługa NewInstanceFactory jest teraz dostępna na komputerach JVM i na urządzeniach z Androidem. (D3D0892)
  • Wbudowana właściwość rozszerzenia do bezpiecznego udostępniania bazowej aplikacji w języku Kotlin w wersji 2.0 (I39df2)

Poprawki błędów

  • Usunęliśmy ręczne dodawanie informacji o dostępie do nowych interfejsów API platformy, ponieważ dzieje się to automatycznie przez modelowanie API w przypadku korzystania z R8 z pakietem AGP w wersji 7.3 lub nowszej (np. R8 w wersji 3.3) oraz wszystkich kompilacji z pakietem AGP 8.1 lub nowszym (np. D8 w wersji 8.1). Klientom, którzy nie korzystają z pakietu AGP, zalecamy zaktualizowanie go do wersji D8 w wersji 8.1 lub nowszej. Więcej szczegółów znajdziesz w tym artykule. (If6b4c, b/345472586)

Wersja 2.8

Wersja 2.8.5

4 września 2024 r.

Usługa androidx.lifecycle:lifecycle-*:2.8.5 została zwolniona. Wersja 2.8.5 zawiera te zatwierdzenia.

Poprawki błędów

  • Zaktualizuj androidx.lifecycle.ReportFragment reguły ProGuard, aby umożliwić zaciemnianie kodu . (ff898e1).

Treści tłumaczone przez użytkowników zewnętrznych

  • Osoba, której przekazano dostęp do rozszerzenia SavedStateHandle.saveable, obsługuje teraz wartości dopuszczone do wartości null. Dziękujemy Romanowi Kalukiewiczowi za pomoc. (0D78ea6)

Wersja 2.8.4

24 lipca 2024 r.

Usługa androidx.lifecycle:lifecycle-*:2.8.4 została zwolniona. Wersja 2.8.4 zawiera te zatwierdzenia.

Poprawki błędów

  • Funkcja LiveData.asFlow() teraz prawidłowo obsługuje przypadki, w których zwracany przepływ jest zakończony natychmiast po otrzymaniu wartości ustawionej już w LiveData (na przykład gdy używasz take(1)). (I9c566)
  • Realizacja funkcji Lifecycle*Effect ma teraz charakter idempotentny (tzn. jeśli element onStopOrDispose został wywołany z powodu zatrzymania cyklu życia, nie zostanie wywołany po raz drugi po usunięciu, chyba że cykl życia danych wróci do wartości STARTED). (I5f607, b/352364595)

Wersja 2.8.3

1 lipca 2024 r.

Usługa androidx.lifecycle:lifecycle-*:2.8.3 została zwolniona. Wersja 2.8.3 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem ze zgodnością wsteczną cyklu życia 2.8 z Compose w wersji 1.6.0 i starszymi podczas korzystania z zmniejszania kodu. (Aosp/3133056, b/346808608)

Wersja 2.8.2

12 czerwca 2024 r.

Usługa androidx.lifecycle:lifecycle-*:2.8.2 została zwolniona. Wersja 2.8.2 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiliśmy błędy (CompositionLocal LocalLifecycleOwner not present) występujące podczas używania funkcji Cykl życia 2.8.X z funkcją Compose w wersji 1.6.X lub starszej. Z wersji 2.8.2 możesz teraz korzystać z dowolnej wersji Compose bez konieczności obejścia problemów. (Aosp/3105647, b/336842920)
  • ViewModelProvider nie będzie już ulegać awarii podczas łączenia poprzednich wersji zależności cyklu życia compileOnly z wersjami 2.8 lub nowszymi, aby rozwiązać problemy z bibliotekami takimi jak LeakCanary. (I80383, b/341792251)

Wersja 2.8.1

29 maja 2024 r.

Usługa androidx.lifecycle:lifecycle-*:2.8.1 została zwolniona. Wersja 2.8.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Funkcja lifecycle-viewmodel-compose ma teraz wspólną zależność tylko od compose-runtime, usuwając swoją wspólną zależność od compose-ui. Artefakt Androida zachowuje zgodność compose-ui. (Aosp/3079334, b/339562627)
  • Integracja aplikacji ViewModel z funkcją saveable za pomocą przedstawicieli usługi wykorzystuje teraz nazwę klasy jako część automatycznie wygenerowanego klucza. Pozwala to uniknąć konfliktów w sytuacji, gdy wiele klas używa tego samego obiektu SavedStateHandle. (Aosp/3063463).

Wersja 2.8.0

14 maja 2024 r.

Usługa androidx.lifecycle:lifecycle-*:2.8.0 została zwolniona. Wersja 2.8.0 zawiera te zatwierdzenia.

Ważne zmiany wprowadzone od wersji 2.7.0

  • Usługa LocalLifecycleOwner została przeniesiona z interfejsu tworzenia wiadomości do lifecycle-runtime-compose, dzięki czemu jej pomocnicze interfejsy API oparte na Compose można używać poza tym interfejsem.
  • Artefakt lifecycle-runtime-compose zawiera teraz interfejsy API dropUnlessResumed i dropUnlessStarted, które umożliwiają pomijanie kliknięć lub innych zdarzeń, nawet gdy wartość LifecycleOwner spadnie poniżej wartości Lifecycle.State. Możesz na przykład użyć tej funkcji w narzędziu Nawigacja, aby uniknąć obsługi zdarzeń kliknięcia po rozpoczęciu przejścia na inny ekran: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
  • ViewModel.viewModelScope jest teraz parametrem konstruktora, który można zastępować, dzięki czemu możesz wprowadzić własnego dyspozytora i SupervisorJob() lub zastąpić wartość domyślną za pomocą parametru backgroundScope dostępnego w usłudze 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)
    }
    
  • Język ViewModel został przepisany w języku Kotlin i używa teraz AutoClosable zamiast Closeable. Obsługuje teraz dodawanie obiektów AutoCloseable za pomocą metody key, która umożliwia ich pobieranie przez getCloseable().

  • Wywołanie LifecycleStartEffect i LifecycleResumeEffect bez klucza jest teraz błędem zgodnie z tą samą konwencją co interfejs API DisposableEffect powielany przez te interfejsy API.

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

  • Rozszerzenia kotlin (lifecycle-livedata-core-ktx) zostały przeniesione do modułu lifecycle-livedata-core.

  • Element NullSafeMutableLiveData został zrefaktoryzowany, aby uniknąć wielu wyników fałszywie pozytywnych.

Cykl życia Kotlin – zgodność wieloplatformowa

Podstawowe interfejsy API cyklu życia w systemach Lifecycle, LifecycleOwner, LifecycleObserver, Lifecycle.State, Lifecycle.Event i LifecycleRegistry są teraz dostarczane w artefaktach zgodnych z platformą wieloplatformową Kotlin.

Artefakty, których to dotyczy:

  • lifecycle-common przenosi większość interfejsów API do common i obsługuje jvm oraz iOS nie tylko na Androidzie.
  • lifecycle-runtime przenosi większość interfejsów API do common i obsługuje jvm oraz iOS nie tylko na Androidzie.
  • Plik lifecycle-runtime-ktx jest teraz pusty, a wszystkie interfejsy API zostały przeniesione do folderu lifecycle-runtime.
  • lifecycle-runtime-compose przenosi wszystkie interfejsy API do common i wysyła artefakt Androida zgodnie z obsługą wieloplatformową androidx.compose.

Zgodność modelu ViewModel Kotlin na wielu platformach

Artefakt i interfejsy API lifecycle-viewmodel, takie jak ViewModel, ViewModelStore, ViewModelStoreOwner i ViewModelProvider, są teraz dostarczane w artefaktach zgodnych z platformą wieloplatformową Kotlin.

Aby uwzględnić tę zmianę, metody, takie jak te w systemie ViewModelProvider, które wymagały wykonania java.lang.Class<T>, mają teraz równoważną metodę, która wymaga kotlin.reflect.KClass<T>.

Zgodność plików binarnych na Androidzie została zachowana, ale podczas porównywania platformy interfejsu API Androida z wspólną platformą API wystąpiło kilka istotnych zmian:

  • Tworzenie instancji ViewModelProvider odbywa się teraz za pomocą metod ViewModelProvider.create(), a nie bezpośrednio przy użyciu jego konstruktora.
  • Aplikacje ViewModelProvider.NewInstanceFactory i ViewModelProvider.AndroidViewModelFactory są dostępne tylko na Androidzie.
    • Zalecamy używanie fabryk niestandardowych, które rozpoczynają się od ViewModelProvider.Factory, i używają metody create, która wymaga CreationExtras lub DSL viewModelFactory Kotlin.
  • Jeśli na platformach innych niż JVM (innych niż JVM) użyjesz ViewModelProvider bez niestandardowej fabryki, otrzymasz UnsupportedOperationException. Na platformach JVM zgodność jest zachowywana dzięki użyciu nieargumentowego konstruktora ViewModel, jeśli nie podano niestandardowej fabryki.
  • Parametr viewModelScope zwraca wartość EmptyCoroutineContext w przypadku platform, na których interfejs 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 nie tylko na Androidzie.
  • Plik lifecycle-viewmodel-ktx jest teraz pusty, a wszystkie interfejsy API zostały przeniesione do folderu lifecycle-viewmodel.
  • lifecycle-viewmodel-compose przenosi wszystkie interfejsy API do common i wysyła artefakt Androida zgodnie z obsługą wieloplatformową androidx.compose.

Zmiany w działaniu

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

Znane problemy

Wersja 2.8.0-rc01

1 maja 2024 r.

Usługa androidx.lifecycle:lifecycle-*:2.8.0-rc01 została zwolniona. Wersja 2.8.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że profil podstawowy klas lifecycle-common nie był prawidłowo spakowany. Są one teraz połączone w lifecycle-runtime AAR. (Aosp/3038274, b/322382422)
  • Naprawiliśmy niezamierzoną zmianę kolejności, w jakiej instancji AutoCloseable dołączone do modelu widoku danych – poprzednia kolejność: addCloseable(String, AutoCloseable), potem addClosable(AutoCloseable), a następnie onCleared(). (Aosp/3041632).
  • Popraw domyślne działanie tworzenia w viewModelScope w środowisku natywnym i środowisku JVM. (Aosp/3039221).

Treści tłumaczone przez użytkowników zewnętrznych

  • Dziękujemy Victorowi Kroppowi za usprawnienie sprawdzania wątku głównego na pulpicie JVM. (Aosp/3037116).

Wersja 2.8.0-beta01

17 kwietnia 2024 r.

Usługa androidx.lifecycle:lifecycle-*:2.8.0-beta01 została zwolniona. Wersja 2.8.0-beta01 zawiera te zatwierdzenia.

Nowe funkcje

  • Artefakt lifecycle-runtime-compose jest teraz zgodny z platformą Kotlin Multiplatform – jego kod zostaje przeniesiony do common i wysyła artefakt Androida zgodny z obsługą wieloplatformową androidx.compose. (If7a71, I4f4a0, b/331769623)

Wersja 2.8.0-alpha04

3 kwietnia 2024 r.

Usługa androidx.lifecycle:lifecycle-*:2.8.0-alpha04 została zwolniona. Wersja 2.8.0-alfa04 zawiera te zatwierdzenia.

Nowe funkcje

  • Artefakt lifecycle-viewmodel-compose jest teraz zgodny z platformą Kotlin Multiplatform – jego kod zostaje przeniesiony do common i wysyła artefakt Androida zgodny z obsługą wieloplatformową androidx.compose. Zgodnie z tą zmianą metoda kompozycyjna viewModel akceptuje teraz oprócz metody java.lang.Class obiekty KClass. (b/330323282)

Poprawki błędów

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

Aktualizacja zależności

  • Artefakt lifecycle-viewmodel-compose korzysta teraz z funkcji Compose 1.6.0.
  • Cykl życia zależy teraz od instalatora profilu 1.3.1.

Wersja 2.8.0-alfa03

20 marca 2024 r.

Usługa androidx.lifecycle:lifecycle-*:2.8.0-alpha03 została zwolniona. Wersja 2.8.0-alfa03 zawiera te zatwierdzenia.

Nowe funkcje

  • ViewModel.viewModelScope jest teraz parametrem konstruktora, który można zastępować, dzięki czemu możesz wprowadzić własnego dyspozytora i SupervisorJob() lub zastąpić wartość domyślną za pomocą parametru backgroundScope dostępnego w usłudze 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 platformą Kotlin – wieloplatformowa

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

Aby uwzględnić tę zmianę, metody, takie jak te w systemie ViewModelProvider, które wymagały wykonania java.lang.Class<T>, mają teraz równoważną metodę, która wymaga kotlin.reflect.KClass<T>.

Zgodność plików binarnych na Androidzie została zachowana, ale podczas porównywania platformy interfejsu API Androida z wspólną platformą API wystąpiło kilka istotnych zmian:

  • Tworzenie instancji ViewModelProvider odbywa się teraz za pomocą metod ViewModelProvider.create(), a nie bezpośrednio przy użyciu jego konstruktora.
  • Aplikacje ViewModelProvider.NewInstanceFactory i ViewModelProvider.AndroidViewModelFactory są dostępne tylko na Androidzie.
    • Zalecamy używanie fabryk niestandardowych, które rozpoczynają się od ViewModelProvider.Factory, i używają metody create, która wymaga CreationExtras lub DSL viewModelFactory Kotlin.
  • Jeśli na platformach innych niż JVM (innych niż JVM) użyjesz ViewModelProvider bez niestandardowej fabryki, otrzymasz UnsupportedOperationException. Na platformach JVM zgodność jest zachowywana dzięki użyciu nieargumentowego konstruktora ViewModel, jeśli nie podano niestandardowej fabryki.
  • Parametr viewModelScope zwraca wartość EmptyCoroutineContext w przypadku platform, na których interfejs Dispatchers.Main jest niedostępny (np. Linux).

Zmiany w działaniu

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

Poprawki błędów

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

Treści tłumaczone przez użytkowników zewnętrznych

  • Usługa LocalLifecycleOwner została przeniesiona z interfejsu Compose do trybu cyklu życia środowiska wykonawczego i tworzenia środowiska wykonawczego, dzięki czemu jej pomocnicze interfejsy API oparte na Compose mogą być używane poza interfejsem Compose. Dziękujemy, Jake Wharton, za pomoc. (I6c41b, b/328263448)

Wersja 2.8.0-alpha02

21 lutego 2024 r.

Usługa androidx.lifecycle:lifecycle-*:2.8.0-alpha02 została zwolniona. Wersja 2.8.0-alfa02 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodaliśmy interfejsy API dropUnlessResumed i dropUnlessStarted, które umożliwiają pomijanie kliknięć lub innych zdarzeń nawet po spadku wartości LifecycleOwner poniżej wartości Lifecycle.State. Tego ustawienia można na przykład użyć w funkcji Nawigacja, aby uniknąć obsługi zdarzeń kliknięcia po rozpoczęciu przejścia na inny ekran: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) } (Icba83, b/317230685)

Konwersje Kotlin

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

Zgodność z platformą Kotlin – wieloplatformowa

  • Podstawowe interfejsy API cyklu życia w systemach Lifecycle, LifecycleOwner, LifecycleObserver, Lifecycle.State, Lifecycle.Event i LifecycleRegistry są teraz dostarczane w artefaktach zgodnych z platformą wieloplatformową Kotlin. (b/317249252)

Zmiany interfejsu API

  • Wywołanie LifecycleStartEffect i LifecycleResumeEffect bez klucza jest teraz błędem zgodnie z tą samą konwencją co interfejs API DisposableEffect powielany przez te interfejsy API. (Ib0e0c, b/323518079)
  • ViewModel używa teraz AutoCloseable zamiast Closeable. Jest to zmiana zgodna wstecznie. (I27f8e, b/214568825)
  • Wycofano pole LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) na rzecz LiveData.toPublisher(lifecycleOwner). (Iabe29, b/262623005)

Treści tłumaczone przez użytkowników zewnętrznych

  • Dziękujemy Ivanowi Matkovowi z firmy Jetbrains za pomoc w przeniesieniu cyklu życia do platformy Kotlin. (aosp/2926690, I0c5ac, If445d)

Wersja 2.8.0-alpha01

24 stycznia 2024 r.

Usługa androidx.lifecycle:lifecycle-*:2.8.0-alpha01 została zwolniona. Wersja 2.8.0-alfa01 zawiera te zatwierdzenia.

Nowe funkcje

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

Wersja 2.7

Wersja 2.7.0

10 stycznia 2024 r.

Usługa androidx.lifecycle:lifecycle-*:2.7.0 została zwolniona. Wersja 2.7.0 zawiera te zatwierdzenia.

Ważne zmiany wprowadzone od wersji 2.6.0

  • TestLifecycleOwner zawiera teraz funkcję zawieszania setCurrentState(), która zapewnia, że zmiana stanu i wszystkie wywołania zwrotne LifecycleObserver są wykonywane przed zwróceniem. W szczególności w przeciwieństwie do bezpośredniego ustawienia właściwości currentState nie używa ona właściwości runBlocking, dzięki czemu można jej bezpiecznie używać zgodnie ze współrzędną, taką jak runTest.
  • Rozszerzenia LiveData funkcji map i switchMap odzwierciedlają teraz sposób działania distinctUntilChanged – jeśli LiveData ma ustawioną wartość value, funkcja map/switchMap zostanie natychmiast wywołana w celu wypełnienia parametru value zwróconego pola LiveData. Dzięki temu wartość początkowa zostanie ustawiona jako część pierwszej kompozycji (gdy zostanie użyta z parametrem observeAsState()), ale nie zmieni sposobu obserwacji – aktualizacje wartości ze źródła LiveData będą nadal stosowane dopiero wtedy, gdy zaczniesz obserwować wartość LiveData.
  • W tej wersji rozwiązano problem, który powodował, że SavedStateHandle nie przywracał prawidłowo niestandardowych klas Parcelable po śmierci i odtworzeniu danych. Z powodu informacji o typach, które są tracone przez platformę Androida, tablice niestandardowych obiektów Parcelable wymagają dodatkowej pracy (ręcznego tworzenia tablicy typu właściwego typu). W dokumentacji elementów get, getLiveData i getStateFlow wyraźnie to ograniczenie jest opisane.
  • Reguły ProGuard Keep powiązane z usługą LifecycleObserver zostały usunięte. Oznacza to, że kod ProGuard, który chce korzystać z interfejsów API w ramach refleksji (np. używa długiej, wycofanej adnotacji @OnLifecycleEvent), będzie musiał stworzyć własne reguły Keep dla konkretnego przypadku użycia.

Dostrzegalność zdarzeń cyklu życia

  • Zamiast korzystać z LifecycleEventObserver, możesz teraz obserwować element Flow o wartości Lifecycle.Event za pomocą metody rozszerzenia Lifecycle.asFlow().
  • Użytkownicy Jetpack Compose mogą teraz używać LifecycleEventEffect do uruchamiania efektów ubocznych Compose opartych na Lifecycle.Event.
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
    viewModel.refreshData()
  }
  // …
}
  • Użytkownicy Jetpack Compose mogą używać LifecycleStartEffect i LifecycleResumeEffect do obsługi par zdarzeń – odpowiednio rozpoczęte i wznawiane oraz wstrzymane. Ten interfejs API odzwierciedla ten z tabeli DisposableEffect i nadaje się do przypadków, gdy zmiana wprowadzona w wyniku wzrostu trzeba cofnąć, a potem ją cofnąć.
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleStartEffect(viewModel) {
    val timeTracking = viewModel.startTrackingTimeOnScreen()
    onStopOrDispose {
      timeTracking.stopTrackingTimeOnScreen()
    }
  }
  // …
}

Więcej informacji znajdziesz w sekcji Uruchamianie kodu w zdarzeniach cyklu życia.

Dostrzegalność stanu cyklu życia

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

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

Wersja 2.7.0-rc02

13 grudnia 2023 r.

Usługa androidx.lifecycle:lifecycle-*:2.7.0-rc02 została zwolniona. Wersja 2.7.0-rc02 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że usługa SavedStateHandle nie przywracała prawidłowo niestandardowych klas Parcelable po śmierci i odtworzeniu zdarzenia. Z powodu informacji o typach, które są tracone przez platformę Androida, tablice niestandardowych obiektów Parcelable wymagają dodatkowej pracy (ręcznego tworzenia tablicy typu właściwego typu). W dokumentacji elementów get, getLiveData i getStateFlow wyraźnie to ograniczenie jest opisane. (I0B55a)

Wersja 2.7.0-rc01

15 listopada 2023 r.

Usługa androidx.lifecycle:lifecycle-*:2.7.0-rc01 została zwolniona. Wersja 2.7.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

  • Mechanizmy LifecycleStartEffect i LifecycleResumeEffect usuwają i ponownie tworzą blok efektu w przypadku zmiany parametru LifecycleOwner. (IA25c6).

Wersja 2.7.0-beta01

1 listopada 2023 roku

Pakiet androidx.lifecycle:lifecycle-*:2.7.0-beta01 został udostępniony bez zmian. Wersja 2.7.0-beta01 zawiera te zatwierdzenia.

  • Zwiększenie wersji beta – brak istotnych zmian w tej wersji produkcyjnej.

Wersja 2.7.0-alpha03

18 października 2023 r.

Usługa androidx.lifecycle:lifecycle-*:2.7.0-alpha03 została zwolniona. Wersja 2.7.0-alfa03 zawiera te zatwierdzenia.

Nowe funkcje

  • lifecycle-runtime-testing zawiera teraz nowy mechanizm sprawdzania lint, który pozwala uniknąć ustawiania elementu Lifecycle.State obiektu TestLifecycleOwner przy użyciu pola currentState wewnątrz współprogramu. Sprawdzanie licencji obecnie sugeruje zawieszanie setCurrentState, co umożliwia ustawienie Lifecycle.State bez blokowania. (Icf728, b/297880630)

Poprawki błędów

  • Rozwiązaliśmy problem z funkcją LiveData.switchMap, który powodował, że zwrócenie tego samego wystąpienia LiveData zarówno podczas pierwszego wywołania, jak i kolejnego wywołania uniemożliwiało dodanie wystąpienia LiveData jako źródła. (Ibedcba7)

Wersja 2.7.0-alpha02

6 września 2023 r.

Usługa androidx.lifecycle:lifecycle-*:2.7.0-alpha02 została zwolniona. Wersja 2.7.0-alfa02 zawiera te zatwierdzenia.

Nowe funkcje

  • TestLifecycleOwner zawiera teraz funkcję zawieszania setCurrentState(), która umożliwia użytkownikom korzystanie z TestLifecycleOwner przy użyciu współrzędu, takiego jak runTest. (I329de, b/259344129)

Zmiany interfejsu API

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

Zmiany w działaniu

  • Rozszerzenia LiveData.map() i LiveData.switchMap() ustawiają teraz wartość value zwróconego kodu LiveData, jeśli poprzedni LiveData miał ustawioną wartość. Dzięki temu wynikowe dane LiveData w Jetpack Compose mają prawidłowy stan początkowej kompozycji. (I91d2b, b/269479952)
  • Urządzenie addCloseable() użytkownika ViewModel zamyka teraz Closeable, jeśli ViewModel otrzymał(a) już połączenie z numerem onCleared(). (I4712e, b/280294730)

Poprawki błędów

  • Z cyklu życia 2.6.2: naprawiono błąd polegający na tym, że element SavedStateHandle nie był prawidłowo przywracany po śmierci procesu w przypadku przywrócenia stanu, wywołano save() bez faktycznego zapisania stanu w elemencie nadrzędnym SavedStateRegistry, po czym stan został przywrócony z powrotem. Poprawia to interakcję między rememberSaveable a NavHost w narzędziu Nawigacja. (Aosp/2729289).

Wersja 2.7.0-alpha01

26 lipca 2023 r.

Usługa androidx.lifecycle:lifecycle-*:2.7.0-alpha01 została zwolniona. Wersja 2.7.0-alfa01 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • Funkcja Lifecycle.State jest teraz obserwowalna przez funkcję Lifecycle.currentStateFlow, która zwraca StateFlow, gdzie value to bieżący Lifecycle.State. (Ib212d, b/209684871)
  • Elementy Lifecycle.Event można teraz obserwować jako Flow za pomocą Lifecycle.asFlow(). (If2c0f, b/176311030)
  • Dodano interfejs API LifecycleResumeEffect, który umożliwia uruchamianie reguł tworzenia SideEffect na podstawie wywołań zwrotnych zdarzeń Lifecycle.Event.ON_RESUME i Lifecycle.Event.ON_PAUSE. (I60386, b/235529345)
  • Dodano interfejs API LifecycleStartEffect do uruchamiania elementów typu SideEffect na podstawie wywołań zwrotnych zdarzeń Lifecycle.Event.ON_START i Lifecycle.Event.ON_STOP. (I5a8d1, b/235529345)
  • Dodano interfejs API LifecycleEventEffect, który umożliwia uruchamianie funkcji tworzenia wiadomości SideEffect na podstawie reguły Lifecycle.Event. (IC9794, b/235529345)
  • Dodano rozszerzenie Lifecycle.collectAsState(), aby bezpośrednio udostępniać aplikację Lifecycle.State jako Utwórz State. Jest to odpowiednik (i krótsza alternatywa) funkcji lifecycle.currentStateFlow.collectAsState(). (I11015, b/235529345)

Poprawki błędów

  • Rozszerzenie LiveData.distinctUntilChanged() ustawia teraz value zwracanych wartości LiveData, jeśli poprzedni LiveData ma ustawioną wartość. Nie zmieni to sposobu obserwacji – zaktualizowane wartości ze źródła LiveData będą nadal stosowane dopiero wtedy, gdy zaczniesz obserwować wartość LiveData zwracaną przez funkcję distinctUntilChanged(). (IB482f)
  • Reguły ProGuard Keep powiązane z usługą LifecycleObserver zostały usunięte. Oznacza to, że kod ProGuard, który chce korzystać z interfejsów API przez refleksję, będzie musiał opracować własne reguły Keep dla konkretnego przypadku użycia. (Ia12fd).

Wersja 2.6

Wersja 2.6.2

6 września 2023 r.

Usługa androidx.lifecycle:lifecycle-*:2.6.2 została zwolniona. Wersja 2.6.2 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że funkcja SavedStateHandle nie była prawidłowo przywracana po śmierci procesu w przypadku przywrócenia stanu, wywołania save() bez faktycznego zapisania stanu w elemencie nadrzędnym SavedStateRegistry, a potem stan został przywrócony z powrotem. Poprawia to interakcję między rememberSaveable a NavHost w narzędziu Nawigacja. (Aosp/2729289).

Wersja 2.6.1

22 marca 2023 r.

Usługa androidx.lifecycle:lifecycle-*:2.6.1 została zwolniona. Wersja 2.6.1 zawiera te zatwierdzenia.

Aktualizacje zależności

Wersja 2.6.0

8 marca 2023 r.

Usługa androidx.lifecycle:lifecycle-*:2.6.0 została zwolniona. Wersja 2.6.0 zawiera te zatwierdzenia.

Ważne zmiany wprowadzone od wersji 2.5.0

  • LiveData zawiera teraz nową właściwość isInitialized, która wskazuje, czy w elemencie LiveData była kiedykolwiek ustawiona jawna wartość. Pozwala to rozróżnić funkcję liveData.value zwracającą null, ponieważ nigdy nie ustawiono żadnej wartości lub jawną wartość null.
  • MediatorLiveData zawiera teraz konstruktor umożliwiający ustawienie wartości początkowej.
  • Do wersji StateFlow i Flow w collectAsStateWithLifecycle() dodaliśmy nowe rozszerzenie, które zbiera dane z przepływów i reprezentuje jego najnowszą wartość jako stan tworzenia wiadomości z uwzględnieniem cyklu życia.
  • Metody Lifecycle.launchWhenX i Lifecycle.whenX zostały wycofane, ponieważ używanie wstrzymania dyspozytora może w niektórych przypadkach prowadzić do marnowania zasobów. Zaleca się użycie Lifecycle.repeatOnLifecycle. Aby uzyskać więcej informacji na temat jednorazowego zawieszenia pracy, zapoznaj się z tym wyjaśnieniem wyjaśniającym, dlaczego to ustawienie jest faktycznie niebezpieczne.
  • Konwersja Kotlin – duża liczba klas cyklu życia została przekonwertowana na Kotlin. Wszystkie przekonwertowane klasy zachowują zgodność binarną z poprzednimi wersjami. W przypadku tych klas wprowadzono zmiany w przypadku zajęć napisanych w języku Kotlin, które są niezgodne ze źródłem: ViewTreeLifecycleOwner, LiveDataReactiveStreams, HasDefaultViewModelProviderFactory, ViewTreeViewModelStoreOwner, Transformations, ViewModelStoreOwner, LifecycleOwner

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

Cykl życia 2.5 Cykl życia 2.5 (KTX) Cykl życia 2.6
Transformations.switchMap(liveData) {...} liveData.switchMap {...} liveData.switchMap {...}
Transformations.map(liveData) {...} liveData.map {...} liveData.map {...}
Transformations.distinctUntilChanged(liveData) {...} liveData.distinctUntilChanged{...} liveData.distinctUntilChanged{...}
LiveDataReactiveStreams.fromPublisher(publisher) publisher.toLiveData() publisher.toLiveData()
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) liveData.toPublisher(lifecycleOwner) liveData.toPublisher(lifecycleOwner)
override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory override val defaultViewModelProviderFactory = factory
override fun getDefaultViewModelCreationExtras(): CreationExtras = extras override fun getDefaultViewModelCreationExtras(): CreationExtras = extras override val defaultViewModelProviderCreationExtras = extras
ViewTreeLifecycleOwner.set(view, owner) ViewTreeLifecycleOwner.set(view, owner) view.setViewTreeLifecycleOwner(owner)
ViewTreeLifecycleOwner.get(view) view.findViewTreeLifecycleOwner() view.findViewTreeLifecycleOwner()
override fun getViewModelStore(): ViewModelStore = store override fun getViewModelStore(): ViewModelStore = store override val viewModelStore: ViewModelStore = store
override fun getLifecycle(): Lifecycle = registry override fun getLifecycle(): Lifecycle = registry override val lifecycle: Lifecycle get() = registry
  • Wartość null metody onChanged dla metody Observer utworzonej w Kotlin odpowiada teraz wartości zerowej typu ogólnego. Jeśli chcesz, aby Observer.onChanged() akceptowała typ dopuszczający wartości null, musisz utworzyć instancję Observer z typem dopuszczającym wartości null.
  • Te zajęcia zostały też przekonwertowane na Kotlin, ale pozostają zgodne ze źródłem: DefaultLifecycleObserver, LifecycleEventObserver, Lifecycle, LifecycleRegistry, LifecycleObserver, ViewModelStore, AndroidViewModel, AbstractSavedStateViewModelFactory, LifecycleService, ServiceLifecycleDispatcher i ProcessLifecycleOwner

Wersja 2.6.0-rc01

22 lutego 2023 roku

Usługa androidx.lifecycle:lifecycle-*:2.6.0-rc01 została zwolniona. Wersja 2.6.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozszerzenie LiveData.distinctUntilChanged() ustawia teraz value zwracanych wartości LiveData, jeśli poprzedni LiveData ma ustawioną wartość. Nie zmieni to sposobu obserwacji – zaktualizowane wartości ze źródła LiveData będą nadal stosowane dopiero wtedy, gdy zaczniesz obserwować wartość LiveData zwracaną przez funkcję distinctUntilChanged(). (IB482f)

Wersja 2.6.0-beta01

8 lutego 2023 r.

Usługa androidx.lifecycle:lifecycle-*:2.6.0-beta01 została zwolniona. Wersja 2.6.0-beta01 zawiera te zatwierdzenia.

Konwersje Kotlin

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

Wersja 2.6.0-alpha05

25 stycznia 2023 r.

Usługa androidx.lifecycle:lifecycle-*:2.6.0-alpha05 została zwolniona. Wersja 2.6.0-alfa05 zawiera te zatwierdzenia.

Konwersje Kotlin

  • Transformations jest teraz napisany w języku Kotlin. Jest to niekompatybilna zmiana źródła w przypadku klas napisanych w Kotlin, które używały bezpośrednio składni takiej jak Transformations.map – kod Kotlin musi teraz używać składni metody rozszerzenia Kotlin, która wcześniej była dostępna tylko w przypadku korzystania z lifecycle-livedata-ktx. W języku programowania Java wersje tych metod, które korzystają z metody androidx.arch.core.util.Function, są wycofywane i zastępowane wersjami, które korzystają z metody Function1 Kotlin. Ta zmiana zachowuje zgodność plików binarnych. (I8e14f).
  • ViewTreeViewModelStoreOwner jest teraz napisany w języku Kotlin. Jest to niekompatybilna zmiana źródła dla klas napisanych w Kotlin. Aby ustawić i znaleźć wcześniej ustawionego właściciela, musisz bezpośrednio zaimportować i użyć metod rozszerzenia Kotlin w View z androidx.lifecycle.setViewTreeViewModelStoreOwner i androidx.lifecycle.findViewTreeViewModelStoreOwner. Jest on zgodny z plikami binarnymi i pozostaje kompatybilny ze źródłem dla implementacji napisanych w języku programowania Java. (Ia06d8, Ib22d8, b/240298691)
  • Interfejs HasDefaultViewModelProviderFactory jest teraz napisany w języku Kotlin. Jest to niekompatybilna zmiana źródła w przypadku klas napisanych w Kotlin. Muszą one teraz zastąpić właściwości defaultViewModelProviderFactory i defaultViewModelCreationExtras, zamiast implementować odpowiadające im funkcje. (Iaed9c, b/240298691)
  • Observer jest teraz napisany w języku Kotlin. Metoda onChanged() używa teraz nazwy value jako parametru. (Iffef2, I4995e, b/240298691)
  • AndroidViewModel, AbstractSavedStateViewModelFactory, LifecycleService, ServiceLifecycleDispatcher i ProcessLifecycleOwner są teraz napisane w języku Kotlin (I2e771, Ibae40, I160d7, I08884, I1cda7, b/240298691)

Wersja 2.6.0-alpha04

11 stycznia 2023 r.

Usługa androidx.lifecycle:lifecycle-*:2.6.0-alpha04 została zwolniona. Wersja 2.6.0-alfa04 zawiera te zatwierdzenia.

Nowe funkcje

  • LiveData zawiera teraz nową właściwość isInitialized, która wskazuje, czy w elemencie LiveData była kiedykolwiek ustawiona jawna wartość. Pozwala to rozróżnić funkcję liveData.value zwracającą null, ponieważ nigdy nie ustawiono żadnej wartości lub jawną wartość null. (IBD018).

Zmiany interfejsu API

  • Interfejsy API collectAsStateWithLifecycle() w lifecycle-runtime-compose nie są już w wersji eksperymentalnej. (I09d42, b/258835424)
  • Metody Lifecycle.launchWhenX i Lifecycle.whenX zostały wycofane, ponieważ używanie wstrzymania dyspozytora może w niektórych przypadkach prowadzić do marnowania zasobów. Zaleca się użycie Lifecycle.repeatOnLifecycle. (Iafc54, b/248302832)

Konwersje Kotlin

  • ViewTreeLifecycleOwner jest teraz napisany w języku Kotlin. Jest to niekompatybilna zmiana źródła dla klas napisanych w Kotlin. Aby ustawić i znaleźć wcześniej ustawionego właściciela, musisz bezpośrednio zaimportować i użyć metod rozszerzenia Kotlin w View z androidx.lifecycle.setViewTreeLifecycleOwner i androidx.lifecycle.findViewTreeLifecycleOwner. Zastępuje to poprzednie rozszerzenie Kotlin w lifecycle-runtime-ktx. Jest on zgodny z plikami binarnymi i pozostaje kompatybilny ze źródłem dla implementacji napisanych w języku programowania Java. (I8a77a, I5234e, b/240298691)
  • LiveDataReactiveStreams jest teraz napisany w języku Kotlin. Rozszerzenia Kotlin, które były wcześniej dostępne w lifecycle-reactivestreams-ktx, zostały przeniesione do modułu lifecycle-reactivestreams i są głównym narzędziem do tworzenia kodu napisanego w języku Kotlin. Jest to niekompatybilna zmiana źródła w przypadku kodu napisanego w Kotlin, jeśli nie korzystasz jeszcze z interfejsów API metody rozszerzenia Kotlin. (I2b1b9, I95d22, b/240298691)
  • DefaultLifecycleObserver, LifecycleEventObserver, Lifecycle, LifecycleRegistry, LifecycleObserver i ViewModelStore są teraz napisane w języku Kotlin (Iadffd, (I60034, I8c52c, I9593d, I01fe1, I59/a238}, I59/238},

Poprawki błędów

  • SavedStateHandle nie ulega już awarii z ClassCastException przy wywołaniu get() z nieprawidłową klasą typu. (I6ae7c).

Wersja 2.6.0-alpha03

24 października 2022 r.

Usługa androidx.lifecycle:lifecycle-*:2.6.0-alpha03 została zwolniona. Wersja 2.6.0-alfa03 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, ż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 interfejs LifecycleRegistry.moveToState() zawierają teraz bardziej przydatne komunikaty o błędach, które informują deweloperów o komponencie powodującym błąd. (Idf4b2, b/244910446)

Wersja 2.6.0-alpha02

7 września 2022 roku

Usługa androidx.lifecycle:lifecycle-*:2.6.0-alpha02 została zwolniona. Wersja 2.6.0-alfa02 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • MediatorLiveData zawiera teraz konstruktor umożliwiający ustawienie wartości początkowej. (Ib6cc5, b/151244085)

Poprawki błędów

  • Artefakty Lifecycle zawierają teraz ograniczenia, które gwarantują, że wszystkie współzależne artefakty cyklu życia używają tej samej wersji, co powoduje automatyczne uaktualnienie innych zależności po uaktualnieniu. b/242871265
  • FlowLiveData.asFlow() tworzy teraz callbackFlow, zamiast używać własnej implementacji Channel, aby zagwarantować bezpieczeństwo wątków i zachowanie kontekstu. (I4a8b2, b/200596935)
  • Funkcja asLiveData w FlowLiveData zachowa teraz początkową wartość parametru StateFlow podczas tworzenia nowy obiekt LiveData. (I3f530, b/157380488)
  • Z cyklu życia 2.5.1: niestandardowe implementacje klucza AndroidViewModelFactory teraz prawidłowo wywołują funkcję create(modelClass), gdy używasz konstruktora stanowego z Lifecycle 2.4 lub nowszym (I5b315, b/238011621)

Wersja 2.6.0-alpha01

29 czerwca 2022 r.

Usługa androidx.lifecycle:lifecycle-*:2.6.0-alpha01 została zwolniona. Wersja 2.6.0-alfa01 zawiera te zatwierdzenia.

Nowe funkcje

  • Do wersji StateFlow i Flow w wersji collectAsStateWithLifecycle dodano nowe rozszerzenie, które pobiera dane z procesów i przedstawia jego najnowszą wartość jako stan tworzenia wiadomości w sposób uwzględniający cykl życia. Przepływ jest rejestrowany, a nowa emisja jest ustawiana na wartość stanu, gdy cykl życia mieści się w zakresie co najmniej określonej wartości Lifecycle.State. Gdy cykl życia spadnie poniżej tej wartości (Lifecycle.State), zbieranie przepływu zostanie zatrzymane, a wartość stanu nie jest aktualizowana. (I1856e, b/230557927)

Wersja 2.5

Wersja 2.5.1

27 lipca 2022 roku

Usługa androidx.lifecycle:lifecycle-*:2.5.1 została zwolniona. Wersja 2.5.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Niestandardowe implementacje interfejsu AndroidViewModelFactory prawidłowo wywołują funkcję create(modelClass) podczas korzystania ze stanowego konstruktora AndroidViewModelFactory z tagiem Lifecycle w wersji 2.4 lub nowszej. (I5b315, b/238011621)

Wersja 2.5.0

29 czerwca 2022 r.

Usługa androidx.lifecycle:lifecycle-*:2.5.0 została zwolniona. Wersja 2.5.0 zawiera te zatwierdzenia.

Ważne zmiany wprowadzone od wersji 2.4.0

  • SavedStateHandle oferuje teraz interfejs API getStateFlow(), który zamiast używania LiveData zwraca interfejs Kotlin StateFlow do monitorowania zmian wartości.

  • Dodatki do tworzenia modelu widoku danych – podczas tworzenia niestandardowego ViewModelProvider.Factory nie trzeba już przedłużać AndroidViewModelFactory ani AbstractSavedStateViewModelFactory, aby uzyskać dostęp odpowiednio do Application lub SavedStateHandle. Zamiast tego te pola są udostępniane do każdej podklasy ViewModelProvider.Factory jako CreationExtras przez nowe przeciążenie create: create(Class<T>, CreationExtras). Te dodatki są dostarczane automatycznie przez Twoją aktywność lub fragment, gdy używasz odpowiednio Aktywności 1.5.0 i Fragmentu 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 konsolę DSL viewModelFactory Kotlin, która umożliwia definiowanie ViewModelProvider.Factory w oparciu o 1 lub więcej inicjatorów lambda, po jednym na każdą klasę ViewModel obsługiwaną przez Twoją własną fabrykę przy użyciu CreationExtras jako podstawowego źródła danych.

    val customFactory = viewModelFactory {
        // The return type of the lambda automatically sets what class this lambda handles
        initializer {
            // Get the Application object from extras provided to the lambda
            val application = checkNotNull(get(ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY))
            HomeViewModel(application)
        }
        initializer {
            val savedStateHandle = createSavedStateHandle()
            DetailViewModel(savedStateHandle)
        }
    }
    
  • lifecycle-viewmodel-compose oferuje teraz interfejs API viewModel(), który wykorzystuje fabrykę lambdy przy tworzeniu 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)
    }
    
  • SavedStateHandle Compose Saver Integration – artefakt lifecycle-viewmodel-compose zawiera teraz w SavedStateHandle.saveable nowe, eksperymentalne interfejsy API, które pozwalają rememberSaveable na podobne działanie obsługiwane przez SavedStateHandle modelu `ViewModel.

    class ListScreenViewModel(handle: SavedStateHandle): ViewModel() {
        // This value survives both configuration changes and process death and recreation
        val editMode by handle.saveable { mutableStateOf(false) }
    }
    
  • Dodaliśmy interfejs API addCloseable() i nowe przeciążenie konstruktora, które pozwalają na dodanie do obiektu ViewModel co najmniej 1 obiektu Closeable, który zostanie zamknięty, gdy ViewModel zostanie wyczyszczony, bez konieczności ręcznego wprowadzania zmian w elemencie onCleared().

    Na przykład, aby utworzyć zakres współrzędny, który można wstrzykiwać do modelu widoku danych i kontrolować za pomocą testów, możesz utworzyć CoroutineScope z implementacją Closeable:

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

    Którego można następnie użyć w konstruktorze ViewModel z zachowaniem tego samego czasu działania co w viewModelScope:

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

Zmiany w działaniu

  • Próba przeniesienia wskaźnika Lifecycle.State z INITIALIZED do DESTROYED zawsze spowoduje zgłoszenie IllegalStateException niezależnie o tym, czy Lifecycle ma dołączonego obserwatora.
  • Użytkownik LifecycleRegistry wyczyści teraz swoich obserwatorów, gdy osiągnie stan DESTROYED.

Wersja 2.5.0-rc02

15 czerwca 2022 r.

Usługa androidx.lifecycle:lifecycle-*:2.5.0-rc02 została zwolniona. Wersja 2.5.0-rc02 zawiera te zatwierdzenia.

Poprawki błędów

  • ViewModelProvider nie będzie już ulegać awarii podczas mieszania wcześniejszych wersji zależności cyklu życia kompilowania tylko z wersją 2.5 lub nowszą. (I81a66, b/230454566)

Wersja 2.5.0-rc01

11 maja 2022 roku

Usługa androidx.lifecycle:lifecycle-*:2.5.0-rc01 została zwolniona. Wersja 2.5.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

  • MediatorLiveData.addSource() wysyła teraz NullPointerException po przekazaniu źródła null, zamiast propagować źródło null obserwatorom.(Ibd0fb, b/123085232)

Wersja 2.5.0-beta01

20 kwietnia 2022 r.

Usługa androidx.lifecycle:lifecycle-*:2.5.0-beta01 została zwolniona. Wersja 2.5.0-beta01 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • Dodano przedstawicieli właściwości SavedStateHandle.saveable, aby używać nazw właściwości jako kluczy do zachowania stanu w obiekcie 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 w innej dolnej karcie nawigacyjnej prowadziło do wywołania IllegalStateException w przypadku korzystania z kilku tylnych stosów. (I11bd5, b/228865698)

Wersja 2.5.0-alpha06

6 kwietnia 2022 roku

Usługa androidx.lifecycle:lifecycle-*:2.5.0-alpha06 została zwolniona. Wersja 2.5.0-alfa06 zawiera te zatwierdzenia.

Nowe funkcje

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

Zmiany interfejsu API

  • Funkcja CreationExtras ma teraz postać abstrakcyjną, a nie zapieczętowaną. (IB8a7a)

Poprawki błędów

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

Wersja 2.5.0-alpha05

23 marca 2022 r.

Usługa androidx.lifecycle:lifecycle-*:2.5.0-alpha05 została zwolniona. Wersja 2.5.0-alfa05 zawiera te zatwierdzenia.

Nowe funkcje

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

Zmiany interfejsu API

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

Poprawki błędów

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

Wersja 2.5.0-alpha04

9 marca 2022 r.

Usługa androidx.lifecycle:lifecycle-*:2.5.0-alpha04 została zwolniona. Wersja 2.5.0-alfa04 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • SavedStateHandle oferuje teraz interfejs API getStateFlow(), który zwraca parametr Kotlin StateFlow do monitorowania zmian wartości jako alternatywa dla użycia LiveData. (Iad3ab, b/178037961)

Wersja 2.5.0-alpha03

23 lutego 2022 r.

Usługa androidx.lifecycle:lifecycle-*:2.5.0-alpha03 została zwolniona. Wersja 2.5.0-alfa03 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodano interfejs API addCloseable() i nowy przeciążenie konstruktora, które pozwala dodać Closeable obiektów do ViewModel, które zostaną zamknięta, gdy ViewModel jest wyczyszczony bez konieczności pracy ręcznej w onCleared(). (I55ea0)
  • lifecycle-viewmodel udostępnia teraz: InitializerViewModelFactory, który umożliwia dodanie parametru lambda do obsługi żądań określonych klas ViewModel z CreationExtras jako danymi podstawowymi źródła. (If58fc, b/216687549).
  • lifecycle-viewmodel-compose oferuje teraz interfejs API viewModel(), który wykorzystuje fabrykę lambda, aby utworzyć instancję ViewModel bez wymaga utworzenia niestandardowego elementu ViewModelProvider.Factory. (I97fbb, b/216688927)

Zmiany interfejsu API

  • Teraz możesz utworzyć ViewModel za pomocą usługi CreationExtras przez lifecycle-viewmodel-compose (I08887, b/216688927)

Zmiany w działaniu

  • Próba przeniesienia wskaźnika Lifecycle.State z położenia INITIALIZED do DESTROYED będzie teraz zawsze wysyłać IllegalStateException niezależnie o tym, czy Lifecycle ma dołączonego obserwatora. (I7c390, b/177924329)
  • Użytkownik LifecycleRegistry wyczyści teraz listę obserwatorów, gdy: przejść do stanu DESTROYED. (I4f8dd, b/142925860)

Wersja 2.5.0-alpha02

9 lutego 2022 r.

Usługa androidx.lifecycle:lifecycle-*:2.5.0-alpha02 została zwolniona. Wersja 2.5.0-alfa02 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • SavedStateHandle i SavedStateViewModelFactory zostały przekształcone w Kotlin. Zwiększyło to możliwość wartości null identyfikatorów ogólnych w obu klasach. (Ib6ce2, b/216168263, I9647a, b/177667711)
  • Parametr funkcji LiveData switchMap może mają teraz dane wyjściowe z możliwością wartości null. (I40396, b/132923666)
  • Do rozszerzeń LiveData-ktx dodano adnotacje: @CheckResult, aby wymusić stosowanie wyników przy ich wywoływaniu. funkcji. (Ia0f05, b/207325134)

Zmiany w działaniu

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

Poprawki błędów

  • Z cyklu życia 2.4.1: zaktualizowaliśmy lifecycle-process, aby polegać na uruchamianiu 1.1.1, aby mieć pewność, że poprawki, które uniemożliwiają aplikacji ProcessLifecycleInitializer wysłanie StartupException, są domyślnie dostępne. (Ib01df, b/216490724)
  • Pojawia się ulepszony komunikat o błędzie, gdy niestandardowe zajęcia AndroidViewModel mają w niewłaściwej kolejności i spróbuj utworzyć ViewModel. (I340f7, b/177667711)
  • Możesz teraz utworzyć model widoku w CreationExtras za pomocą AndroidViewModelFactory bez konfigurowania aplikacji. (I6ebef, b/217271656)

Wersja 2.5.0-alpha01

26 stycznia 2022 r.

Usługa androidx.lifecycle:lifecycle-*:2.5.0-alpha01 została zwolniona. Wersja 2.5.0-alfa01 zawiera te zatwierdzenia.

Dodatki do tworzenia modelu ViewModel

W tej wersji rozpoczynamy budowę ViewModel. Zamiast sztywnego zestawu podklas klasy ViewModelProvider.Factory, z których każda dodaje dodatkowe funkcje (umożliwia stosowanie parametru konstruktora Application w obiekcie AndroidViewModelFactory, a także umożliwia stosowanie parametru konstruktora SavedStateHandle za pomocą komponentów SavedStateViewModelFactory i AbstractSavedStateViewModelFactory itd.), przechodzimy do świata bezstanowych fabryk, opierających się na nowej koncepcji – CreationExtras. (Ia7343, b/188691010, b/188541057)

Po tej zmianie usługa ViewModelProvider nie wywołuje już bezpośrednich wywołań do poprzedniej metody metody create(Class<T>) (ViewModelProvider.Factory). Zamiast tego wywołuje nowe przeciążenie typu 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 elementów CreationExtras:

  • ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY: ta sekcja String zapewnia dostęp do klucza niestandardowego przekazanego przez Ciebie ViewModelProvider.get().
  • ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY zapewnia dostęp do klasy Application.
  • SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY zapewnia dostęp do modelu SavedStateRegistryOwner, który jest używany do tworzenia tego modelu widoku.
  • SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY zapewnia dostęp do modelu ViewModelStoreOwner, który jest używany do tworzenia tego modelu widoku.
  • SavedStateHandleSupport.DEFAULT_ARGS_KEY zapewnia dostęp do Bundle argumentów, których należy użyć do skonstruowania SavedStateHandle.

Te dodatki są udostępniane domyślnie, gdy używasz opcji Aktywność 1.5.0-alpha01, Fragment 1.5.0-alpha01 i Nawigacja 2.5.0-alpha01. Jeśli używasz wcześniejszej wersji tych bibliotek, Twoja CreationExtras będzie pusta – wszystkie istniejące podklasy obiektu ViewModelProvider.Factory zostały przepisane, aby obsługiwać zarówno starszą ścieżkę tworzenia używaną przez wcześniejsze wersje tych bibliotek, jak i ścieżkę CreationExtras, która będzie używana w przyszłości.

Te CreationExtras umożliwiają utworzenie klasy ViewModelProvider.Factory, która przekazuje do każdego typu ViewModel tylko te informacje, których potrzebujesz, bez korzystania ze ścisłej hierarchii podklas fabryki:

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() Kotlin w obiekcie CreationExtras z SavedStateHandleSupport, aby utworzyć SavedStateHandle tylko dla jednego modelu widoku, który go potrzebuje. (Ia6654, b/188541057)

Niestandardowy CreationExtras można udostępnić, zastępując getDefaultViewModelCreationExtras() w ComponentActivity lub Fragment, dzięki czemu są one dostępne w niestandardowym elemencie ViewModelProvider.Factory jako wbudowany mechanizm wspomaganego wstrzykiwania. Te dodatki będą automatycznie dostępne w Twojej niestandardowej wersji fabryki, gdy będą używane bezpośrednio za pomocą ViewModelProvider lub podczas korzystania z rozszerzeń właściwości by viewModels() i by activityViewModels() Kotlin. (I79f2b, b/207012584, b/207012585, b/207012490)

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że podana wartość domyślna do SavedStateHandle pojawi się ponownie po tym procesie. śmierć i rekreacja, nawet jeśli Usunięto z SavedStateHandle. W konsekwencji to, SavedStateHandle nie będzie już scalać danych domyślnych i przywrócone wartości razem, zamiast użycia tylko i przywrócone wartości. (I53a4b)

Wersja 2.4

Wersja 2.4.1

9 lutego 2022 r.

Usługa androidx.lifecycle:lifecycle-*:2.4.1 została zwolniona. Wersja 2.4.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Przywrócono z cyklu życia 2.5.0-alpha01: naprawiono błąd polegający na podawaniu wartości domyślnej. do SavedStateHandle pojawi się ponownie po tym procesie. śmierć i rekreacja, nawet jeśli usunięto z SavedStateHandle. W konsekwencji to, SavedStateHandle nie będzie już scalać danych domyślnych i przywrócone wartości razem, zamiast użycia tylko i przywrócone wartości. (I53a4b)
  • lifecycle-process działa teraz w oparciu o funkcję Androidx Startup 1.1.1. Rozwiązało to problemy z regresją, w której użycie ProcessLifecycleInitializer powodowało wyświetlenie wyniku StartupException. (b/216490724)

Wersja 2.4.0

27 października 2021 roku

Usługa androidx.lifecycle:lifecycle-*:2.4.0 została zwolniona. Wersja 2.4.0 zawiera te zatwierdzenia.

Ważne zmiany wprowadzone od wersji 2.3.0

  • Interfejs @OnLifecycleEvent został wycofany. Zamiast niego należy użyć właściwości LifecycleEventObserver lub DefaultLifecycleObserver.
  • Dodano bibliotekę androidx.lifecycle:lifecycle-viewmodel-compose. Udostępnia funkcje viewModel() kompozycyjne i LocalViewModelStoreOwner.
    • Zmiana źródłowa: kod ViewModelProvider został przepisany w Kotlin. Metoda ViewModelProvider.Factory.create nie zezwala już na wartość domyślną do wartości null.
  • Do interfejsu androidx.lifecycle:lifecycle-runtime-ktx dodano nowy interfejs API coroutines:
  • Lifecycle.repeatOnLifecycle, interfejs API, który wykonuje blok kodu w korycie, gdy cykl życia jest w co najmniej określonym stanie. Blokada zostanie anulowana i uruchomiona ponownie w miarę przechodzenia cyklu życia do i ze stanu docelowego.
  • Flow.flowWithLifecycle – interfejs API, który wysyła wartości z przepływu nadrzędnego, gdy cykl życia jest co najmniej w określonym stanie.
  • Element DefaultLifecycleObserver został przeniesiony z folderu lifecycle.lifecycle-common-java8 do folderu lifecycle.lifecycle-common. lifecycle.lifecycle-common-java8nie ma już żadnych dodatkowych funkcji poza lifecycle.lifecycle-common, więc zależność od tego interfejsu może zostać zastąpiona przez lifecycle.lifecycle-common.
  • Interfejs API inny niż coroutines z interfejsu lifecycle-viewmodel-ktx został przeniesiony do modułu lifecycle-viewmodel.
  • lifecycle-process używa teraz androidx.startup do inicjowania ProcessLifecycleOwner.

    Wcześniej za tę czynność odpowiadał użytkownik androidx.lifecycle.ProcessLifecycleOwnerInitializer.

    Jeśli użyto funkcji tools:node="remove", do inicjalizacji użyto elementu ContentProvider cykl życia przetwarzania w przeszłości, musisz zamiast tego 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.

Udostępniliśmy wersję androidx.lifecycle:lifecycle-*:2.4.0-rc01 bez zmian w cyklu życia wersji 2.4.0–beta01. Wersja 2.4.0-rc01 zawiera te zatwierdzenia.

Wersja 2.4.0-beta01

15 września 2021 r.

Usługa androidx.lifecycle:lifecycle-*:2.4.0-beta01 została zwolniona. Wersja 2.4.0-beta01 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • Interfejs @OnLifecycleEvent został wycofany. LifecycleEventObserver lub Zamiast niego należy użyć parametru DefaultLifecycleObserver. (I5a8fa)
  • Przeniesiono zasób DefaultLifecycleObserver z jednostki organizacyjnej androidx.lifecycle.lifecycle-common-java8 do androidx.lifecycle.lifecycle-common Usługa androidx.lifecycle.lifecycle-common-java8 nie oferuje już żadnych dodatkowych funkcji poza wersją androidx.lifecycle.lifecycle-common, dlatego zależność od niej może zostać zastąpiona przez androidx.lifecycle.lifecycle-common. (I021aa)
  • Interfejs API spoza kooutines z lifecycle-viewmodel-ktx został przeniesiony do lifecycle-viewmodel. (I6d5b2)

Treści tłumaczone przez użytkowników zewnętrznych

  • Dziękujemy dmitrilc za poprawienie typu w dokumentacji ViewModel. (nr 221).

Wersja 2.4.0-alpha03

4 sierpnia 2021 r.

Usługa androidx.lifecycle:lifecycle-*:2.4.0-alpha03 została zwolniona. Wersja 2.4.0-alfa03 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • Zmiana źródłowa: komponent ViewModelProvider został przepisany w Kotlin. Metoda ViewModelProvider.Factory.create nie zezwala już na wartość null ogólne. (I9B9f6)

Zmiany w działaniu

  • Metoda Lifecycle.repeatOnLifecycle: block jest teraz zawsze wywoływana szeregowo podczas ponownego wykonywania. (IBab33),

Treści tłumaczone przez użytkowników zewnętrznych

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

Wersja 2.4.0-alpha02

16 czerwca 2021 r.

Usługa androidx.lifecycle:lifecycle-*:2.4.0-alpha02 została zwolniona. Wersja 2.4.0-alfa02 zawiera te zatwierdzenia.

Nowe funkcje

  • W aplikacji lifecycle-runtime-ktx dodano nowy test lintowania RepeatOnLifecycleWrongUsage, który wykrywa, że repeateOnLifecycle jest nieprawidłowo używany w onStart() lub onResume(). (706078, b/187887400)

Zmiany interfejsu API

  • Interfejs API LifecycleOwner.addRepeatingJob został usunięty na korzyść Lifecycle.repeatOnLifecycle, która uwzględnia ustrukturyzowanie jest równoczesność i łatwiej jest wyciągnąć wnioski. (I4a3a8).
  • Udostępnij plik ProcessLifecycleInitializer publicznie, aby inne androidx.startup.Initializer mogły używać go jako zależności. (I94c31)

Poprawki błędów

  • Rozwiązaliśmy problem ze sprawdzaniem lintowania NullSafeMutableLiveData, gdy pole zawierało modyfikatory. (#147, b/183696616)
  • Rozwiązaliśmy inny problem ze sprawdzaniem lintowania NullSafeMutableLiveData w przypadku używania wyrażeń ogólnych. (nr 161, b/184830263)

Treści tłumaczone przez użytkowników zewnętrznych

Wersja 2.4.0-alpha01

24 marca 2021 r.

Usługa androidx.lifecycle:lifecycle-*:2.4.0-alpha01 została zwolniona. Wersja 2.4.0-alfa01 zawiera te zatwierdzenia.

Zmiany w działaniu

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

    Wcześniej za tę czynność odpowiadał użytkownik androidx.lifecycle.ProcessLifecycleOwnerInitializer.

    Jeśli użyto funkcji tools:node="remove", do inicjalizacji użyto elementu ContentProvider cykl życia przetwarzania w przeszłości, musisz zamiast tego 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 interfejsu API

  • Dodano interfejs API Flow.flowWithLifecycle, który za pomocą interfejsu API Lifecycle.repeatOnLifecycle przesyła wartości z przepływu nadrzędnego, gdy cykl życia jest co najmniej w określonym stanie. Jest to alternatywa dla nowego interfejsu API LifecycleOwner.addRepeatinJob. (I0f4cd)

Poprawki błędów

  • Od cyklu życia 2.3.1: reguła lintowania NonNullableMutableLiveData może teraz prawidłowo rozróżnienie zmiennych pól o różnej wartości null. (b/169249668)

Cykl życia Viewmodel Compose w wersji 1.0.0

Wersja 1.0.0-alpha07

16 czerwca 2021 r.

Usługa androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07 została zwolniona. Wersja 1.0.0-alfa07 zawiera te zatwierdzenia.

Zmiana w interfejsie API

  • viewModel() zajmuje teraz: opcjonalny ViewModelStoreOwner, który ułatwia pracę z właścicielami innymi niż LocalViewModelStoreOwner. Możesz na przykład użyć funkcji viewModel(navBackStackEntry), aby pobrać model widoku danych powiązany z konkretnym wykresem nawigacyjnym. (I2628d, b/188693123)
.

Wersja 1.0.0-alpha06

2 czerwca 2021 r.

Usługa androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06 została zwolniona. Wersja 1.0.0-alfa06 zawiera te zatwierdzenia.

Zaktualizowano, aby była zgodna z funkcją Compose w wersji 1.0.0-beta08.

Wersja 1.0.0-alpha05

18 maja 2021 r.

Usługa androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05 została zwolniona. Wersja 1.0.0-alfa05 zawiera te zatwierdzenia.

Nowe funkcje

  • Zaktualizowano, aby była zgodna z funkcją Compose w wersji 1.0.0-beta07.

Poprawki błędów

  • pliki AndroidManifest z komponentów ui-test-manifest oraz Narzędzie ui-tooling-data jest teraz zgodne z Androidem 12 (I6f9de, b/184718994)

Wersja 1.0.0-alpha04

7 kwietnia 2021 r.

Usługa androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04 została zwolniona. Wersja 1.0.0-alfa04 zawiera te zatwierdzenia.

Zmiany zależności

  • Ta wersja zezwala na androidx.hilt:hilt-navigation-compose i androidx.navigation:navigation-compose aby zsynchronizować zależności między androidx.compose.compiler:compiler:1.0.0-beta04 i androidx.compose.runtime:runtime:1.0.0-beta04. W wersji 1.0.0 kompilator i środowisko wykonawcze muszą być zgodne.

Wersja 1.0.0-alpha03

10 marca 2021 r.

Usługa androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha03 została zwolniona. Wersja 1.0.0-alfa03 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • LocalViewModelStoreOwner.current zwraca teraz błąd ViewModelStoreOwner z dopuszczaniem wartości null, aby lepiej określić czy ViewModelStoreOwner jest dostępny w bieżącym kompozycji. Interfejsy API, które wymagają ViewModelStoreOwner, takiej jak jako viewModel() i NavHost, nadal zgłaszaj wyjątek jeśli ViewModelStoreOwner nie jest ustawiony. (Idf39a)

Lifecycle-Viewmodel-Compose w wersji 1.0.0-alfa02,

24 lutego 2021 r.

Usługa androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02 została zwolniona. Wersja 1.0.0-alfa02 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • LocalViewModelStoreOwner ma teraz funkcje provides, które mogą używane z zasadą CompositionLocalProvider, zastępując asProvidableCompositionLocal() API. (I45d24)
.

Lifecycle-Viewmodel-Compose w wersji 1.0.0-alfa01,

10 lutego 2021 r.

Usługa androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01 została zwolniona. Wersja 1.0.0-alfa01 zawiera te zatwierdzenia.

Nowe funkcje

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

Wersja 2.3.1

Wersja 2.3.1 cyklu życia

24 marca 2021 r.

Usługa androidx.lifecycle:lifecycle-*:2.3.1 została zwolniona. Wersja 2.3.1 zawiera te zatwierdzenia.

Poprawki błędów

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

Wersja 2.3.0

Wersja 2.3.0

10 lutego 2021 r.

Usługa androidx.lifecycle:lifecycle-*:2.3.0 została zwolniona. Wersja 2.3.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 2.2.0

  • Obsługa klas nieobjętych papierami wartościowymi w SavedStateHandle: SavedStateHandle obsługuje teraz leniwą serializację, umożliwiając wywołanie funkcji setSavedStateProvider() dla danego klucza. Zapewnia to obiekt SavedStateProvider, który otrzyma wywołanie zwrotne do saveState(), gdy SavedStateHandle zostanie poproszone o zapisanie stanu. Więcej informacji znajdziesz w artykule Zapisywanie klas niestanowiących się w pakiecie.
  • Egzekwowanie zachowań w ramach cyklu życia:
    • LifecycleRegistry wymusza teraz DESTROYED jako stan terminala.
    • LifecycleRegistry sprawdza teraz, czy jej metody są wywoływane w wątku głównym. Było to wymagane w przypadku cykli życia działań, fragmentów itp. Dodanie obserwatorów w wątkach innych niż główne powodowało trudności w obsłudze awarii w czasie działania. W przypadku obiektów LifecycleRegistry należących do Twoich komponentów możesz zrezygnować z kontroli przy użyciu LifecycleRegistry.createUnsafe(...). Musisz jednak zadbać o prawidłową synchronizację, gdy do obiektu LifecycleRegistry uzyskiwany jest dostęp z różnych wątków.
  • Asystenty stanu cyklu życia i zdarzeń: dodano statyczne metody pomocnicze downFrom(State), downTo(State), upFrom(State), upTo(State) do Lifecycle.Event w celu generowania wartości Event dla danego parametru State i kierunku przejścia. Dodano metodę getTargetState() zawierającą parametr State, na który zostanie przeniesiony cykl życia bezpośrednio po metodzie Event.
  • withStateAtLeast: dodano interfejsy API Lifecycle.withStateAtLeast, które oczekują na stan cyklu życia i synchronicznie uruchamiają niezawieszający blok kodu w momencie zmiany stanu, a następnie wznawiają pracę z odpowiednim wynikiem. Te interfejsy API różnią się od istniejących metod when*, ponieważ nie zezwalają na uruchamianie kodu zawieszania ani nie wykorzystują niestandardowego dyspozytora. (Aosp/1326081).
  • Interfejsy API ViewTree: nowe interfejsy API ViewTreeLifecycleOwner.get(View) i ViewTreeViewModelStoreOwner.get(View) umożliwiają pobranie odpowiednio instancji LifecycleOwner i ViewModelStoreOwner w przypadku instancji View. Aby to zrobić, musisz uaktualnić wersję Activity 1.2.0 i Fragment 1.3.0 oraz AppCompat w wersji 1.3.0-alpha01 lub nowszej. Rozszerzenia Kotlin findViewTreeLifecycleOwner i findViewTreeViewModelStoreOwner są dostępne odpowiednio w języku: lifecycle-runtime-ktx i lifecycle-viewmodel-ktx.
  • LiveData.observe() Wycofanie rozszerzenia Kotlin: rozszerzenie LiveData.observe() Kotlin niezbędne do korzystania ze składni lambda zostało wycofane, ponieważ nie jest konieczne podczas korzystania z narzędzia Kotlin 1.4.

Wersja 2.3.0-rc01

16 grudnia 2020 roku

Usługa androidx.lifecycle:lifecycle-*:2.3.0-rc01 została zwolniona. Wersja 2.3.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

  • Metoda keys() SavedStateHandle jest teraz spójna przed zapisaniem stanu i po nim – teraz uwzględnia klucze używane wcześniej przez setSavedStateProvider(), a także klucze używane z set() i getLiveData(). (Aosp/1517919, b/174713653)

Treści tłumaczone przez użytkowników zewnętrznych

Wersja 2.3.0-beta01

1 października 2020 roku

Usługa androidx.lifecycle:lifecycle-*:2.3.0-beta01 została zwolniona. Wersja 2.3.0-beta01 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • Rozszerzenie LiveData.observe() Kotlin niezbędne do użycia składni lambda zostały wycofane, ponieważ nie jest konieczne w przypadku korzystania z Kotlin 1.4. (I40d3f)

Poprawki błędów

Zmiany w dokumentacji

  • Kreator liveData i dokumenty asLiveData() zostały zaktualizowane, aby uwzględnić szczegółowe informacje na temat zmiany określonych wartości limitu czasu. (Aosp/1122324).

Wersja 2.3.0-alpha07

19 sierpnia 2020 r.

Usługa androidx.lifecycle:lifecycle-*:2.3.0-alpha07 została zwolniona. Wersja 2.3.0-alfa07 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował awarię w sprawdzaniu licencji NullSafeMutableLiveData. (Aosp/1395367).

Wersja 2.3.0-alfa06

22 lipca 2020 r.

Usługa androidx.lifecycle:lifecycle-*:2.3.0-alpha06 została zwolniona. Wersja 2.3.0-alfa06 zawiera te zatwierdzenia.

Nowe funkcje

  • Do Lifecycle.Event dodano statyczne metody pomocnicze downFrom(State), downTo(State), upFrom(State), upTo(State) w celu generowania obiektu Event dla danego elementu State i kierunku przejścia. Dodano metodę getTargetState() zawierającą parametr State, na który zostanie przeniesiony cykl życia bezpośrednio po metodzie Event. (I00887).
  • Dodano interfejsy API Lifecycle.withStateAtLeast, które oczekują na stan cyklu życia i synchronicznie uruchamiają niezawieszający blok kodu w punkcie zmiany stanu, a następnie są wznawiane z konkretnym wynikiem. Te interfejsy API różnią się od istniejących metod when*, ponieważ nie zezwalają na uruchamianie kodu zawieszania ani nie wykorzystują niestandardowego dyspozytora. (Aosp/1326081).

Zmiany w działaniu

  • LifecycleRegistry wymusza teraz DESTROYED jako stan terminala. (I00887).
  • LifecycleRegistry sprawdza teraz, czy jej metody są wywoływane w wątku głównym. Było to wymagane w przypadku cykli życia działań, fragmentów itp. Dodanie obserwatorów w wątkach innych niż główne powodowało trudności w obsłudze awarii w czasie działania. W przypadku obiektów LifecycleRegistry należących do Twoich komponentów możesz zrezygnować z kontroli przy użyciu LifecycleRegistry.createUnsafe(...). Musisz jednak zadbać o prawidłową synchronizację, gdy dostęp do tego elementu LifecycleRegistry jest realizowany z różnych wątków (Ie7280, b/137392809)

Poprawki błędów

  • Naprawiono awarię w: NullSafeMutableLiveData. (b/159987480)
  • Naprawiono ObsoleteLintCustomCheck w przypadku testów Lint połączonych z pakietem lifecycle-livedata-core-ktx (a konkretnie NullSafeMutableLiveData). (b/158699265)

Wersja 2.3.0-alpha05

24 czerwca 2020 r.

Usługa androidx.lifecycle:lifecycle-*:2.3.0-alpha05 została zwolniona. Wersja 2.3.0-alfa05 zawiera te zatwierdzenia.

Poprawki błędów

  • LiveData lepiej sprawdza się teraz w przypadku powtarzających się zgłoszeń, dzięki czemu unikniesz podwójnych połączeń z numerami onActive() i onInactive(). (b/157840298)
  • Rozwiązaliśmy problem, który powodował, że w Androidzie Studio 4.1 Canary 6 lub nowszym nie były uruchamiane testy Lint. (Aosp/1331903).

Wersja 2.3.0-alfa04

10 czerwca 2020 r.

Usługa androidx.lifecycle:lifecycle-*:2.3.0-alpha04 została zwolniona. Wersja 2.3.0-alfa04 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono awarię w sprawdzaniu licencji NonNullableMutableLiveData. (b/157294666)
  • Kontrola licencji NonNullableMutableLiveData obejmuje teraz znacznie więcej przypadków, w których wartość null została ustawiona w MutableLiveData z parametrem typu niepustego. (B/156002218)

Wersja 2.3.0-alfa03

20 maja 2020 r.

Zwolniono androidx.lifecycle:lifecycle-*:2.3.0-alpha03. Wersja 2.3.0-alfa03 zawiera te zatwierdzenia.

Nowe funkcje

  • SavedStateHandle obsługuje teraz leniwą serializację, umożliwiając wywołanie metody setSavedStateProvider() dla danego klucza. Zapewnia to wywołanie SavedStateProvider, które otrzyma wywołanie zwrotne do saveState(), gdy SavedStateHandle poprosi o zapisanie stanu. (B/155106862)
  • Nowy interfejs API ViewTreeViewModelStoreOwner.get(View) umożliwia pobranie kontenera ViewModelStoreOwner zawierającego dane z instancji View. Aby to zrobić, musisz uaktualnić do wersji Activity 1.2.0-alpha05, Fragment 1.3.0-alpha05 i AppCompat 1.3.0-alpha01. Do aplikacji lifecycle-viewmodel-ktx dodano rozszerzenie Kotlin findViewModelStoreOwner(). (Aosp/1295522)

Poprawki błędów

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

Wersja 2.3.0-alfa02

29 kwietnia 2020 roku

Usługa androidx.lifecycle:lifecycle-*:2.3.0-alpha02 została zwolniona. Wersja 2.3.0-alfa02 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • SavedStateViewModelFactory umożliwia teraz przekazywanie do konstruktora wartości null Application, co ułatwia obsługę zgłoszeń, w których nie są one łatwo dostępne i nie jest potrzebna obsługa AndroidViewModel. (Aosp/1285740)

Poprawki błędów

  • Zwiększona wydajność uruchamiania „na zimno” dzięki unikaniu niepowodzenia weryfikacji klasy na urządzeniach z interfejsem API w wersji 28 i starszych. (Aosp/1282118).

Wersja 2.3.0-alfa01

Marzec 4, 2020

Usługa androidx.lifecycle:lifecycle-*:2.3.0-alpha01 została zwolniona. Wersja 2.3.0-alfa01 zawiera te zatwierdzenia.

Nowe funkcje

  • Nowy interfejs API ViewTreeLifecycleOwner.get(View) umożliwia pobranie kontenera LifecycleOwner zawierającego dane z instancji View. Aby to zrobić, musisz uaktualnić Aktywność 1.2.0-alpha01 i Fragment 1.3.0-alpha01. Rozszerzenie Kotlin findViewTreeLifecycleOwner jest dostępne w języku: lifecycle-runtime-ktx. (aosp/1182361, aosp/1182956)
  • Dodaliśmy nowe sprawdzanie lint, które ostrzegają przed ustawianiem wartości null dla elementu MutableLiveData, który został zdefiniowany w Kotlin 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 udostępnia komponent TestLifecycleOwner, który implementuje LifecycleOwner i oferuje zmienną Lifecycle bezpieczną w wątku. (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.

Usługa androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0 została zwolniona. Wersja 2.2.0 zawiera te zatwierdzenia.

Model widoku cyklu życia SavedState korzysta teraz z tej samej wersji co inne artefakty cyklu życia. Działanie funkcji 2.2.0 jest takie samo jak działanie 1.0.0.

Wersja 2.2.0

Styczeń 22, 2020

Usługa androidx.lifecycle:lifecycle-*:2.2.0 została zwolniona. Wersja 2.2.0 zawiera te zatwierdzenia.

Ważne zmiany wprowadzone od wersji 2.1.0

  • Integracja z cyklem życia Coroutine: nowy artefakt lifecycle-runtime-ktx dodaje integrację między współrzędnymi cyklu życia i kotlinami Kotlin. lifecycle-livedata-ktx umożliwia teraz korzystanie z współrzędnych. Więcej informacji znajdziesz w artykule o używaniu współrzędnych Kotlin z komponentami architektury.
  • Wycofanie ViewModelProviders.of(): wersja ViewModelProviders.of() została wycofana. Możesz przekazać Fragment lub FragmentActivity do nowego konstruktora ViewModelProvider(ViewModelStoreOwner), aby uzyskać tę samą funkcjonalność przy użyciu fragmentu 1.2.0.
  • lifecycle-extensions Wycofanie artefaktu: w związku z powyższym wycofaniem ViewModelProviders.of() ta wersja oznacza wycofanie ostatniego interfejsu API w lifecycle-extensions i ten artefakt należy uznać za wycofany w całości. Zdecydowanie zalecamy, aby dobrać odpowiednie artefakty cyklu życia, których potrzebujesz (np. lifecycle-service, jeśli używasz LifecycleService i lifecycle-process, jeśli używasz ProcessLifecycleOwner), a nie lifecycle-extensions, ponieważ w przyszłości nie ukaże się 2.3.0 w wersji lifecycle-extensions.
  • Procesor adnotacji przyrostowych Gradle: procesor adnotacji cyklu życia domyślnie działa przyrostowo. Jeśli Twoja aplikacja jest napisana w języku programowania Java 8, możesz zamiast tego użyć DefautLifecycleObserver. a jeśli jest napisany w języku Java 7, więc możesz użyć LifecycleEventObserver.

Wersja 2.2.0-rc03

4 grudnia 2019

Usługa androidx.lifecycle:lifecycle-*:2.2.0-rc03 została zwolniona. Wersja 2.2.0-rc03 zawiera te zatwierdzenia.

Poprawki błędów.

  • Rozwiązaliśmy problem, który powodował, że próbkowana wersja ViewModel była zapisana w ViewModelStore i wysyłana później z użyciem domyślnych ustawień fabrycznych.
  • Popraw użycie funkcji Dispatchers.Main.immediate w metodzie launchWhenCreated i podobnych metodach, aby była ona wywoływana synchronicznie podczas odpowiedniego zdarzenia cyklu życia. (Aosp/1156203).

Treści publikowane przez użytkowników zewnętrznych

  • Dziękujemy Andersowi Järlebergowi za wprowadzenie poprawki. (Aosp/1156203).
  • Dziękujemy Wsiewołodowi Tołstopitowowi z firmy Jetbrains za sprawdzenie wdrożenia implementacji wbudowanej.

Zmiany zależności

  • Rozszerzenia cyklu życia opierają się teraz na fragmencie 1.2.0-rc03.

Wersja 2.2.0-rc02

7 listopada 2019 r.

Usługa androidx.lifecycle:lifecycle-*:2.2.0-rc02 została zwolniona. Wersja 2.2.0-rc02 zawiera te zatwierdzenia.

Poprawki błędów.

  • Naprawiliśmy błąd w konfiguracji biblioteki ProGuard, który występował na urządzeniach z interfejsem API w wersji 28 lub nowszej, jeśli docelowy interfejs API jest niższy niż 29. (b/142778206)

Wersja 2.2.0-rc01

23 października 2019 r.

Usługa androidx.lifecycle:lifecycle-*:2.2.0-rc01 została zwolniona. Wersja 2.2.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów.

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

Treści publikowane przez użytkowników zewnętrznych

  • Dziękujemy Nicklasowi Ansmanowi za wprowadzenie poprawki. (Aosp/1145596)

Wersja 2.2.0-beta01

9 października 2019 r.

Usługa androidx.lifecycle:lifecycle-*:2.2.0-beta01 została zwolniona. Wersja 2.2.0-beta01 zawiera te zatwierdzenia.

Poprawki błędów.

  • Naprawiliśmy regresję wprowadzoną w cyklu życia 2.2.0-alfa05 w kolejności: ProcessLifecycleOwner i LifecycleOwner aktywności na urządzeniach z Androidem 10. (Aosp/1128132).
  • Naprawiliśmy regresję wprowadzoną w cyklu życia 2.2.0-alpha05, która powodowała wyświetlenie błędu NullPointerException w przypadku używania wersji 2.0.0 lub 2.1.0 elementu lifecycle-process. (B/141536990)

Wersja 2.2.0-alpha05

18 września 2019 r.

Usługa androidx.lifecycle:lifecycle-*:2.2.0-alpha05 została zwolniona. Wersja 2.2.0-alfa05 zawiera te zatwierdzenia.

Poprawki błędów.

  • Naprawiono warunek wyścigu w kreatorze danych aktywnych współrzędnych. b/140249349

Wersja 2.2.0-alfa04

5 września 2019 r.

Usługa androidx.lifecycle:lifecycle-*:2.2.0-alpha04 została zwolniona. Zatwierdzenia zawarte 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)

Treści publikowane przez użytkowników zewnętrznych

  • Dziękujemy Nicklas Ansman za przejście na Dispatchers.Main.immediate. (Aosp/1106073).

Wersja 2.2.0-alfa03

7 sierpnia 2019 r.

Usługa androidx.lifecycle:lifecycle-*:2.2.0-alpha03 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

Zmiany interfejsu API

  • Usługa ViewModelProviders.of() została wycofana. Aby uzyskać tę samą funkcjonalność, możesz przekazać Fragment lub FragmentActivity do nowego konstruktora ViewModelProvider(ViewModelStoreOwner). (Aosp/1009889).

Wersja 2.2.0-alfa02

2 lipca 2019 r.

Usługa androidx.lifecycle:*:2.2.0-alpha02 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Zmiany interfejsu API

  • Zastąpiono wartość LiveDataScope.initialValue wartością LiveDataScope.latestValue, która będzie śledzić aktualnie emitowaną wartość bloku liveData.
  • Do konstruktora liveData dodano nowe przeciążenie, które otrzymuje parametr timeout jako typ Duration

Wersja 2.2.0-alpha01

7 maja 2019 r.

Usługa androidx.lifecycle:*:2.2.0-alpha01 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • W tej wersji dodaliśmy nowe funkcje, które uwzględniają połączenia Kotlin w cyklu życia i LiveData. Szczegółową dokumentację na ten temat znajdziesz tutaj.

ViewModel-SavedState w wersji 1.0.0

Wersja 1.0.0

Styczeń 22, 2020

Usługa androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0 została zwolniona. Wersja 1.0.0 zawiera te zatwierdzenia.

Ważne funkcje w wersji 1.0.0

  • Dodano nową klasę SavedStateHandle. Dzięki niemu Twoje zajęcia w ViewModel będą mogły korzystać z zapisanych elementów i w nich współtworzyć. Ten obiekt można odebrać w konstruktorze klasy ViewModel i fabryk domyślnie udostępnianych przez fragmenty kodu. AppCompatActivity wstrzykiuje SavedStateHandle automatycznie.
  • Dodano AbstractSavedStateViewModelFactory. Umożliwia tworzenie fabryk niestandardowych na urządzeniu ViewModel i przyznawanie im dostępu do usługi SavedStateHandle.

ViewModel-Savedstate w wersji 1.0.0-rc03

4 grudnia 2019

Usługa androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03 została zwolniona. Wersja 1.0.0-rc03 zawiera te zatwierdzenia.

Zmiany zależności

  • Wartość SavedState modelu cyklu życia zależy teraz od cyklu życia 2.2.0-rc03.

Viewmodel-Savedstate, wersja 1.0.0-rc02

7 listopada 2019 r.

Usługa androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc02 została zwolniona. Wersja 1.0.0-rc02 zawiera te zatwierdzenia.

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.

Pakiet androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01 został zwolniony bez zmian w stosunku do wersji 1.0.0-beta01. Wersja 1.0.0-rc01 zawiera te zatwierdzenia.

ViewModel-Savedstate, wersja 1.0.0-beta01

9 października 2019 r.

Usługa androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01 została zwolniona. Wersja 1.0.0-beta01 zawiera te zatwierdzenia.

Poprawki błędów.

  • Rozwiązaliśmy problem, który powodował, że pierwszy dostęp do modelu widoku SavedState w interfejsie Activity.onActivityResult() prowadził do IllegalStateException. (B/139093676)
  • Naprawiono błąd IllegalStateException w przypadku użycia funkcji AbstractSavedStateViewModelFactory. (b/141225984)

ViewModel-SavedState w wersji 1.0.0-alfa05

18 września 2019 r.

Usługa androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha05 została zwolniona. Wersja 1.0.0-alfa05 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • SavedStateViewModelFactory nie obejmuje już modelu AbstractSavedStateViewModelFactory i SavedStateHandle jest tworzony tylko dla modeli widoków, które go zażądały (aosp/1113593)

ViewModel-SavedState w wersji 1.0.0-alfa03

7 sierpnia 2019 r.

Usługa androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Zmiany najważniejsze

ViewModel-SavedState w wersji 1.0.0-alfa02

2 lipca 2019 r.

Usługa androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha02 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

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

Zmiany interfejsu API

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

ViewModel-Savedstate, wersja 1.0.0-alfa01

13 marca 2019 r.

Usługa androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01 została zwolniona. Pełny dziennik zatwierdzenia tej pierwszej wersji znajdziesz tutaj.

Nowe funkcje

  • Teraz ViewModels może współtworzyć zapisać stan. Aby to zrobić, użyj nowo wprowadzonej fabryki SavedStateVMFactory modelu widoku, a model ViewModel powinien mieć konstruktor, który odbiera obiekt SavedStateHandle jako parametr.

Wersja 2.1.0

Ważne zmiany wprowadzone od wersji 2.0.0

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

Wersja 2.1.0

5 września 2019 r.

Usługa androidx.lifecycle:lifecycle-*:2.1.0 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Wersja 2.1.0-rc01

2 lipca 2019 r.

Pakiet androidx.lifecycle:*:2.1.0-rc01 został zwolniony bez zmian w stosunku do wersji androidx.lifecycle:*:2.1.0-beta01. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Wersja 2.1.0-beta01

7 maja 2019 r.

Usługa androidx.lifecycle:*:2.1.0-beta01 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Cykle życia są obecnie w wersji beta: interfejs API wprowadzony w poprzednich wersjach alfa, w tym funkcje rozszerzeń liveData na potrzeby przekształceń i obserwacji, inicjowanie ViewModel z przekazywaniem usługi i inne, utrzymują się i nie ulegną zmianie.

Wersja 2.1.0-alfa04

3 kwietnia 2019 r.

Usługa androidx.lifecycle:*:2.1.0-alpha04 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Zmiany interfejsu API

  • Ważna zmiana: bazowy interfejs API, z którego korzystają by viewModels() i by activityViewModels(), został zmieniony tak, aby obsługiwał bezpośrednio ViewModelStore, a nie tylko ViewModelStoreOwner. (Aosp/932932)

Wersja 2.1.0-alfa03

13 marca 2019 r.

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

Zmiany interfejsu API

  • Pole „ViewModelProvider.KeyedFactory” zostało usunięte. Drugi interfejs oprócz ViewModelProvider.Factory nie działał dobrze, ponieważ pojawiły się nowe funkcje, takie jak przekazywanie właściwości w Kotlin by viewmodels {}. (Aosp/914133)

Wersja 2.1.0-alfa02

30 stycznia 2019 r.

Usługa androidx.lifecycle 2.1.0-alpha02 została zwolniona.

Zmiany interfejsu API

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

Poprawki błędów.

  • Rozwiązaliśmy problem, który powodował awarię przykładowych instancji ViewModel, gdy zawierała ViewModelStore. b/122273087

Wersja 2.1.0-alpha01

17 grudnia 2018 r.

Usługa androidx.lifecycle 2.1.0-alpha01 została zwolniona.

Nowe funkcje

  • Dodano LifecycleEventObserver dla przypadków, gdy potrzebny jest strumień zdarzeń cyklu życia. Jest to publiczny interfejs API zamiast ukrytej klasy GenericLifecycleObserver.
  • Dodano rozszerzenia ktx w przypadku metod LiveData.observe i Transformations.* metod.
  • Dodano metodę Transformations.distinctUntilChanged. Tworzy nowy obiekt LiveData, który nie emituje wartości, dopóki źródłowa wartość LiveData nie zostanie zmieniona.
  • Obsługa Corutyny w modelach ViewModels: dodano właściwość rozszerzenia ViewModel.viewModelScope.
  • Dodano ViewModelProvider.KeyedFactory, fabrykę dla modeli ViewModel, która odbiera key i Class w metodzie create.

Wersja 2.0.0

Wersja 2.0.0

21 września 2018 r.

Udostępniono cykl życia 2.0.0 z 1 poprawką błędu z modelu 2.0.0-rc01 w modelu ViewModel.

Poprawki błędów

  • Naprawiono regułę Propagarda 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łę LifecycleObserver ProGuard, aby zachowywać tylko implementacje, a nie podinterfejsy b/71389427
  • Poprawiono reguły ProGuard usługi ViewModel umożliwiające zaciemnianie i zmniejszanie

Wersje starsze niż AndroidX

W przypadku wersji cyklu życia starszych niż Android X uwzględnij te zależności:

dependencies {
    def lifecycle_version = "1.1.1"

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

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

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

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

Wersja 1.1.1

21 marca 2018 r.

Tylko jedna mała zmiana: element android.arch.core.util.Function został przeniesiony z arch:runtime do arch:common. Dzięki temu nie wymaga żadnego czasu działania, np. w sekcji paging:common poniżej.

lifecycle:common to zależność typu lifecycle:runtime, więc ta zmiana nie wpływa bezpośrednio na lifecycle:runtime, a tylko na moduły zależne bezpośrednio od lifecycle:common, podobnie jak ma to miejsce w przypadku stronicowania.

Wersja 1.1.0

22 stycznia 2018 r.

Zmiany opakowania

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

  • Wycofane LifecycleActivity i LifecycleFragment zostały usunięte – korzystaj FragmentActivity, AppCompatActivity lub wspieraj Fragment.
  • Dodano adnotacje (@NonNull) do folderów ViewModelProviders i ViewModelStores
  • Konstruktor ViewModelProviders został wycofany – użyj jego metod statycznych bezpośrednio
  • Usługa ViewModelProviders.DefaultFactory została wycofana – używaj wersji ViewModelProvider.AndroidViewModelFactory
  • Dodano statyczną metodę ViewModelProvider.AndroidViewModelFactory.getInstance(Application) do pobierania statyczny Factory odpowiedni do tworzenia instancji ViewModel i AndroidViewModel.