Cykl życia
Ta tabela zawiera wszystkie artefakty w grupie androidx.lifecycle
.
Artefakt | Wersja stabilna | Wersja kandydująca | Wersja Beta | Wersja alfa |
---|---|---|---|---|
lifecycle-* | 2.8.7 | - | - | 2.9.0-alpha07 |
lifecycle-viewmodel-compose | 2.8.7 | - | - | 2.9.0-alpha07 |
Deklarowanie zależności
Aby dodać zależność od Lifecycle, musisz dodać repozytorium Google Maven do projektu. Więcej informacji znajdziesz w repozytorium Maven firmy Google.
Dodaj zależności dla artefaktów, których potrzebujesz, w pliku build.gradle
aplikacji lub modułu:
Kotlin
Odlotowe
dependencies { def lifecycle_version = "2.8.7" def arch_version = "2.2.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" // ViewModel utilities for Compose implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version" // LiveData implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version" // Lifecycles only (without ViewModel or LiveData) implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version" // Lifecycle utilities for Compose implementation "androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version" // Saved state module for ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version" // Annotation processor kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // alternately - if using Java8, use the following instead of lifecycle-compiler implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" // optional - helpers for implementing LifecycleOwner in a Service implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version" // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" // optional - ReactiveStreams support for LiveData implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version" // optional - Test helpers for LiveData testImplementation "androidx.arch.core:core-testing:$arch_version" // optional - Test helpers for Lifecycle runtime testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version" }
Kotlin
dependencies { val lifecycle_version = "2.8.7" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version") // ViewModel utilities for Compose implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version") // Lifecycle utilities for Compose implementation("androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // Annotation processor kapt("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation ("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
Java
Odlotowe
dependencies { def lifecycle_version = "2.8.7" def arch_version = "2.2.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version" // LiveData implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version" // Lifecycles only (without ViewModel or LiveData) implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version" // Saved state module for ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version" // Annotation processor annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // alternately - if using Java8, use the following instead of lifecycle-compiler implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" // optional - helpers for implementing LifecycleOwner in a Service implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version" // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" // optional - ReactiveStreams support for LiveData implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version" // optional - Test helpers for LiveData testImplementation "androidx.arch.core:core-testing:$arch_version" // optional - Test helpers for Lifecycle runtime testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version" }
Kotlin
dependencies { val lifecycle_version = "2.8.7" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // Annotation processor annotationProcessor("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.
Opinia
Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli zauważysz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nowy problem, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz dodać swój głos do istniejącego problemu, klikając przycisk z gwiazdką.
Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.
Wersja 2.9
Wersja 2.9.0-alpha07
13 listopada 2024 r.
androidx.lifecycle:lifecycle-*:2.9.0-alpha07
został zwolniony. Wersja 2.9.0-alpha07 zawiera te komity.
Zgodność Kotlin Multiplatform
- Cykl życia
ViewModel SavedState
jest teraz zgodny z KMP. Dzięki temu możesz używaćSavedStateHandle
w kodzie ogólnym. (Ib6394, b/334076622)
Obsługa serializacji KotlinX
Dzięki obsłudze serializacji KotlinX dodanej w SavedState
1.3.0-alpha05
wprowadziliśmysaved
, czyli nieaktywny obiekt delegowany, który ułatwia przechowywanie klas@Serializable
wSavedStateHandle
i ich automatyczne przywracanie po zakończeniu działania procesu i jego ponownym uruchomieniu. Delegatesaved
jest leniwy i nie wywoła funkcji lambdainit
ani nie zapisze niczego w tablicySavedStateHandle
, dopóki nie uzyska do niej dostępu. (I47a88, b/376026744)@Serializable data class Person(val firstName: String, val lastName: String) class MyViewModel(handle: SavedStateHandle) : ViewModel() { var person by handle.saved { Person("John", "Doe") } fun onPersonChanged(person: Person) { this.person = person } }
Zmiany w interfejsie API
- Dodaj
getMutableStateFlow
doSavedStateHandle
, aby zwrócićMutableStateFlow
. Ta nowa funkcja jest przeznaczona tylko dla kluczy i nie można jej używać zgetLiveData
. Jeśli spróbujesz użyć obu metod do uzyskania dostępu do tego samego stanu, zostanie zgłoszony wyjątek. (I04a4f, b/375408415)
Wersja 2.9.0-alpha06
30 października 2024 r.
androidx.lifecycle:lifecycle-*:2.9.0-alpha06
został zwolniony. Wersja 2.9.0-alpha06 zawiera te komity.
Zmiany w zachowaniu
- Stan
Lifecycle.DESTROYED
jest stanem końcowym, a każda próba przeniesieniaLifecycle
do innego stanu spowoduje stanIllegalStateException
. (I116c4, b/370577987) SavedStateHandle
nie zawiera już żadnych wartościSavedStateProvider.saveState()
, gdy zwracana wartośćBundle
jest pusta. (I910b5, b/370577987)
Poprawki błędów
Lifecycle.eventFlow
jest teraz prawidłowo wypełniany, gdyLifecycle
ma wartośćDESTROYED
(I293b2, b/374043130)
Wersja 2.9.0-alpha05
16 października 2024 r.
androidx.lifecycle:lifecycle-*:2.9.0-alpha05
jest publikowana bez istotnych zmian. Wersja 2.9.0-alpha05 zawiera te komity.
Wersja 2.9.0-alpha04
2 października 2024 r.
androidx.lifecycle:lifecycle-*:2.9.0-alpha04
został zwolniony. Wersja 2.9.0-alpha04 zawiera te komity.
Kotlin Multiplatform
- Moduł
lifecycle-viewmodel-savedstate
jest teraz skonfigurowany tak, aby był zgodny z KMP w ramach przygotowań do udostępnienia interfejsów API, takich jakSavedStateHandle
, w przyszłej wersji w ramach wspólnego zestawu źródeł. (I503ed, I48764, b/334076622)
Wersja 2.9.0-alpha03
18 września 2024 r.
androidx.lifecycle:lifecycle-*:2.9.0-alpha03
został zwolniony. Wersja 2.9.0-alpha03 zawiera te komity.
Poprawki błędów
- Zmiany w cyklu życia
2.8.6
: błąd LintNullSafeMutableLiveData
został poprawiony, aby uniknąć fałszywie pozytywnych wyników. (85fed6, b/181042665)
Aktualizacje zależności
- Zmiana w Cyklu życia
2.8.6
: środowisko wykonawcze Compose w ramach cyklu życia teraz zależy od środowiska wykonawczego Compose1.7.1
- Cykl życia środowiska wykonawczego zależy teraz od ProfileInstaller
1.4.0
Wersja 2.9.0-alpha02
4 września 2024 r.
androidx.lifecycle:lifecycle-*:2.9.0-alpha02
został zwolniony. Wersja 2.9.0-alpha02 zawiera te komity.
Poprawki błędów
- W sekcji Cykl życia
2.8.5
: zaktualizuj regułyandroidx.lifecycle.ReportFragment
ProGuard, aby zezwolić na zaciemnianie . (ff898e1)
Darowizna zewnętrzna
- Przenieś
androidx.compose.ui.platform.LocalLifecycleOwner
do wspólnego zbioru źródeł (KMP). Dziękujemy Ivanowi Matkovowi z JetBrains za pomoc. (8cd5d03) - Zmiana w Cykl życia
2.8.5
: delegat rozszerzenia SavedStateHandle.saveable obsługuje teraz wartości null. Dziękujemy Romanowi Kalukiewiczowi za pomoc. (0d78ea6)
Wersja 2.9.0-alpha01
7 sierpnia 2024 r.
androidx.lifecycle:lifecycle-*:2.9.0-alpha01
został zwolniony. Wersja 2.9.0-alpha01 zawiera te komity.
Kotlin Multiplatform
lifecycle-testing
jest teraz zgodny z KMP. (Iea41e)- Dodanie obsługi
linuxArm64
w wersji Kotlin Multiplatform (I139d3, b/338268719)
Nowe funkcje
- Dostępny jest nowy artefakt
androidx.lifecycle:lifecycle-viewmodel-testing
KMP, który udostępnia klasęViewModelScenario
do testowania widoków modelu w odizolowaniu. Obsługuje onaonCleared
(wszystkie platformy) iSavedStateHandle
(tylko Android). (337f68d, c9b3409, 9799a95c, b/264602919) - Tworzenie
ViewModel
za pomocąViewModelProvider
jest teraz bezpieczne dla wątku; adnotacje@MainThread
zostały usunięte. (Ifd978, b/237006831)
Zmiany w interfejsie API
- Dodaj funkcję fabryki
CreationExtras.Key()
, aby uprościć tworzenie anonimowych obiektówCreationExtras.Key
. (I970ee) CreationExtras
zawiera teraz przeciążenia operatorów podobnych do map, aby umożliwić idiomatyczne manipulowanie treściami w Kotlinie. Umożliwia użycie właściwościin
,+=
i+
zCreationExtras
. (Ib4353)CreationExtras
implementuje teraz metodyequals
,hashCode
itoString
. (Ib4353)NewInstanceFactory
jest teraz dostępny na platformach JVM Desktop i Android. (d3d0892)- Właściwość rozszerzenia w wierszu, która umożliwia bezpieczne udostępnianie aplikacji w wersji języka Kotlin 2.0 (I39df2)
Poprawki błędów
- Usunięto ręczne określanie dostępu do nowych interfejsów API platformy, ponieważ odbywa się to automatycznie za pomocą modelowania interfejsu API podczas korzystania z R8 z AGP 7.3 lub nowszym (np. R8 w wersji 3.3) oraz dla wszystkich kompilacji podczas korzystania z AGP 8.1 lub nowszego (np. D8 w wersji 8.1). Klienci, którzy nie korzystają z AGP, powinni zaktualizować D8 do wersji 8.1 lub nowszej. Więcej szczegółów znajdziesz w tym artykule. (If6b4c, b/345472586)
Wersja 2.8
Wersja 2.8.7
30 października 2024 r.
androidx.lifecycle:lifecycle-*:2.8.7
został zwolniony. Wersja 2.8.7 zawiera te komitowane zmiany.
Zmiany w interfejsie API
- Usługa
androidx.compose.ui.platform.LocalLifecycleOwner
jest teraz dostępna w ramach wspólnego zbioru źródeł (KMP). (6a3f5b3) lifecycle-runtime-compose
: usuniętodesktop
artefakty i dodano-jvmStubs
oraz-linuxx64Stubs
. Żadnego z tych celów nie należy używać. Są to elementy zastępcze, które ułatwiają pracę Jetbrains Compose. (6a3f5b3)
Wersja 2.8.6
18 września 2024 r.
androidx.lifecycle:lifecycle-*:2.8.6
został zwolniony. Wersja 2.8.6 zawiera te komity.
Poprawki błędów
- W przypadku błędu
NullSafeMutableLiveData
w Lint poprawiliśmy obsługę inteligentnych wywołań, aby uniknąć fałszywie pozytywnych wyników. (85fed6, b/181042665)
Aktualizacje zależności
- Środowisko wykonawcze Compose w cyklu życia teraz zależy od środowiska wykonawczego Compose
1.7.1
.
Wersja 2.8.5
4 września 2024 r.
androidx.lifecycle:lifecycle-*:2.8.5
został zwolniony. Wersja 2.8.5 zawiera te komitowane zmiany.
Poprawki błędów
- Zaktualizuj reguły
androidx.lifecycle.ReportFragment
ProGuard, aby zezwolić na zaciemnianie . (ff898e1)
Darowizna zewnętrzna
- Delegat rozszerzenia
SavedStateHandle.saveable
obsługuje teraz wartości null. Dziękujemy Romanowi Kalukiewiczowi za pomoc. (0d78ea6)
Wersja 2.8.4
24 lipca 2024 r.
androidx.lifecycle:lifecycle-*:2.8.4
został zwolniony. Wersja 2.8.4 zawiera te komisy.
Poprawki błędów
LiveData.asFlow()
obsługuje teraz poprawnie przypadki, w których zwrócony przepływ jest natychmiast zakończony po otrzymaniu wartości ustawionej wLiveData
(na przykład podczas używaniatake(1)
). (I9c566)- Zakończenie
Lifecycle*Effect
jest teraz idempotentne (czyli jeśli metodaonStopOrDispose
została wywołana z powodu zatrzymania cyklu życia, nie zostanie wywołana po zakończeniu, chyba że cykl życia wróci do stanuSTARTED
). (I5f607, b/352364595)
Wersja 2.8.3
1 lipca 2024 r.
androidx.lifecycle:lifecycle-*:2.8.3
został zwolniony. Wersja 2.8.3 zawiera te komitowane zmiany.
Poprawki błędów
- Rozwiązaliśmy problem z kompatybilnością wsteczną Lifecycle 2.8 z Compose 1.6.0 i starszymi wersjami podczas kompresowania kodu. (aosp/3133056, b/346808608)
Wersja 2.8.2
12 czerwca 2024 r.
androidx.lifecycle:lifecycle-*:2.8.2
został zwolniony. Wersja 2.8.2 zawiera te komitowane zmiany.
Poprawki błędów
- Rozwiązaliśmy problemy z błędami
CompositionLocal LocalLifecycleOwner not present
występującymi podczas korzystania z Lifecycle 2.8.X z Compose 1.6.X lub wcześniejszą wersją – teraz możesz używać Lifecycle 2.8.2 z dowolną wersją Compose bez konieczności stosowania obejść. (aosp/3105647, b/336842920) ViewModelProvider
nie będzie się już zawieszać, gdy mieszasz poprzednie wersje zależności cyklu życiacompileOnly
z wersjami 2.8 i nowszymi. Rozwiązano problemy z bibliotekami takimi jak LeakCanary. (I80383, b/341792251)
Wersja 2.8.1
29 maja 2024 r.
androidx.lifecycle:lifecycle-*:2.8.1
został zwolniony. Wersja 2.8.1 zawiera te komity.
Poprawki błędów
lifecycle-viewmodel-compose
ma teraz tylko wspólną zależność odcompose-runtime
, co powoduje usunięcie wspólnej zależności odcompose-ui
. Element Androida zachowujecompose-ui
dla zgodności. (aosp/3079334, b/339562627)- Integracja
ViewModel
z usługąsaveable
za pomocą delegatów usług korzysta teraz z nazwy klasy jako części automatycznie generowanego klucza, co zapobiega konfliktom, jeśli wiele klas używa tej samej usługiSavedStateHandle
. (aosp/3063463)
Wersja 2.8.0
14 maja 2024 r.
androidx.lifecycle:lifecycle-*:2.8.0
został zwolniony. Wersja 2.8.0 zawiera te komity.
Ważne zmiany od wersji 2.7.0
- Interfejs
LocalLifecycleOwner
został przeniesiony z interfejsu Compose do interfejsulifecycle-runtime-compose
, aby można było używać interfejsów API pomocniczych opartych na Compose poza interfejsem Compose. - Element
lifecycle-runtime-compose
zawiera teraz interfejsy APIdropUnlessResumed
idropUnlessStarted
, które umożliwiają pomijanie kliknięć lub innych zdarzeń, które występują nawet po spadku wartościLifecycleOwner
poniżej podanej wartościLifecycle.State
. Można go na przykład użyć w komponencie Navigation Compose, aby uniknąć obsługi zdarzeń kliknięcia po rozpoczęciu przejścia na inny ekran:onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
Parametr
ViewModel.viewModelScope
jest teraz parametrem konstruktora, który można zastąpić, co pozwala wstrzyknąć własny rozsyłający iSupervisorJob()
lub zastąpić domyślny parametr za pomocą parametrubackgroundScope
dostępnego wrunTest
. (I2817c, b/264598574)class MyViewModel( // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob() ) : ViewModel(viewModelScope) { // Use viewModelScope as before, without any code changes } // Allows overriding the viewModelScope in a test fun Test() = runTest { val viewModel = MyViewModel(backgroundScope) }
Funkcja
ViewModel
została przepisana w Kotlinie i korzysta teraz z funkcjiAutoClosable
zamiastCloseable
. Teraz obsługuje dodawanie obiektówAutoCloseable
za pomocąkey
, co umożliwia ich pobieranie za pomocągetCloseable()
.Wywoływanie interfejsów
LifecycleStartEffect
iLifecycleResumeEffect
bez klucza jest teraz błędem, ponieważ te interfejsy API stosują tę samą konwencję co interfejsDisposableEffect
, który odzwierciedlają.Wycofano
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
na rzeczLiveData.toPublisher(lifecycleOwner)
.Rozszerzenia
lifecycle-livedata-core-ktx
w języku Kotlin zostały przeniesione do modułulifecycle-livedata-core
.Funkcja
NullSafeMutableLiveData
została przebudowana, aby uniknąć wielu wyników fałszywie pozytywnych.
Zgodność Kotlin Multiplatform z cyklem życia aplikacji
Podstawowe interfejsy API cyklu życia w bibliotekach Lifecycle
, LifecycleOwner
, LifecycleObserver
, Lifecycle.State
, Lifecycle.Event
i LifecycleRegistry
są teraz dostarczane w elementach zgodnych z Kotlin Multiplatform.
Dotyczy to następujących artefaktów:
lifecycle-common
przenosi większość interfejsów API docommon
i oprócz Androida obsługuje jvm i iOS.lifecycle-runtime
przenosi większość interfejsów API docommon
i oprócz Androida obsługuje jvm i iOS.- Interfejs
lifecycle-runtime-ktx
jest teraz pusty, ponieważ wszystkie interfejsy API zostały przeniesione do interfejsulifecycle-runtime
. lifecycle-runtime-compose
przenosi wszystkie interfejsy API docommon
i wysyła artefakt Androida, który odpowiada obsłudze wielu platform wandroidx.compose
.
Zgodność ViewModel Kotlin Multiplatform
Element lifecycle-viewmodel
i interfejsy API, takie jak ViewModel
, ViewModelStore
, ViewModelStoreOwner
i ViewModelProvider
, są teraz dostarczane w elementach zgodnych z Kotlin Multiplatform.
Aby uwzględnić tę zmianę, metody takie jak ViewModelProvider
, które przyjmowały java.lang.Class<T>
, mają teraz odpowiednik, który przyjmuje kotlin.reflect.KClass<T>
.
Zgodność binarna na Androidzie została zachowana, ale w porównaniu z interfejsem API Androida do interfejsu API wspólnego wprowadzono kilka istotnych zmian:
- Tworzenie instancji
ViewModelProvider
odbywa się teraz za pomocą metodViewModelProvider.create()
, a nie przez bezpośrednie wywołanie konstruktora. ViewModelProvider.NewInstanceFactory
iViewModelProvider.AndroidViewModelFactory
są dostępne tylko na Androidzie.- Zalecamy, aby fabryki niestandardowe rozszerzały klasę
ViewModelProvider.Factory
i korzystały z metodycreate
, która przyjmuje parametrCreationExtras
, lub z bibliotekiviewModelFactory
Kotlin DSL.
- Zalecamy, aby fabryki niestandardowe rozszerzały klasę
- Użycie
ViewModelProvider
bez niestandardowej fabryki na platformach innych niż JVM spowoduje błądUnsupportedOperationException
. Na platformach JVM zgodność jest zachowana dzięki konstruktorowi ViewModel bez argumentów, jeśli nie zostanie podana niestandardowa fabryka. viewModelScope
będzie używany jakoEmptyCoroutineContext
na platformach, na którychDispatchers.Main
jest niedostępny (np. Linux).
Dotyczy to następujących artefaktów:
lifecycle-viewmodel
przenosi większość interfejsów API docommon
i oprócz Androida obsługuje jvm i iOS.- Interfejs
lifecycle-viewmodel-ktx
jest teraz pusty, ponieważ wszystkie interfejsy API zostały przeniesione do interfejsulifecycle-viewmodel
. lifecycle-viewmodel-compose
przenosi wszystkie interfejsy API docommon
i wysyła artefakt Androida, który odpowiada obsłudze wielu platform wandroidx.compose
.
Zmiany w zachowaniu
- Funkcja
InitializerViewModelFactory
(w tym funkcja kreatoraviewModelFactory
) będzie teraz wywoływać błądIllegalArgumentException
, jeśliinitializer
o tej samej wartościclazz: KClass<VM : ViewModel>
została już dodana. (Ic3a36)
Znane problemy
lifecycle-*:2.8.0
wymaga co najmniej wersji Compose 1.7.0-alpha05 (b/336842920).
Wersja 2.8.0-rc01
1 maja 2024 r.
androidx.lifecycle:lifecycle-*:2.8.0-rc01
został zwolniony. Wersja 2.8.0-rc01 zawiera te komisy.
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że profil referencyjny dla klas
lifecycle-common
nie był prawidłowo zapakowany. Teraz są one pakowane w pliku AARlifecycle-runtime
. (aosp/3038274, b/322382422) - Rozwiązaliśmy problem polegający na niezamierzonej zmianie kolejności usuwania instancji
AutoCloseable
dołączonych do ViewModel – przywróciliśmy poprzednią kolejność:addCloseable(String, AutoCloseable)
,addClosable(AutoCloseable)
ionCleared()
. (aosp/3041632) - Ulepszono domyślne zachowanie podczas tworzenia
viewModelScope
w środowiskach natywnych i JVM na komputer. (aosp/3039221)
Darowizna zewnętrzna
- Dziękujemy Victorowi Kroppowi za ulepszenie sprawdzania wątku głównego w JVM Desktop. (aosp/3037116)
Wersja 2.8.0-beta01
17 kwietnia 2024 r.
androidx.lifecycle:lifecycle-*:2.8.0-beta01
został zwolniony. Wersja 2.8.0-beta01 zawiera te commity.
Nowe funkcje
- Element
lifecycle-runtime-compose
jest teraz zgodny z Kotlin Multiplatform, a jego kod został przeniesiony do plikucommon
. Zawiera on element Android, który jest zgodny z obsługą wielu platform w przypadku plikuandroidx.compose
. (If7a71, I4f4a0, b/331769623)
Wersja 2.8.0-alpha04
3 kwietnia 2024 r.
androidx.lifecycle:lifecycle-*:2.8.0-alpha04
został zwolniony. Wersja 2.8.0-alpha04 zawiera te komity.
Nowe funkcje
- Element
lifecycle-viewmodel-compose
jest teraz zgodny z Kotlin Multiplatform, a jego kod został przeniesiony do plikucommon
. Zawiera on element Android, który jest zgodny z obsługą wielu platform w plikuandroidx.compose
. Aby uwzględnić tę zmianę, kompozytowa metodaviewModel
akceptuje teraz wartośćKClass
oprócz wartościjava.lang.Class
. (b/330323282)
Poprawki błędów
- Funkcja
NullSafeMutableLiveData
została przebudowana, aby uniknąć wielu wyników fałszywie pozytywnych. (I2d8c1, Iafb18, I03463, I7ecef)
Aktualizacja zależności
- Element
lifecycle-viewmodel-compose
zależy teraz od wersji Compose 1.6.0. - Cykl życia zależy teraz od instalatora profilu 1.3.1.
Wersja 2.8.0-alpha03
20 marca 2024 r.
androidx.lifecycle:lifecycle-*:2.8.0-alpha03
został zwolniony. Wersja 2.8.0-alpha03 zawiera te commity.
Nowe funkcje
Parametr
ViewModel.viewModelScope
jest teraz parametrem konstruktora, który można zastąpić, co pozwala wstrzyknąć własny rozsyłający iSupervisorJob()
lub zastąpić domyślny parametr za pomocą parametrubackgroundScope
dostępnego wrunTest
. (I2817c, b/264598574)class MyViewModel( // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob() ) : ViewModel(viewModelScope) { // Use viewModelScope as before, without any code changes } // Allows overriding the viewModelScope in a test fun Test() = runTest { val viewModel = MyViewModel(backgroundScope) }
Zgodność Kotlin Multiplatform
Element lifecycle-viewmodel
i interfejsy API, takie jak ViewModel
, ViewModelStore
, ViewModelStoreOwner
i ViewModelProvider
, są teraz dostarczane w elementach zgodnych z Kotlin Multiplatform. (b/214568825)
Aby uwzględnić tę zmianę, metody takie jak ViewModelProvider
, które przyjmowały java.lang.Class<T>
, mają teraz odpowiednik, który przyjmuje kotlin.reflect.KClass<T>
.
Zgodność binarna na Androidzie została zachowana, ale w porównaniu z interfejsem API Androida do interfejsu API wspólnego wprowadzono kilka istotnych zmian:
- Tworzenie instancji
ViewModelProvider
odbywa się teraz za pomocą metodViewModelProvider.create()
, a nie przez bezpośrednie wywołanie konstruktora. ViewModelProvider.NewInstanceFactory
iViewModelProvider.AndroidViewModelFactory
są dostępne tylko na Androidzie.- Zalecamy, aby fabryki niestandardowe rozszerzały klasę
ViewModelProvider.Factory
i korzystały z metodycreate
, która przyjmuje parametrCreationExtras
, lub z bibliotekiviewModelFactory
Kotlin DSL.
- Zalecamy, aby fabryki niestandardowe rozszerzały klasę
- Użycie
ViewModelProvider
bez niestandardowej fabryki na platformach innych niż JVM spowoduje błądUnsupportedOperationException
. Na platformach JVM zgodność jest zachowana dzięki konstruktorowi ViewModel bez argumentów, jeśli nie zostanie podana niestandardowa fabryka. viewModelScope
będzie używany jakoEmptyCoroutineContext
na platformach, na którychDispatchers.Main
jest niedostępny (np. Linux).
Zmiany w zachowaniu
- Funkcja
InitializerViewModelFactory
(w tym funkcja kreatoraviewModelFactory
) będzie teraz wywoływać błądIllegalArgumentException
, jeśliinitializer
o tej samej wartościclazz: KClass<VM : ViewModel>
została już dodana. (Ic3a36)
Poprawki błędów
ViewModel.getCloseable
obsługuje teraz duplikowane klucze: jeśli zkey
jest już powiązany zasóbAutoCloseable
, stary zasób zostanie zastąpiony i zamknięty. (Ibeb67)- Dostęp do
viewModelScope
ViewModel
jest teraz bezpieczny na poziomie wątku. (If4766, b/322407038)
Darowizna zewnętrzna
LocalLifecycleOwner
przeniesiono z interfejsu Compose do interfejsu lifecycle-runtime-compose, aby można było używać interfejsów API pomocniczych opartych na Compose poza interfejsem Compose. Dziękujemy Jake’owi Whartonowi za pomoc. (I6c41b, b/328263448)
Wersja 2.8.0-alpha02
21 lutego 2024 r.
androidx.lifecycle:lifecycle-*:2.8.0-alpha02
został zwolniony. Wersja 2.8.0-alpha02 zawiera te commity.
Nowe funkcje
- Dodano interfejsy API
dropUnlessResumed
idropUnlessStarted
, które umożliwiają pomijanie kliknięć i innych zdarzeń, które występują nawet wtedy, gdy wartośćLifecycleOwner
spadnie poniżej podanej wartościLifecycle.State
. Można go na przykład użyć w komponencie Navigation Compose, aby uniknąć obsługi zdarzeń kliknięcia po rozpoczęciu przejścia na inny ekran:onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
(Icba83, b/317230685)
Konwersje Kotlina
ViewModel
jest teraz napisany w języku Kotlin (I16f26, b/214568825)- Rozszerzenia
lifecycle-viewmodel-ktx
w języku Kotlin zostały przeniesione do podstawowego modułu cyklu życia. (Id787b, b/274800183) - Rozszerzenia
lifecycle-runtime-ktx
w języku Kotlin zostały przeniesione do podstawowego modułu cyklu życia. (Ic3686, b/274800183) - Rozszerzenia
lifecycle-livedata-core-ktx
w języku Kotlin zostały przeniesione do podstawowego modułu cyklu życia. (I54a3d, b/274800183)
Zgodność Kotlin Multiplatform
- Podstawowe interfejsy API cyklu życia w bibliotekach
Lifecycle
,LifecycleOwner
,LifecycleObserver
,Lifecycle.State
,Lifecycle.Event
iLifecycleRegistry
są teraz dostarczane w elementach zgodnych z Kotlin Multiplatform. (b/317249252)
Zmiany w interfejsie API
- Wywoływanie interfejsów
LifecycleStartEffect
iLifecycleResumeEffect
bez klucza jest teraz błędem, ponieważ te interfejsy API stosują tę samą konwencję co interfejsDisposableEffect
, który odzwierciedlają. (Ib0e0c, b/323518079) - W elementach
ViewModel
używa się teraz wartościAutoCloseable
zamiastCloseable
. Jest to zmiana zgodna wstecznie. (I27f8e, b/214568825) - Wycofano
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
na rzeczLiveData.toPublisher(lifecycleOwner)
. (Iabe29, b/262623005)
Darowizna zewnętrzna
- Dziękujemy Ivanowi Matkovowi z Jetbrains za pomoc w przełożeniu Lifecycle na Kotlin Multiplatform. (aosp/2926690, I0c5ac, If445d)
Wersja 2.8.0-alpha01
24 stycznia 2024 r.
androidx.lifecycle:lifecycle-*:2.8.0-alpha01
został zwolniony. Wersja 2.8.0-alpha01 zawiera te commity.
Nowe funkcje
ViewModel
obsługuje teraz dodawanie obiektówCloseable
za pomocąkey
, co umożliwia ich pobieranie za pomocągetCloseable()
. (I3cf63)
Wersja 2.7
Wersja 2.7.0
10 stycznia 2024 r.
androidx.lifecycle:lifecycle-*:2.7.0
został zwolniony. Wersja 2.7.0 zawiera te commity.
Ważne zmiany od wersji 2.6.0
TestLifecycleOwner
zawiera teraz funkcję zawieszaniasetCurrentState()
, która zapewnia, że zmiana stanu i wszystkie wywołania zwrotneLifecycleObserver
zostaną zakończone przed powrotem. W przeciwieństwie do bezpośredniego ustawiania właściwościcurrentState
ta metoda nie używa funkcjirunBlocking
, dzięki czemu można ją bezpiecznie używać w ramach współbieżnej funkcji, takiej jak funkcja udostępniana przezrunTest
.- Rozszerzenia
LiveData
funkcjimap
iswitchMap
odzwierciedlają teraz działanie funkcjidistinctUntilChanged
– jeśli w funkcjiLiveData
jest ustawiona wartośćvalue
, funkcjamap
/switchMap
zostanie wywołana natychmiast, aby wypełnić parametrvalue
zwracanej funkcjiLiveData
. Dzięki temu początkowa wartość zostanie ustawiona jako część pierwszej kompozycji (w przypadku użycia zobserveAsState()
), ale nie zmieni to zachowania obserwacji – wartości źródłoweLiveData
będą nadal stosowane dopiero po rozpoczęciu obserwowaniaLiveData
. - W tej wersji rozwiązujemy problem, który powodował, że
SavedStateHandle
nie przywracało prawidłowo niestandardowych klasParcelable
po zakończeniu i ponownym uruchomieniu procesu. Ze względu na utratę informacji o typie przez platformę Android tablice niestandardowych obiektów Parcelable wymagają dodatkowej pracy (ręcznego tworzenia tablicy typów o odpowiednim typie). Dokumentacja dotycząca funkcjiget
,getLiveData
igetStateFlow
uwzględnia teraz to ograniczenie. - Reguły proguard keep powiązane z
LifecycleObserver
zostały usunięte. Oznacza to, że kod chroniony, który chce używać interfejsów API za pomocą mechanizmu odzwierciedlenia (np. za pomocą adnotacji@OnLifecycleEvent
, która została już dawno wycofana) będzie musiał zawierać własne reguły keep w przypadku konkretnego przypadku użycia.
Widoczność zdarzeń z cyklu życia
- Zamiast używać
LifecycleEventObserver
możesz teraz obserwowaćFlow
Lifecycle.Event
za pomocą metody rozszerzeniaLifecycle.asFlow()
. - Użytkownicy Jetpack Compose mogą teraz używać
LifecycleEventEffect
do uruchamiania efektów ubocznych Compose na podstawieLifecycle.Event
.
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
viewModel.refreshData()
}
// …
}
- Użytkownicy Jetpack Compose mogą używać zdarzeń
LifecycleStartEffect
iLifecycleResumeEffect
do obsługi par zdarzeń – odpowiednio „started” (rozpoczęto) i „resumed” (wznowiono). Ten interfejs API odzwierciedla ten, który znajduje się wDisposableEffect
, i jest odpowiedni w przypadkach, gdy zmiana wprowadzona podczas zwiększania stanu musi zostać odwrócona podczas zmniejszania stanu.
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
LifecycleStartEffect(viewModel) {
val timeTracking = viewModel.startTrackingTimeOnScreen()
onStopOrDispose {
timeTracking.stopTrackingTimeOnScreen()
}
}
// …
}
Więcej informacji znajdziesz w artykule Uruchamianie kodu w związku ze zdarzeniami cyklu życia.
Widoczność stanu cyklu życia
- Bieżącą wartość
Lifecycle.State
można teraz obserwować za pomocą właściwościLifecycle.currentStateFlow
, która zwraca wartośćStateFlow
, gdzievalue
to bieżąca wartośćLifecycle.State
. - Użytkownicy Jetpack Compose mogą użyć rozszerzenia
Lifecycle.currentStateAsState()
, aby bezpośrednio udostępnićLifecycle.State
jako ComposeState
. Jest to równoważne (i krótsze)lifecycle.currentStateFlow.collectAsState()
.
Więcej informacji znajdziesz w artykule Zbieranie stanu cyklu życia za pomocą przepływów.
Wersja 2.7.0-rc02
13 grudnia 2023 r.
androidx.lifecycle:lifecycle-*:2.7.0-rc02
został zwolniony. Wersja 2.7.0-rc02 zawiera te commity.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że
SavedStateHandle
nie przywracał prawidłowo niestandardowych klasParcelable
po zakończeniu i ponownym utworzeniu procesu. Ze względu na utratę informacji o typie przez platformę Android tablice niestandardowych obiektów Parcelable wymagają dodatkowej pracy (ręcznego tworzenia tablicy typów o odpowiednim typie). Dokumentacja dotycząca funkcjiget
,getLiveData
igetStateFlow
uwzględnia teraz to ograniczenie. (I0b55a)
Wersja 2.7.0-rc01
15 listopada 2023 r.
androidx.lifecycle:lifecycle-*:2.7.0-rc01
został zwolniony. Wersja 2.7.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Funkcje
LifecycleStartEffect
iLifecycleResumeEffect
prawidłowo usuwają i ponownie tworzą blok efektu, jeśli zmieni się parametrLifecycleOwner
. (Ia25c6)
Wersja 2.7.0-beta01
1 listopada 2023 roku
androidx.lifecycle:lifecycle-*:2.7.0-beta01
jest opublikowany bez wprowadzenia zmian. Wersja 2.7.0-beta01 zawiera te commity.
- Wersja beta z niewielkimi zmianami w porównaniu z poprzednią wersją.
Wersja 2.7.0-alpha03
18 października 2023 r.
androidx.lifecycle:lifecycle-*:2.7.0-alpha03
został zwolniony. Wersja 2.7.0-alpha03 zawiera te commity.
Nowe funkcje
lifecycle-runtime-testing
zawiera teraz nową kontrolę Lint, która zapobiega ustawianiuLifecycle.State
wTestLifecycleOwner
za pomocą polacurrentState
w ramach coroutine. Sprawdzanie Lint sugeruje teraz zawieszeniesetCurrentState
, co umożliwia ustawienieLifecycle.State
bez blokowania. (Icf728, b/297880630)
Poprawki błędów
- Rozwiązaliśmy problem z funkcją
LiveData.switchMap
, w którym zwracanie tego samego wystąpieniaLiveData
w ramach pierwszego i następnego wywołania uniemożliwiało dodanie tego wystąpienia jako źródła.LiveData
(Ibedcba7)
Wersja 2.7.0-alpha02
6 września 2023 r.
androidx.lifecycle:lifecycle-*:2.7.0-alpha02
został zwolniony. Wersja 2.7.0-alpha02 zawiera te commity.
Nowe funkcje
TestLifecycleOwner
zawiera teraz funkcję zawieszaniasetCurrentState()
, aby umożliwić użytkownikom korzystanie z funkcjiTestLifecycleOwner
w ramach coroutine, np. tej udostępnianej przezrunTest
. (I329de, b/259344129)
Zmiany w interfejsie API
- Wszystkie pliki z modułów
lifecycle-livedata-ktx
zostały przeniesione do głównego modułulifecycle-livedata
. (I10c6f, b/274800183)
Zmiany w zachowaniu
- Rozszerzenia
LiveData.map()
iLiveData.switchMap()
ustawiają terazvalue
zwracanego obiektuLiveData
, jeśli poprzedni obiektLiveData
ma ustawioną wartość, co zapewnia, że korzystanie z wynikającej z tego funkcji LiveData w Jetpack Compose będzie miało prawidłowy stan w początkowej kompozycji. (I91d2b, b/269479952) ViewModel
addCloseable()
teraz natychmiast zamykaCloseable
, jeśliViewModel
otrzymało już połączenie zonCleared()
. (I4712e, b/280294730)
Poprawki błędów
- Z cyklu życia
2.6.2
: rozwiązaliśmy problem, który powodował, że po zakończeniu procesuSavedStateHandle
nie był prawidłowo przywracany, jeśli stan został przywrócony, wywołanosave()
bez zapisywania stanu w rodzicuSavedStateRegistry
, a następnie stan został przywrócony ponownie. Rozwiązanie to naprawia interakcję międzyrememberSaveable
a elementemNavHost
w komponencie Navigation Compose. (aosp/2729289)
Wersja 2.7.0-alpha01
26 lipca 2023 r.
androidx.lifecycle:lifecycle-*:2.7.0-alpha01
został zwolniony. Wersja 2.7.0-alpha01 zawiera te commity.
Zmiany w interfejsie API
- Wartość
Lifecycle.State
jest teraz dostępna do obserwacji w komponencie za pomocą funkcjiLifecycle.currentStateFlow
, która zwraca wartośćStateFlow
, gdzievalue
to bieżąca wartośćLifecycle.State
. (Ib212d, b/209684871) Lifecycle.Event
s może teraz być obserwowany jakoFlow
zLifecycle.asFlow().
(If2c0f, b/176311030)- Dodano interfejs API
LifecycleResumeEffect
, aby można było uruchamiać kompozycjęSideEffect
na podstawie wywołań zwrotnych zdarzeńLifecycle.Event.ON_RESUME
iLifecycle.Event.ON_PAUSE
. (I60386, b/235529345) - Dodano interfejs API
LifecycleStartEffect
, aby można było uruchamiać komponentySideEffect
na podstawie wywołań zwrotnych zdarzeńLifecycle.Event.ON_START
iLifecycle.Event.ON_STOP
. (I5a8d1, b/235529345) - Dodano interfejs API
LifecycleEventEffect
, aby można było uruchamiać komponentySideEffect
na podstawieLifecycle.Event
. (Ic9794, b/235529345) - Dodano rozszerzenie
Lifecycle.collectAsState()
, aby umożliwić bezpośrednie wyświetlanieLifecycle.State
jako okna tworzenia wiadomościState
. Jest to równoważne (i krótsze)lifecycle.currentStateFlow.collectAsState()
. (I11015, b/235529345)
Poprawki błędów
- Rozszerzenie
LiveData.distinctUntilChanged()
ustawia teraz wartośćvalue
zwracanego elementuLiveData
, jeśli poprzedni elementLiveData
ma ustawioną wartość. Nie zmienia to zachowania obserwacji – zaktualizowane wartości ze źródłaLiveData
będą miały zastosowanie dopiero wtedy, gdy zaczniesz obserwowaćLiveData
zwracane przezdistinctUntilChanged()
. (Ib482f) - Reguły proguard keep powiązane z
LifecycleObserver
zostały usunięte. Oznacza to, że chroniony kod, który chce używać interfejsów API za pomocą mechanizmu odzwierciedlenia, musi podać własne reguły dotyczące przechowywania danych w przypadku konkretnego zastosowania. (Ia12fd)
Wersja 2.6
Wersja 2.6.2
6 września 2023 r.
androidx.lifecycle:lifecycle-*:2.6.2
został zwolniony. Wersja 2.6.2 zawiera te commity.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że
SavedStateHandle
nie był prawidłowo przywracany po zakończeniu procesu, jeśli stan został przywrócony, wywołaniesave()
nie było poprzedzone zapisaniem stanu w rodzicuSavedStateRegistry
, a następnie stan był ponownie przywracany. Rozwiązanie to naprawia interakcję międzyrememberSaveable
a elementemNavHost
w komponencie Navigation Compose. (aosp/2729289)
Wersja 2.6.1
22 marca 2023 r.
androidx.lifecycle:lifecycle-*:2.6.1
został zwolniony. Wersja 2.6.1 zawiera te zatwierdzenia.
Aktualizacje zależności
- Funkcja
lifecycle-viewmodel-savedstate
zależy teraz od SavedState1.2.1
. (cd7251) - Cykl życia zależy teraz od ProfileInstaller
1.3.0
. (f9d30b)
Wersja 2.6.0
8 marca 2023 r.
androidx.lifecycle:lifecycle-*:2.6.0
został zwolniony. Wersja 2.6.0 zawiera te commity.
Ważne zmiany od wersji 2.5.0
- Właściwość
LiveData
zawiera teraz nową właściwośćisInitialized
, która wskazuje, czy w elementachLiveData
została kiedykolwiek ustawiona wartość jawna. Umożliwia to rozróżnienie wartości zwracanych przez funkcjęliveData.value
, gdy nie została ustawiona żadna wartość, i wartości jawnejnull
.null
- Klasa
MediatorLiveData
zawiera teraz konstruktor do ustawiania wartości początkowej. - Dodano nowe rozszerzenie
StateFlow
iFlow
collectAsStateWithLifecycle()
, które zbiera dane z przepływów i reprezentuje najnowszą wartość jako stan Compose w sposób uwzględniający cykl życia. - Metody
Lifecycle.launchWhenX
iLifecycle.whenX
zostały wycofane, ponieważ korzystanie z metody wstrzymywania rozsyłacza może w niektórych przypadkach powodować marnowanie zasobów. Zalecamy użycieLifecycle.repeatOnLifecycle
. Więcej informacji o jednorazowym zawieszeniu pracy znajdziesz w tym artykule, w którym wyjaśniono, dlaczego jest to niebezpieczne. - Konwersja na Kotlin – duża liczba klas cyklu życia została przekonwertowana na Kotlin. Wszystkie przekonwertowane klasy nadal zachowują zgodność binarną z poprzednimi wersjami. W klasach napisanych w języku Kotlin:
ViewTreeLifecycleOwner
,LiveDataReactiveStreams
,HasDefaultViewModelProviderFactory
,ViewTreeViewModelStoreOwner
,Transformations
,ViewModelStoreOwner
,LifecycleOwner
wprowadzono zmiany niezgodne z źródłem.
Tabela poniżej zawiera konwersje źródłowe w nowej wersji cyklu życia.
Cykl życia 2.5 | Lifecycle 2.5 (KTX) | Cykl życia 2.6 |
---|---|---|
Transformations.switchMap(liveData) {...} |
liveData.switchMap {...} |
liveData.switchMap {...} |
Transformations.map(liveData) {...} |
liveData.map {...} |
liveData.map {...} |
Transformations.distinctUntilChanged(liveData) {...} |
liveData.distinctUntilChanged{...} |
liveData.distinctUntilChanged{...} |
LiveDataReactiveStreams.fromPublisher(publisher) |
publisher.toLiveData() |
publisher.toLiveData() |
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) |
liveData.toPublisher(lifecycleOwner) |
liveData.toPublisher(lifecycleOwner) |
override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory |
override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory |
override val defaultViewModelProviderFactory = factory |
override fun getDefaultViewModelCreationExtras(): CreationExtras = extras |
override fun getDefaultViewModelCreationExtras(): CreationExtras = extras |
override val defaultViewModelProviderCreationExtras = extras |
ViewTreeLifecycleOwner.set(view, owner) |
ViewTreeLifecycleOwner.set(view, owner) |
view.setViewTreeLifecycleOwner(owner) |
ViewTreeLifecycleOwner.get(view) |
view.findViewTreeLifecycleOwner() |
view.findViewTreeLifecycleOwner() |
override fun getViewModelStore(): ViewModelStore = store |
override fun getViewModelStore(): ViewModelStore = store |
override val viewModelStore: ViewModelStore = store |
override fun getLifecycle(): Lifecycle = registry |
override fun getLifecycle(): Lifecycle = registry |
override val lifecycle: Lifecycle get() = registry |
- Wartość null metody
onChanged
obiektuObserver
utworzonego w Kotlinie jest teraz zgodna z wartością null typu ogólnego. Jeśli chcesz, abyObserver.onChanged()
akceptował typ nullable, musisz utworzyć instancjęObserver
z typem nullable. - Te klasy zostały również przekonwertowane na Kotlin, ale pozostają zgodne ze źródłem:
DefaultLifecycleObserver
,LifecycleEventObserver
,Lifecycle
,LifecycleRegistry
,LifecycleObserver
,ViewModelStore
,AndroidViewModel
,AbstractSavedStateViewModelFactory
,LifecycleService
,ServiceLifecycleDispatcher
iProcessLifecycleOwner
.
Wersja 2.6.0-rc01
22 lutego 2023 roku
androidx.lifecycle:lifecycle-*:2.6.0-rc01
został zwolniony. Wersja 2.6.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Rozszerzenie
LiveData.distinctUntilChanged()
ustawia teraz wartośćvalue
zwracanego elementuLiveData
, jeśli poprzedni elementLiveData
ma ustawioną wartość. Nie zmienia to zachowania obserwacji – zaktualizowane wartości ze źródłaLiveData
będą miały zastosowanie dopiero wtedy, gdy zaczniesz obserwowaćLiveData
zwracane przezdistinctUntilChanged()
. (Ib482f)
Wersja 2.6.0-beta01
8 lutego 2023 r.
androidx.lifecycle:lifecycle-*:2.6.0-beta01
został zwolniony. Wersja 2.6.0-beta01 zawiera te commity.
Konwersje Kotlina
LifecycleOwner
jest teraz napisany w języku Kotlin. Jest to zmian niekompatybilna ze źródłem w przypadku klas napisanych w Kotlinie – muszą one teraz zastąpić właściwośćlifecycle
, a nie implementować poprzedniej funkcjigetLifecycle()
. (I75b4b, b/240298691)ViewModelStoreOwner
jest teraz w Kotlinie. Jest to zmian niekompatybilna ze źródłem w przypadku klas napisanych w Kotlinie – muszą one teraz zastąpić właściwośćviewModelStore
, a nie implementować poprzedniej funkcjigetViewModelStore()
. (I86409, b/240298691)- Rozszerzenie Kotlina w
LifecycleOwner
, które udostępnia polelifecycleScope
, zostało przeniesione do artefaktulifecycle-common
zlifecycle-runtime-ktx
. (I41d78, b/240298691) - Rozszerzenie Kotlina w
Lifecycle
, które udostępnia polecoroutineScope
, zostało przeniesione do artefaktulifecycle-common
zlifecycle-runtime-ktx
. (Iabb91, b/240298691)
Wersja 2.6.0-alpha05
25 stycznia 2023 r.
androidx.lifecycle:lifecycle-*:2.6.0-alpha05
został zwolniony. Wersja 2.6.0-alpha05 zawiera te commity.
Konwersje Kotlina
Transformations
jest teraz napisany w języku Kotlin. Jest to zmianie niezgodna ze źródłem w przypadku klas napisanych w Kotlinie, które bezpośrednio używały składni takiej jakTransformations.map
. Kod Kotlina musi teraz używać składni metody rozszerzenia Kotlina, która była wcześniej dostępna tylko przy użyciulifecycle-livedata-ktx
. W przypadku języka programowania Java wersje tych metod, które przyjmują metodęandroidx.arch.core.util.Function
, są wycofywane i zastępowane wersjami, które przyjmują metodę KotlinFunction1
. Ta zmiana zachowuje zgodność binarną. (I8e14f)ViewTreeViewModelStoreOwner
jest teraz napisany w języku Kotlin. Jest to zmiana niezgodna ze źródłem w przypadku klas napisanych w Kotlinie. Aby ustawić i znaleźć wcześniej ustawionego właściciela, musisz teraz bezpośrednio zaimportować i użyć metod rozszerzenia Kotlina wView
klasyandroidx.lifecycle.setViewTreeViewModelStoreOwner
iandroidx.lifecycle.findViewTreeViewModelStoreOwner
. Jest on zgodny z binarnymi implementacjami w języku Java i nadal zgodny ze źródłami. (Ia06d8, Ib22d8, b/240298691)- Interfejs
HasDefaultViewModelProviderFactory
jest teraz napisany w języku Kotlin. Jest to zmiana niezgodna ze źródłem w przypadku klas napisanych w Kotlinie – teraz muszą one zastąpić właściwościdefaultViewModelProviderFactory
idefaultViewModelCreationExtras
zamiast implementować poprzednie odpowiadające im funkcje. (Iaed9c, b/240298691) Observer
jest teraz napisany w języku Kotlin. MetodaonChanged()
używa teraz nazwyvalue
jako parametru. (Iffef2, I4995e, b/240298691)- Biblioteki
AndroidViewModel
,AbstractSavedStateViewModelFactory
,LifecycleService
,ServiceLifecycleDispatcher
iProcessLifecycleOwner
są teraz napisane w języku Kotlin (I2e771, Ibae40, I160d7, I08884, I1cda7, b/240298691)
Wersja 2.6.0-alpha04
11 stycznia 2023 r.
androidx.lifecycle:lifecycle-*:2.6.0-alpha04
został zwolniony. Wersja 2.6.0-alpha04 zawiera te commity.
Nowe funkcje
- Właściwość
LiveData
zawiera teraz nową właściwośćisInitialized
, która wskazuje, czy w elementachLiveData
została kiedykolwiek ustawiona wartość jawna. Umożliwia to rozróżnienie wartości zwracanych przez funkcjęliveData.value
, gdy nie została ustawiona żadna wartość, i wartości jawnejnull
.null
(Ibd018)
Zmiany w interfejsie API
- Interfejsy API
collectAsStateWithLifecycle()
usługilifecycle-runtime-compose
nie są już w fazie eksperymentalnej. (I09d42, b/258835424) - Metody
Lifecycle.launchWhenX
iLifecycle.whenX
zostały wycofane, ponieważ korzystanie z metody wstrzymywania rozsyłacza może w niektórych przypadkach powodować marnowanie zasobów. Zalecamy użycieLifecycle.repeatOnLifecycle
. (Iafc54, b/248302832)
Konwersje Kotlina
ViewTreeLifecycleOwner
jest teraz napisany w języku Kotlin. Jest to zmiana niezgodna ze źródłem w przypadku klas napisanych w Kotlinie. Aby ustawić i znaleźć wcześniej ustawionego właściciela, musisz teraz bezpośrednio zaimportować i użyć metod rozszerzenia Kotlina wView
klasyandroidx.lifecycle.setViewTreeLifecycleOwner
iandroidx.lifecycle.findViewTreeLifecycleOwner
. Zastępuje ono poprzednie rozszerzenie Kotlina wlifecycle-runtime-ktx
. Jest on zgodny z binarnymi implementacjami w języku Java i nadal zgodny ze źródłami. (I8a77a, I5234e, b/240298691)LiveDataReactiveStreams
jest teraz napisany w języku Kotlin. Rozszerzenia Kotlina, które wcześniej były dostępne wlifecycle-reactivestreams-ktx
, zostały przeniesione do modułulifecycle-reactivestreams
i stały się głównym interfejsem kodu napisanego w Kotlinie. Jest to zmian w źródle kodu napisanego w języku Kotlin, jeśli nie korzystasz jeszcze z interfejsów API metod rozszerzeń w Kotlinie. (I2b1b9, I95d22, b/240298691)DefaultLifecycleObserver
,LifecycleEventObserver
,Lifecycle
,LifecycleRegistry
,LifecycleObserver
iViewModelStore
są teraz napisane w języku Kotlin (Iadffd, (I60034, I8c52c, I9593d, I01fe1, I59a23, b/240298691)
Poprawki błędów
SavedStateHandle
nie ulega już awarii podczas wywoływania funkcjiClassCastException
z nieprawidłowym typem klasy, gdyClassCastException
ma wartośćClassCastException
.get()
(I6ae7c)
Wersja 2.6.0-alpha03
24 października 2022 r.
androidx.lifecycle:lifecycle-*:2.6.0-alpha03
został zwolniony. Wersja 2.6.0-alpha03 zawiera te commity.
Poprawki błędów
- Rozwiązanie problemu polegającego na tym, że ograniczenia między różnymi modułami cyklu życia nie działały zgodnie z oczekiwaniami. (I18d0d, b/249686765)
- Błędy zgłaszane przez
LifecycleRegistry.moveToState()
zawierają teraz bardziej przydatne komunikaty, które informują deweloperów o komponencie powodującym błąd. (Idf4b2, b/244910446)
Wersja 2.6.0-alpha02
7 września 2022 roku
androidx.lifecycle:lifecycle-*:2.6.0-alpha02
został zwolniony. Wersja 2.6.0-alpha02 zawiera te commity.
Zmiany w interfejsie API
- Klasa
MediatorLiveData
zawiera teraz konstruktor do ustawiania wartości początkowej. (Ib6cc5, b/151244085)
Poprawki błędów
- Artefakty
Lifecycle
zawierają teraz ograniczenia, które zapewniają, że wszystkie współzależne artefakty Lifecycle używają tej samej wersji, automatycznie aktualizując inne zależności, gdy zostanie zaktualizowana jedna z nich. b/242871265 FlowLiveData.asFlow()
tworzy terazcallbackFlow
, zamiast używać własnej implementacjiChannel
, aby zapewnić bezpieczeństwo wątku i zachowanie kontekstu. (I4a8b2, b/200596935)- Funkcja
FlowLiveData
.asLiveData
będzie teraz zachowywać początkową wartość elementuStateFlow
podczas tworzenia nowego obiektuLiveData
. (I3f530, b/157380488) - Z cyklu życia
2.5.1
: niestandardowe implementacjeAndroidViewModelFactory
poprawnie wywołują funkcjęcreate(modelClass)
podczas używania konstruktora stanu w wersjiLifecycle
2.4 lub nowszej (I5b315, b/238011621).
Wersja 2.6.0-alpha01
29 czerwca 2022 r.
androidx.lifecycle:lifecycle-*:2.6.0-alpha01
został zwolniony. Wersja 2.6.0-alpha01 zawiera te commity.
Nowe funkcje
- Dodano nowe rozszerzenie
StateFlow
iFlow
typucollectAsStateWithLifecycle
, które zbiera dane z przepływów i reprezentuje najnowszą wartość jako stan tworzenia w sposób uwzględniający cykl życia. Przepływ jest zbierany, a nowa emisja jest ustawiana na wartość stanu, gdy cykl życia jest co najmniej w określonymLifecycle.State
. Gdy czas trwania cyklu życia spadnie poniżej wartościLifecycle.State
, przetwarzanie przepływu zostanie zatrzymane, a wartość stanu nie zostanie zaktualizowana. (I1856e, b/230557927)
Wersja 2.5
Wersja 2.5.1
27 lipca 2022 roku
androidx.lifecycle:lifecycle-*:2.5.1
został zwolniony. Wersja 2.5.1 zawiera te zatwierdzenia.
Poprawki błędów
- Niestandardowe implementacje
AndroidViewModelFactory
poprawnie wywołują funkcjęcreate(modelClass)
, gdy używają stanu w konstruktorzeAndroidViewModelFactory
w wersjiLifecycle
2.4 lub nowszej (I5b315, b/238011621).
Wersja 2.5.0
29 czerwca 2022 r.
androidx.lifecycle:lifecycle-*:2.5.0
został zwolniony. Wersja 2.5.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 2.4.0
SavedStateHandle
udostępnia teraz interfejs APIgetStateFlow()
, który zwraca funkcję KotlinStateFlow
do monitorowania zmian wartości jako alternatywę dla funkcjiLiveData
.ViewModel CreationExtras – podczas pisania niestandardowego widoku
ViewModelProvider.Factory
nie trzeba już rozszerzać widokuAndroidViewModelFactory
aniAbstractSavedStateViewModelFactory
, aby uzyskać dostęp do widokuApplication
lubSavedStateHandle
. Zamiast tego te pola są udostępniane każdej podklasieViewModelProvider.Factory
jakoCreationExtras
za pomocą nowej funkcji nakładaniacreate
:create(Class<T>, CreationExtras)
. Te dodatkowe informacje są automatycznie dostarczane przez Twoją aktywność lub fragment, gdy używasz odpowiednio aktywności1.5.0
lub fragmentu1.5.0
.class CustomFactory : ViewModelProvider.Factory { override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T { return when (modelClass) { HomeViewModel::class -> { // Get the Application object from extras val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY]) // Pass it directly to HomeViewModel HomeViewModel(application) } DetailViewModel::class -> { // Create a SavedStateHandle for this ViewModel from extras val savedStateHandle = extras.createSavedStateHandle() DetailViewModel(savedStateHandle) } else -> throw IllegalArgumentException("Unknown class $modelClass") } as T } }
lifecycle-viewmodel
udostępnia terazviewModelFactory
w Kotlin DSL, który umożliwia definiowanieViewModelProvider.Factory
za pomocą co najmniej 1 inicjalizatora lambda, po jednym dla każdej klasyViewModel
, którą obsługuje niestandardowa fabryka, przy użyciuCreationExtras
jako głównego źródła danych.val customFactory = viewModelFactory { // The return type of the lambda automatically sets what class this lambda handles initializer { // Get the Application object from extras provided to the lambda val application = checkNotNull(get(ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY)) HomeViewModel(application) } initializer { val savedStateHandle = createSavedStateHandle() DetailViewModel(savedStateHandle) } }
lifecycle-viewmodel-compose
udostępnia teraz interfejs APIviewModel()
, który używa fabryki lambda do tworzenia instancjiViewModel
bez konieczności tworzenia niestandardowej funkcjiViewModelProvider.Factory
.// Within a @Composable, you can now skip writing a custom Factory // and instead write a lambda to do the initialization of your ViewModel val detailViewModel = viewModel { // This lambda is only called the first time the ViewModel is created // and all CreationExtras are available inside the lambda val savedStateHandle = createSavedStateHandle() DetailViewModel(savedStateHandle) }
Zintegrowanie Compose Saver z SavedStateHandle – artefakt
lifecycle-viewmodel-compose
zawiera teraz nowe eksperymentalne interfejsy API wSavedStateHandle.saveable
, które umożliwiają zachowanie zachowaniarememberSaveable
w ramachSavedStateHandle
widoku ViewModel.class ListScreenViewModel(handle: SavedStateHandle): ViewModel() { // This value survives both configuration changes and process death and recreation val editMode by handle.saveable { mutableStateOf(false) } }
Dodano interfejs
addCloseable()
API i nową przeciążenie konstruktora, które umożliwiają dodanie do obiektuViewModel
co najmniej jednego obiektuCloseable
, który zostanie zamknięty, gdy obiektViewModel
zostanie oczyszczony, bez konieczności wykonywania żadnych ręcznych czynności w funkcjionCleared()
.Aby na przykład utworzyć zakres współbieżności, który można wstrzyknąć do ViewModel, ale kontrolować za pomocą testów, możesz utworzyć obiekt
CoroutineScope
, który implementuje interfejsCloseable
:class CloseableCoroutineScope( context: CoroutineContext = SupervisorJob() + Dispatchers.Main.immediate ) : Closeable, CoroutineScope { override val coroutineContext: CoroutineContext = context override fun close() { coroutineContext.cancel() } }
Możesz go użyć w konstruktorze
ViewModel
, zachowując ten sam czas życia coviewModelScope
:class TestScopeViewModel( val customScope: CloseableCoroutineScope = CloseableCoroutineScope() ) : ViewModel(customScope) { // You can now use customScope in the same way as viewModelScope }
Zmiany w zachowaniu
- Próba przeniesienia
Lifecycle.State
zINITIALIZED
doDESTROYED
spowoduje teraz zawsze wyjątekIllegalStateException
niezależnie od tego, czyLifecycle
ma dołączonego obserwatora. LifecycleRegistry
będzie teraz usuwać obserwatorów, gdy osiągnie stanDESTROYED
.
Wersja 2.5.0-rc02
15 czerwca 2022 r.
androidx.lifecycle:lifecycle-*:2.5.0-rc02
został zwolniony. Wersja 2.5.0-rc02 zawiera te zatwierdzenia.
Poprawki błędów
ViewModelProvider
nie będzie się już zawieszać, gdy użyjesz poprzednich wersji zależności cyklu życia compileOnly z wersjami 2.5 i nowszymi (I81a66, b/230454566).
Wersja 2.5.0-rc01
11 maja 2022 roku
androidx.lifecycle:lifecycle-*:2.5.0-rc01
został zwolniony. Wersja 2.5.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Funkcja
MediatorLiveData.addSource()
wyrzuca teraz błądNullPointerException
, gdy zostanie przekazane źródłonull
, zamiast propagować źródłonull
do obserwatorów (Ibd0fb, b/123085232).
Wersja 2.5.0-beta01
20 kwietnia 2022 r.
androidx.lifecycle:lifecycle-*:2.5.0-beta01
został zwolniony. Wersja 2.5.0-beta01 zawiera te commity.
Zmiany w interfejsie API
- Dodano delegaty właściwości
SavedStateHandle.saveable
, aby używać nazw właściwości jako kluczy do trwałego przechowywania stanu w elementachSavedStateHandle
(I8bb86, b/225014345).
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że umieszczenie jednego elementu
NavHost
w innym elemencieNavHost
na niegłównej karcie nawigacji u dołu powodowałoIllegalStateException
przy użyciu wielu poziomów ścieżki wstecz. (I11bd5, b/228865698)
Wersja 2.5.0-alpha06
6 kwietnia 2022 roku
androidx.lifecycle:lifecycle-*:2.5.0-alpha06
został zwolniony. Wersja 2.5.0-alpha06 zawiera te commity.
Nowe funkcje
- Dodaj eksperymentalną wersję
MutableState
doSavedStateHandle.saveable
, aby zapewnić zgodność zrememberSaveable
(I38cfe, b/224565154)
Zmiany w interfejsie API
- Karta
CreationExtras
jest teraz abstrakcyjna, a nie zapieczęgnięta. (Ib8a7a)
Poprawki błędów
- Naprawiono błąd
IllegalStateException: Already attached to lifecycleOwner
spowodowany przezSavedStateHandleController
. (I7ea47, b/215406268)
Wersja 2.5.0-alpha05
23 marca 2022 r.
androidx.lifecycle:lifecycle-*:2.5.0-alpha05
został zwolniony. Wersja 2.5.0-alpha05 zawiera te commity.
Nowe funkcje
- Moduł
lifecycle-viewmodel-compose
udostępnia teraz interfejsSavedStateHandleSaver
, czyli eksperymentalny interfejs API, który zapewnia, że wartości wSavedStateHandle
są prawidłowo zintegrowane z tym samym stanem zapisanej instancji, którego używarememberSaveable
. (Ia88b7, b/195689777)
Zmiany w interfejsie API
- Rozwiązano problem ze zgodnością z Lifecycle 2.3 i nowszymi wersjami Lifecycle w języku Java. (I52c8a, b/219545060)
Poprawki błędów
SavedStateViewFactory
obsługuje terazCreationExtras
nawet wtedy, gdy został on zainicjowany za pomocąSavedStateRegistryOwner
. Jeśli podano dodatkowe argumenty, argumenty zainicjowane są ignorowane. (I6c43b, b/224844583)
Wersja 2.5.0-alpha04
9 marca 2022 r.
androidx.lifecycle:lifecycle-*:2.5.0-alpha04
został zwolniony. Wersja 2.5.0-alpha04 zawiera te commity.
Zmiany w interfejsie API
SavedStateHandle
udostępnia teraz interfejs APIgetStateFlow()
, który zwraca funkcję KotlinStateFlow
do monitorowania zmian wartości jako alternatywę dla interfejsuLiveData
. (Iad3ab, b/178037961)
Wersja 2.5.0-alpha03
23 lutego 2022 r.
androidx.lifecycle:lifecycle-*:2.5.0-alpha03
został zwolniony. Wersja 2.5.0-alpha03 zawiera te commity.
Nowe funkcje
- Dodano interfejs
addCloseable()
API i nową przeciążenie konstruktora, które umożliwiają dodanie doViewModel
co najmniej 1 obiektuCloseable
, który zostanie zamknięty, gdyViewModel
zostanie wyczyszczony, bez konieczności wykonywania ręcznych czynności wonCleared()
. (I55ea0) lifecycle-viewmodel
udostępnia teraz funkcjęInitializerViewModelFactory
, która pozwala dodawać funkcję lambda do obsługi określonych klasViewModel
, używającCreationExtras
jako głównego źródła danych. (If58fc, b/216687549)lifecycle-viewmodel-compose
udostępnia teraz interfejs APIviewModel()
, który korzysta z fabryki lambda do tworzenia instancjiViewModel
bez konieczności tworzenia niestandardowegoViewModelProvider.Factory
. (I97fbb, b/216688927)
Zmiany w interfejsie API
- Możesz teraz utworzyć
ViewModel
zCreationExtras
za pomocąlifecycle-viewmodel-compose
. (I08887, b/216688927)
Zmiany w zachowaniu
- Próba przeniesienia
Lifecycle.State
zINITIALIZED
doDESTROYED
będzie teraz zawsze wywoływać błądIllegalStateException
niezależnie od tego, czyLifecycle
ma dołączonego obserwatora. (I7c390, b/177924329) LifecycleRegistry
będzie teraz usuwać obserwatorów, gdy osiągnie stanDESTROYED
. (I4f8dd, b/142925860)
Wersja 2.5.0-alpha02
9 lutego 2022 r.
androidx.lifecycle:lifecycle-*:2.5.0-alpha02
został zwolniony. Wersja 2.5.0-alpha02 zawiera te commity.
Zmiany w interfejsie API
- Funkcje
SavedStateHandle
iSavedStateViewModelFactory
zostały przekonwertowane na Kotlin. Dzięki temu poprawiliśmy możliwość zwracania wartości null w obiektach w obu klasach. (Ib6ce2, b/216168263, I9647a, b/177667711) - Parametr funkcji
LiveData
switchMap
może teraz zwracać wartość null. (I40396, b/132923666) - Rozszerzenia
LiveData
-ktx są teraz opatrzone adnotacją@CheckResult
, aby wymusić używanie wyniku podczas wywoływania tych funkcji. (Ia0f05, b/207325134)
Zmiany w zachowaniu
- Funkcja
SavedStateHandle
przechowuje teraz prawidłowo wartość domyślną, gdy nie ma wartości dla określonego klucza. (I1c6ce, b/178510877)
Poprawki błędów
- Zmiana w cyklu życia
2.4.1
: zależnośćlifecycle-process
została zaktualizowana tak, aby zależała od Startup 1.1.1. Dzięki temu poprawki, które zapobiegają wywoływaniu błęduStartupException
przezProcessLifecycleInitializer
, będą domyślnie dostępne. (Ib01df, b/216490724) - Ulepszono komunikat o błędzie, który pojawia się, gdy niestandardowe klasy
AndroidViewModel
mają parametry w niewłaściwej kolejności i próbują utworzyć klasęViewModel
. (I340f7, b/177667711) - Możesz teraz utworzyć model widoku za pomocą funkcji
CreationExtras
, korzystając z funkcjiAndroidViewModelFactory
bez konfigurowania aplikacji. (I6ebef, b/217271656)
Wersja 2.5.0-alpha01
26 stycznia 2022 r.
androidx.lifecycle:lifecycle-*:2.5.0-alpha01
został zwolniony. Wersja 2.5.0-alpha01 zawiera te commity.
Dodatkowe informacje o tworzeniu ViewModel
W ramach tej wersji kładziemy podwaliny pod restrukturyzację sposobu tworzenia ViewModel
. Zamiast sztywnego zbioru podklas ViewModelProvider.Factory
, z których każda dodaje dodatkowe funkcje (np. parametr konstruktora Application
za pomocą AndroidViewModelFactory
, parametr konstruktora SavedStateHandle
za pomocą SavedStateViewModelFactory
i AbstractSavedStateViewModelFactory
itd.), przechodzimy do świata bezstanowych fabryk, które opierają się na nowej koncepcji CreationExtras
. (Ia7343, b/188691010, b/188541057)
W związku z tą zmianą funkcja ViewModelProvider
nie wywołuje już bezpośrednio poprzedniej metody create(Class<T>)
w funkcji ViewModelProvider.Factory
. Zamiast tego wywołuje nową przeciążoną wersję funkcji create
: create(Class<T>, CreationExtras)
. Oznacza to, że każda bezpośrednia implementacja instancji ViewModelProvider.Factory
ma teraz dostęp do wszystkich tych nowych CreationExtras
:
ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY
: tenString
zapewnia dostęp do klucza niestandardowego przekazanego do funkcjiViewModelProvider.get()
.ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY
zapewnia dostęp do zajęćApplication
.SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY
zapewnia dostęp doSavedStateRegistryOwner
, który jest używany do tworzenia tej klasy ViewModel.SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY
zapewnia dostęp doViewModelStoreOwner
, który jest używany do tworzenia tej klasy ViewModel.SavedStateHandleSupport.DEFAULT_ARGS_KEY
zapewnia dostęp doBundle
argumentów, których należy użyć do utworzeniaSavedStateHandle
.
Te dodatkowe informacje są domyślnie dostępne podczas korzystania z funkcji Aktywność 1.5.0-alpha01
, Fragment 1.5.0-alpha01
i Nawigacja 2.5.0-alpha01
. Jeśli używasz starszej wersji tych bibliotek, CreationExtras
będzie pusty – wszystkie istniejące podklasy ViewModelProvider.Factory
zostały przekształcone, aby obsługiwać zarówno starszą ścieżkę tworzenia używaną przez starsze wersje tych bibliotek, jak i ścieżkę CreationExtras
, która będzie używana w przyszłości.
Te CreationExtras
umożliwiają tworzenie ViewModelProvider.Factory
, które przekazuje tylko informacje potrzebne do każdego ViewModel
bez korzystania z ścisłej hierarchii podklas Factory:
class CustomFactory : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
return when (modelClass) {
HomeViewModel::class -> {
// Get the Application object from extras
val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY])
// Pass it directly to HomeViewModel
HomeViewModel(application)
}
DetailViewModel::class -> {
// Create a SavedStateHandle for this ViewModel from extras
val savedStateHandle = extras.createSavedStateHandle()
DetailViewModel(savedStateHandle)
}
else -> throw IllegalArgumentException("Unknown class $modelClass")
} as T
}
}
Używamy funkcji rozszerzenia Kotlina createSavedStateHandle()
w klasie CreationExtras
z poziomu SavedStateHandleSupport
, aby utworzyć obiekt SavedStateHandle
tylko dla jednej klasy ViewModel, która tego potrzebuje. (Ia6654, b/188541057)
Niestandardowe CreationExtras
można udostępnić, zastępując getDefaultViewModelCreationExtras()
w plikach ComponentActivity
lub Fragment
, dzięki czemu będą one dostępne dla niestandardowego ViewModelProvider.Factory
jako wbudowana forma wspomaganego wstrzyknięcia. Te dodatkowe funkcje będą automatycznie dostępne w Twojej niestandardowej fabryce, gdy będzie ona używana bezpośrednio z ViewModelProvider
lub gdy użyjesz rozszerzeń właściwości by viewModels()
i by activityViewModels()
w Kotlinie. (I79f2b, b/207012584, b/207012585, b/207012490)
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że wartość domyślna podana dla
SavedStateHandle
pojawiała się ponownie po zabiciu procesu i jego odtworzeniu, nawet jeśli została specjalnie usunięta zSavedStateHandle
. W konsekwencjiSavedStateHandle
nie będzie już łączyć wartości domyślnych i przywróconych, tylko używać tylko wartości przywróconych jako źródła informacji. (I53a4b)
Wersja 2.4
Wersja 2.4.1
9 lutego 2022 r.
androidx.lifecycle:lifecycle-*:2.4.1
został zwolniony. Wersja 2.4.1 zawiera te zatwierdzenia.
Poprawki błędów
- Zmiana z Cykl życia
2.5.0-alpha01
: rozwiązaliśmy problem, który powodował, że wartość domyślna podana dlaSavedStateHandle
pojawiała się ponownie po zabiciu i ponownym utworzeniu procesu, nawet jeśli została ona celowo usunięta zSavedStateHandle
. W konsekwencjiSavedStateHandle
nie będzie już łączyć wartości domyślnych i przywróconych, tylko używać tylko wartości przywróconych jako źródła informacji. (I53a4b) lifecycle-process
zależy teraz od pakietu Androidx Startup 1.1.1, który naprawił regresję, gdy użycieProcessLifecycleInitializer
powodowałoStartupException
. (b/216490724)
Wersja 2.4.0
27 października 2021 roku
androidx.lifecycle:lifecycle-*:2.4.0
został zwolniony. Wersja 2.4.0 zawiera te commity.
Ważne zmiany od wersji 2.3.0
- Środowisko wykonawcze
@OnLifecycleEvent
zostało wycofane. Zamiast tego należy użyć polaLifecycleEventObserver
lubDefaultLifecycleObserver
. - Dodano bibliotekę
androidx.lifecycle:lifecycle-viewmodel-compose
. Umożliwia tworzenie komponentówviewModel()
iLocalViewModelStoreOwner
.- Zmiany powodujące przerwanie działania źródła: funkcja
ViewModelProvider
została przepisana w języku Kotlin. MetodaViewModelProvider.Factory.create
nie zezwala już na użycie typu generycznego nullable.
- Zmiany powodujące przerwanie działania źródła: funkcja
- Do
androidx.lifecycle:lifecycle-runtime-ktx
dodano nowe interfejsy API coroutines: Lifecycle.repeatOnLifecycle
, interfejs API, który wykonuje blok kodu w korobowej funkcji, gdy stan cyklu życia jest co najmniej w określonym stanie. Blokada zostanie anulowana i ponownie uruchomiona, gdy cykl życia przejdzie w stan docelowy i z niego.Flow.flowWithLifecycle
, interfejs API, który emituje wartości z poprzedniego przepływu, gdy cykl życia jest co najmniej w określonym stanie.- Obiekt
DefaultLifecycleObserver
został przeniesiony zlifecycle.lifecycle-common-java8
dolifecycle.lifecycle-common
.lifecycle.lifecycle-common-java8
nie zapewnia już żadnych dodatkowych funkcji w porównaniu zlifecycle.lifecycle-common
, więc zależność od niego można zastąpić zależnością odlifecycle.lifecycle-common
. - Interfejsy API nieobsługujące coroutines z poziomu
lifecycle-viewmodel-ktx
zostały przeniesione do modułulifecycle-viewmodel
. lifecycle-process
używa teraz interfejsuandroidx.startup
do inicjowania interfejsuProcessLifecycleOwner
.Wcześniej robiła to
androidx.lifecycle.ProcessLifecycleOwnerInitializer
.Jeśli w przeszłości do zainicjowania cyklu życia procesu używany był element
tools:node="remove"
, który jest elementemContentProvider
, wykonaj te czynności.<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.lifecycle.ProcessLifecycleInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
(lub)
<!-- If you want to disable androidx.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
Wersja 2.4.0-rc01
29 września 2021 r.
androidx.lifecycle:lifecycle-*:2.4.0-rc01
jest udostępniana bez zmian w stosunku do wersji Lifecycle 2.4.0-beta01. Wersja 2.4.0-rc01 zawiera te zatwierdzenia.
Wersja 2.4.0-beta01
15 września 2021 r.
androidx.lifecycle:lifecycle-*:2.4.0-beta01
został zwolniony. Wersja 2.4.0-beta01 zawiera te commity.
Zmiany w interfejsie API
- Środowisko wykonawcze
@OnLifecycleEvent
zostało wycofane. Zamiast tego należy użyć polaLifecycleEventObserver
lubDefaultLifecycleObserver
. (I5a8fa) - Interfejs DefaultLifecycleObserver został przeniesiony z
androidx.lifecycle.lifecycle-common-java8
doandroidx.lifecycle.lifecycle-common
.androidx.lifecycle.lifecycle-common-java8
nie zapewnia już żadnych dodatkowych funkcji w porównaniu zandroidx.lifecycle.lifecycle-common
, więc zależność od niego można zastąpić zależnością odandroidx.lifecycle.lifecycle-common
. (I021aa) - Interfejsy API nieobsługujące coroutines z poziomu
lifecycle-viewmodel-ktx
zostały przeniesione do modułulifecycle-viewmodel
. (I6d5b2)
Darowizna zewnętrzna
Wersja 2.4.0-alpha03
4 sierpnia 2021 r.
androidx.lifecycle:lifecycle-*:2.4.0-alpha03
został zwolniony. Wersja 2.4.0-alpha03 zawiera te commity.
Zmiany w interfejsie API
- Zmiany powodujące przerwanie działania źródła: interfejs ViewModelProvider został przepisany w języku Kotlin.
Metoda
ViewModelProvider.Factory.create
nie zezwala już na użycie typu generic dla typu nullable. (I9b9f6)
Zmiany w zachowaniu
- Funkcja
Lifecycle.repeatOnLifecycle
:block
jest teraz zawsze wywoływana kolejno podczas powtarzanego wykonywania. (Ibab33)
Darowizna zewnętrzna
- Dziękujemy użytkownikowi chao2zhang za poprawienie fragmentów kodu w dokumentacji
repeatOnLifecycle
. #205.
Wersja 2.4.0-alpha02
16 czerwca 2021 r.
androidx.lifecycle:lifecycle-*:2.4.0-alpha02
został zwolniony. Wersja 2.4.0-alpha02 zawiera te commity.
Nowe funkcje
- Dodano do
lifecycle-runtime-ktx
nową funkcję sprawdzania kodu źródłowegoRepeatOnLifecycleWrongUsage
, która wykrywa nieprawidłowe użycie funkcjirepeateOnLifecycle
w funkcjachonStart()
lubonResume()
. (706078, b/187887400)
Zmiany w interfejsie API
- Interfejs API
LifecycleOwner.addRepeatingJob
został usunięty na rzecz interfejsuLifecycle.repeatOnLifecycle
, który obsługuje strukturalną współbieżność i jest łatwiejszy do analizy. (I4a3a8) - Udostępnij
ProcessLifecycleInitializer
, aby inneandroidx.startup.Initializer
mogły ich używać jako zależności. (I94c31)
Poprawki błędów
- Rozwiązaliśmy problem z sprawdzaniem błędów
NullSafeMutableLiveData
, gdy pole zawiera modyfikatory. (#147, b/183696616) - Rozwiązaliśmy kolejny problem z sprawdzaniem błędów
NullSafeMutableLiveData
podczas używania ogólników. (#161, b/184830263)
Darowizna zewnętrzna
- Dziękujemy użytkownikowi maxsav za ulepszenie kontroli lint w projekcie
NullSafeMutableLiveData
. (#147, b/183696616) - Dziękujemy kozaxinan za ulepszenie kontroli lint dla
NullSafeMutableLiveData
. (#161, b/184830263)
Wersja 2.4.0-alpha01
24 marca 2021 r.
androidx.lifecycle:lifecycle-*:2.4.0-alpha01
został zwolniony. Wersja 2.4.0-alpha01 zawiera te commity.
Zmiany w zachowaniu
lifecycle-process
używa teraz interfejsuandroidx.startup
do inicjowania interfejsuProcessLifecycleOwner
.Wcześniej robiła to
androidx.lifecycle.ProcessLifecycleOwnerInitializer
.Jeśli w przeszłości do zainicjowania cyklu życia procesu używany był element
tools:node="remove"
, który jest elementemContentProvider
, wykonaj te czynności.<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.lifecycle.ProcessLifecycleInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
(lub)
<!-- If you want to disable androidx.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
Zmiany w interfejsie API
- Dodano interfejs API
Flow.flowWithLifecycle
, który emituje wartości z poprzedniego przepływu danych, gdy cykl życia jest co najmniej w określonym stanie za pomocą interfejsu APILifecycle.repeatOnLifecycle
. Jest to alternatywa dla nowego interfejsu APILifecycleOwner.addRepeatinJob
. (I0f4cd)
Poprawki błędów
- Od wersji Lifecycle 2.3.1 reguła sprawdzania kodu
NonNullableMutableLiveData
może teraz prawidłowo rozróżniać zmienne pola o różnym typie null. (b/169249668)
Lifecycle Viewmodel Compose w wersji 1.0.0
Wersja 1.0.0-alpha07
16 czerwca 2021 r.
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07
został zwolniony. Wersja 1.0.0-alpha07 zawiera te commity.
Zmiany w interfejsie API, które powodują przerwanie zgodności
- Funkcja
viewModel()
przyjmuje teraz opcjonalny parametrViewModelStoreOwner
, co ułatwia pracę z właścicielami innymi niżLocalViewModelStoreOwner
. Możesz na przykład użyć funkcjiviewModel(navBackStackEntry)
, aby pobrać ViewModel powiązany z konkretnym grafem nawigacji. (I2628d, b/188693123)
Wersja 1.0.0-alpha06
2 czerwca 2021 r.
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06
został zwolniony. Wersja 1.0.0-alpha06 zawiera te commity.
Zaktualizowano, aby była zgodna z wersją 1.0.0-beta08
aplikacji Redagowanie.
Wersja 1.0.0-alpha05
18 maja 2021 r.
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05
został zwolniony. Wersja 1.0.0-alpha05 zawiera te commity.
Nowe funkcje
- Zaktualizowano, aby była zgodna z wersją
1.0.0-beta07
aplikacji Redagowanie.
Poprawki błędów
- Pliki AndroidManifest z ui-test-manifest i ui-tooling-data są teraz zgodne z Androidem 12 (I6f9de, b/184718994)
Wersja 1.0.0-alpha04
7 kwietnia 2021 r.
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04
został zwolniony. Wersja 1.0.0-alpha04 zawiera te commity.
Zmiany w zależnościach
- Ta wersja umożliwia usługom
androidx.hilt:hilt-navigation-compose
iandroidx.navigation:navigation-compose
synchronizowanie zależności z usługamiandroidx.compose.compiler:compiler:1.0.0-beta04
iandroidx.compose.runtime:runtime:1.0.0-beta04
. W wersji 1.0.0 wymagane jest dopasowanie kompilatora i czasu wykonywania.
Wersja 1.0.0-alpha03
10 marca 2021 r.
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha03
został zwolniony. Wersja 1.0.0-alpha03 zawiera te commity.
Zmiany w interfejsie API
- Funkcja
LocalViewModelStoreOwner.current
zwraca teraz wartośćViewModelStoreOwner
, która może być pusta, aby lepiej określić, czyViewModelStoreOwner
jest dostępna w bieżącej kompozycji. Interfejsy API, które wymagają parametruViewModelStoreOwner
, takie jakviewModel()
iNavHost
, nadal wywołują wyjątek, jeśli parametrViewModelStoreOwner
nie jest ustawiony. (Idf39a)
Lifecycle-Viewmodel-Compose w wersji 1.0.0-alpha02
24 lutego 2021 r.
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02
został zwolniony. Wersja 1.0.0-alpha02 zawiera te commity.
Zmiany w interfejsie API
- Interfejs
LocalViewModelStoreOwner
zawiera teraz funkcjeprovides
, które można używać z interfejsemCompositionLocalProvider
, zastępując interfejs APIasProvidableCompositionLocal()
. (I45d24)
Lifecycle-Viewmodel-Compose w wersji 1.0.0-alpha01
10 lutego 2021 r.
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01
został zwolniony. Wersja 1.0.0-alpha01 zawiera te commity.
Nowe funkcje
- Komponent
viewModel()
i elementLocalViewModelStoreOwner
zostały przeniesione z poziomuandroidx.compose.ui.viewinterop
do tego artefaktu w pakiecieandroidx.lifecycle.viewmodel.compose
. (I7a374)
Wersja 2.3.1
Wersja cyklu życia 2.3.1
24 marca 2021 r.
androidx.lifecycle:lifecycle-*:2.3.1
został zwolniony. Wersja 2.3.1 zawiera te commity.
Poprawki błędów
- Reguła lint
NonNullableMutableLiveData
może teraz prawidłowo rozróżniać zmienne pól o różnym typie null. (b/169249668)
Wersja 2.3.0
Wersja 2.3.0
10 lutego 2021 r.
androidx.lifecycle:lifecycle-*:2.3.0
został zwolniony. Wersja 2.3.0 zawiera te commity.
Najważniejsze zmiany od wersji 2.2.0
SavedStateHandle
obsługuje klasy nieparcjonowalne:SavedStateHandle
obsługuje teraz sekwencyjną serializację, umożliwiając wywołanie metodysetSavedStateProvider()
dla danego klucza, która przekazuje obiektSavedStateProvider
, który otrzyma wywołanie zwrotne do metodysaveState()
, gdySavedStateHandle
poprosi o zapisanie stanu. Zobacz Zapisywanie klas, których nie można podzielić.- Egzekwowanie zasad dotyczących cyklu życia:
- LifecycleRegistry nakazuje teraz
DESTROYED
jako stan końcowy. LifecycleRegistry
teraz sprawdza, czy metody są wywoływane w głównym wątku. Było to zawsze wymagane w przypadku cyklu życia działań, fragmentów itp. Dodanie obserwatorów z wątków innych niż głównych powodowało trudności w łatwym wykrywaniu awarii w czasie działania. W przypadku obiektówLifecycleRegistry
należących do Twoich komponentów możesz wyraźnie zrezygnować z sprawdzania, używającLifecycleRegistry.createUnsafe(...)
, ale musisz wtedy zadbać o odpowiednią synchronizację, gdy obiektLifecycleRegistry
jest używany z różnych wątków.
- LifecycleRegistry nakazuje teraz
- Pomocnicze metody stanu i zdarzeń w cyklu życia: do metody
Lifecycle.Event
dodaliśmy statyczne metody pomocniczedownFrom(State)
,downTo(State)
,upFrom(State)
iupTo(State)
, które służą do generowania obiektuEvent
na podstawie obiektuState
i kierunku przejścia. Dodano metodęgetTargetState()
, która określaState
, do którego nastąpi przejście bezpośrednio poEvent
. withStateAtLeast
: dodano interfejsy APILifecycle.withStateAtLeast
, które oczekują na stan cyklu życia i w punkcie zmiany stanu synchronicznie uruchamiają blok kodu, który nie zawiesza działania aplikacji, a potem wznawiają działanie z otrzymanym wynikiem. Te interfejsy API różnią się od dotychczasowych metodwhen*
, ponieważ nie zezwalają na uruchamianie kodu zawieszania i nie używają niestandardowego rozsyłarki. (aosp/1326081)- Interfejsy
ViewTree
API: nowe interfejsy APIViewTreeLifecycleOwner.get(View)
iViewTreeViewModelStoreOwner.get(View)
umożliwiają pobieranie odpowiednio elementówLifecycleOwner
iViewModelStoreOwner
z instancjiView
. Aby prawidłowo wypełnić to pole, musisz uaktualnić elementy Activity1.2.0
i Fragment1.3.0
oraz bibliotekę AppCompat 1.3.0-alpha01 lub nowszą. Rozszerzenia KotlinafindViewTreeLifecycleOwner
ifindViewTreeViewModelStoreOwner
są dostępne odpowiednio w wersjachlifecycle-runtime-ktx
ilifecycle-viewmodel-ktx
. LiveData.observe()
Wycofanie rozszerzenia Kotlina: rozszerzenie KotlinaLiveData.observe()
, które jest niezbędne do używania składni lambda, zostało wycofane, ponieważ nie jest potrzebne w wersji Kotlina 1.4.
Wersja 2.3.0-rc01
16 grudnia 2020 roku
androidx.lifecycle:lifecycle-*:2.3.0-rc01
został zwolniony. Wersja 2.3.0-rc01 zawiera te commity.
Poprawki błędów
- Metoda
keys()
obiektuSavedStateHandle
jest teraz spójna przed zapisaniem stanu i po jego zapisaniu – zawiera teraz klucze używane wcześniej z obiektemsetSavedStateProvider()
, a także klucze używane z obiektemset()
igetLiveData()
. (aosp/1517919, b/174713653)
Darowizna zewnętrzna
- Interfejsy API do wstrzymywania coroutine z uwzględnieniem cyklu życia lepiej obsługują teraz wywołania
yield()
. Dziękuję, Nicklas Ansman Giertz. (aosp/1430830, b/168777346)
Wersja 2.3.0-beta01
1 października 2020 roku
androidx.lifecycle:lifecycle-*:2.3.0-beta01
został zwolniony. Wersja 2.3.0-beta01 zawiera te commity.
Zmiany w interfejsie API
- Funkcja rozszerzenia Kotlina
LiveData.observe()
, która jest potrzebna do używania składni lambda, została wycofana, ponieważ nie jest potrzebna w wersji Kotlina 1.4. (I40d3f)
Poprawki błędów
- Uaktualnij androidx, aby używać Kotlina 1.4 (Id6471, b/165307851, b/165300826).
Zmiany w dokumentacji
- Dokumentacja kreatora
liveData
iasLiveData()
została zaktualizowana, aby zawierała szczegóły dotyczące zmiany podanych wartości limitu czasu. (aosp/1122324)
Wersja 2.3.0-alpha07
19 sierpnia 2020 r.
androidx.lifecycle:lifecycle-*:2.3.0-alpha07
został zwolniony. Wersja 2.3.0-alpha07 zawiera te commity.
Poprawki błędów
- Rozwiązaliśmy problem z awarią podczas sprawdzania Lint w wersji
NullSafeMutableLiveData
. (aosp/1395367)
Wersja 2.3.0-alpha06
22 lipca 2020 r.
androidx.lifecycle:lifecycle-*:2.3.0-alpha06
został zwolniony. Wersja 2.3.0-alpha06 zawiera te commity.
Nowe funkcje
- Do metod pomocniczych
Lifecycle.Event
dodano statyczne metodydownFrom(State)
,downTo(State)
,upFrom(State)
iupTo(State)
, które służą do generowania obiektuEvent
na podstawie obiektuState
i kierunku przejścia. Dodano metodęgetTargetState()
, która określaState
, do którego nastąpi przejście bezpośrednio poEvent
. (I00887) - Dodano interfejsy API
Lifecycle.withStateAtLeast
, które oczekują stanu cyklu życia i sychroniecznie wykonują blok kodu w miejscu zmiany stanu, a potem wznawiają działanie z otrzymanym wynikiem. Te interfejsy API różnią się od dotychczasowych metodwhen*
, ponieważ nie zezwalają na uruchamianie kodu zawieszania i nie używają niestandardowego rozsyłarki. (aosp/1326081)
Zmiany w zachowaniu
- LifecycleRegistry nakazuje teraz
DESTROYED
jako stan końcowy. (I00887) LifecycleRegistry
teraz sprawdza, czy metody są wywoływane w głównym wątku. Było to zawsze wymagane w przypadku cyklu życia działań, fragmentów itp. Dodanie obserwatorów z wątków innych niż głównych powodowało trudności w łatwym wykrywaniu awarii w czasie działania. W przypadku obiektówLifecycleRegistry
należących do Twoich komponentów możesz wyraźnie zrezygnować z sprawdzania, używającLifecycleRegistry.createUnsafe(...)
, ale musisz wtedy zadbać o odpowiednią synchronizację podczas uzyskiwania dostępu do tego obiektuLifecycleRegistry
z różnych wątków (Ie7280, b/137392809).
Poprawki błędów
- Naprawiono błąd powodujący awarię w funkcji
NullSafeMutableLiveData
. (b/159987480) - Naprawiono błąd
ObsoleteLintCustomCheck
w sprawdzaniu Lint w pakiecielifecycle-livedata-core-ktx
(szczególnie w funkcjiNullSafeMutableLiveData
). (b/158699265)
Wersja 2.3.0-alpha05
24 czerwca 2020 r.
androidx.lifecycle:lifecycle-*:2.3.0-alpha05
został zwolniony. Wersja 2.3.0-alpha05 zawiera te commity.
Poprawki błędów
LiveData
lepiej obsługuje przypadki ponownego wywołania, unikając powielonych wywołań funkcjionActive()
lubonInactive()
. (b/157840298)- Rozwiązaliśmy problem, który powodował, że podczas korzystania z Android Studio 4.1 Canary 6 lub nowszej wersji nie były wykonywane kontrole Lint. (aosp/1331903)
Wersja 2.3.0-alpha04
10 czerwca 2020 r.
androidx.lifecycle:lifecycle-*:2.3.0-alpha04
został zwolniony. Wersja 2.3.0-alpha04 zawiera te commity.
Poprawki błędów
- Naprawiliśmy błąd powodujący awarię podczas sprawdzania Lint w
NonNullableMutableLiveData
. (b/157294666) - Sprawdzanie Lint
NonNullableMutableLiveData
obejmuje teraz znacznie więcej przypadków, w których w elementachMutableLiveData
z parametrami typu niezerowego ustawiono wartośćnull
. (b/156002218)
Wersja 2.3.0-alpha03
20 maja 2020 r.
androidx.lifecycle:lifecycle-*:2.3.0-alpha03
zostały opublikowane. Wersja 2.3.0-alpha03 zawiera te commity.
Nowe funkcje
SavedStateHandle
obsługuje teraz sekwencję opóźnionej serializacji, która umożliwia wywołanie funkcjisetSavedStateProvider()
dla danego klucza, podając obiektSavedStateProvider
, który otrzyma wywołanie zwrotne do funkcjisaveState()
, gdy funkcjaSavedStateHandle
poprosi o zapisanie stanu. (b/155106862)- Nowy interfejs API
ViewTreeViewModelStoreOwner.get(View)
umożliwia pobranieViewModelStoreOwner
na podstawie wystąpieniaView
. Aby prawidłowo wypełnić te pola, musisz przejść na Aktywność1.2.0-alpha05
, Fragment1.3.0-alpha05
i Kompatybilność z aplikacjami1.3.0-alpha01
. Dolifecycle-viewmodel-ktx
dodano rozszerzenie KotlinafindViewModelStoreOwner()
. (aosp/1295522)
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że kontrole lint
MutableLiveData
opublikowane w cyklu życia2.3.0-alpha01
nie były publikowane wraz z artefaktemlifecycle-livedata-core-ktx
. (b/155323109)
Wersja 2.3.0-alpha02
29 kwietnia 2020 r.
androidx.lifecycle:lifecycle-*:2.3.0-alpha02
został zwolniony. Wersja 2.3.0-alpha02 zawiera te commity.
Zmiany w interfejsie API
SavedStateViewModelFactory
umożliwia teraz przekazywanie konstruktorowi wartości nullApplication
, aby lepiej obsługiwać przypadki, w których wartość nie jest łatwo dostępna i nie jest potrzebna obsługaAndroidViewModel
. (aosp/1285740)
Poprawki błędów
- Zwiększona wydajność uruchamiania „na zimno” dzięki unikaniu błędów weryfikacji klasy na urządzeniach z interfejsem API 28 lub niższym. (aosp/1282118)
Wersja 2.3.0-alpha01
4 marca 2020 r.
androidx.lifecycle:lifecycle-*:2.3.0-alpha01
został zwolniony. Wersja 2.3.0-alpha01 zawiera te commity.
Nowe funkcje
- Nowy interfejs API
ViewTreeLifecycleOwner.get(View)
umożliwia pobranieLifecycleOwner
na podstawie wystąpieniaView
. Aby poprawnie wypełnić te pola, musisz przejść na Aktywność1.2.0-alpha01
i Fragment1.3.0-alpha01
. Rozszerzenie KotlinafindViewTreeLifecycleOwner
jest dostępne w wersjilifecycle-runtime-ktx
. (aosp/1182361, aosp/1182956) - Dodano nową kontrolę Lint, która ostrzega, gdy ustawiasz wartość
null
w obiekcieMutableLiveData
zdefiniowanym w Kotlinie jako niepusty. Jest to możliwe, gdy używasz artefaktówlivedata-core-ktx
lublivedata-ktx
. (aosp/1154723, aosp/1159092) - Dostępny jest nowy artefakt
lifecycle-runtime-testing
, który udostępniaTestLifecycleOwner
, który implementujeLifecycleOwner
i zapewnia bezpieczną dla wątku zmiennąLifecycle
. (aosp/1242438)
Poprawki błędów
- Element
lifecycle-runtime
ma teraz unikalną nazwę pakietu. (aosp/1187196)
Wersja 2.2.0
ViewModel-Savedstate w wersji 2.2.0
5 lutego 2020 r.
androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0
został zwolniony. Wersja 2.2.0 zawiera te zatwierdzenia:
Stan zapisany Lifecycle ViewModel ma teraz tę samą wersję co inne artefakty cyklu życia. Działanie typu 2.2.0
jest identyczne z działaniem typu 1.0.0
.
Wersja 2.2.0
22 stycznia 2020 r.
androidx.lifecycle:lifecycle-*:2.2.0
został zwolniony. Wersja 2.2.0 zawiera te zatwierdzenia:
Ważne zmiany od wersji 2.1.0
- Integracja z routiną cyklu życia: nowy artefakt
lifecycle-runtime-ktx
zapewnia integrację między Lifecycle a rutynami Kotlina. Rozszerzyliśmy teżlifecycle-livedata-ktx
, aby można było korzystać z funkcji coroutines. Więcej informacji znajdziesz w artykule Używanie korobocji Kotlina z Architecture Components. - Wycofanie
ViewModelProviders.of()
: środowisko wykonawczeViewModelProviders.of()
zostało wycofane. Aby uzyskać tę samą funkcjonalność przy użyciu Fragment1.2.0
, możesz przekazać do konstruktoraViewModelProvider(ViewModelStoreOwner)
wartośćFragment
lubFragmentActivity
. lifecycle-extensions
Przestań używać artefaktów: ta wersja oznacza wycofanie ostatniego interfejsu API wlifecycle-extensions
, a ten artefakt powinien zostać uznany za przestarzały w całości.ViewModelProviders.of()
W zależności od potrzebnych artefaktów cyklu życia (takich jaklifecycle-service
w przypadku wersjiLifecycleService
ilifecycle-process
w przypadku wersjiProcessLifecycleOwner
) zalecamy użycie wersjilifecycle-extensions
, a nielifecycle-extensions
, ponieważ ta ostatnia nie będzie już dostępna w przyszłości.2.3.0
- Procesor adnotacji Gradle Incremental Annotation Processor: procesor adnotacji Lifecycle jest domyślnie metodą przyrostową.
Jeśli aplikacja jest napisana w języku programowania Java 8, możesz użyć
DefautLifecycleObserver
, a jeśli jest napisana w języku programowania Java 7, możesz użyćLifecycleEventObserver
.
Wersja 2.2.0-rc03
4 grudnia 2019
androidx.lifecycle:lifecycle-*:2.2.0-rc03
został zwolniony. Wersja 2.2.0-rc03 zawiera te zatwierdzenia:
Poprawki błędów
- Rozwiązaliśmy problem, który występował, gdy w
ViewModelStore
przechowywano wyśmiewaną instancjęViewModel
, a później wysyłano zapytanie z użyciem domyślnej fabryki. - Napraw użycie
Dispatchers.Main.immediate
wlaunchWhenCreated
i podobnych metodach, aby były wywoływane synchronicznie podczas odpowiedniego zdarzenia cyklu życia. (aosp/1156203)
Wkład zewnętrzny
- Dziękujemy Andersowi Järlebergowi za wniesienie poprawki. (aosp/1156203)
- Dziękujemy Vsevolodowi Tolstopyatowowi z Jetbrains za sprawdzenie implementacji wbudowanego wykonywania.
Zmiany zależności
- Rozszerzenia cyklu życia zależą teraz od fragmentu
1.2.0-rc03
.
Wersja 2.2.0-rc02
7 listopada 2019 r.
androidx.lifecycle:lifecycle-*:2.2.0-rc02
został zwolniony. Wersja 2.2.0-rc02 zawiera te zatwierdzenia:
Poprawki błędów
- Usunięto błąd w konfiguracji ProGuarda biblioteki, który dotyczył urządzeń z interfejsem API w wersji 28 lub nowszej, jeśli docelowy interfejs API jest starszy niż 29. (b/142778206)
Wersja 2.2.0-rc01
23 października 2019 r.
androidx.lifecycle:lifecycle-*:2.2.0-rc01
został zwolniony. Wersja 2.2.0-rc01 zawiera te zatwierdzenia:
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że metoda
launchWhenCreated
i powiązane z nią metody były wywoływane o jeden kadr później niż powiązana metoda cyklu życia z powodu użycia w niej metodyDispatchers.Main
zamiastDispatchers.Main.immediate
. (aosp/1145596)
Wkład zewnętrzny
- Dziękujemy Nicklasowi Ansmanowi za wkład w rozwiązanie problemu. (aosp/1145596)
Wersja 2.2.0-beta01
9 października 2019 r.
androidx.lifecycle:lifecycle-*:2.2.0-beta01
został zwolniony. Wersja 2.2.0-beta01 zawiera te commity:
Poprawki błędów
- Naprawiono regresję wprowadzoną w Lifecycle 2.2.0-alpha05 w zakresie kolejności
ProcessLifecycleOwner
i aktywnościLifecycleOwner
przechodzącej do stanu uruchomionej i wznowionej na urządzeniach z Androidem 10. (aosp/1128132) - Rozwiązano problem z regresją wprowadzony w Cyklu życia
2.2.0-alpha05
, który powodował błądNullPointerException
podczas korzystania z wersji2.0.0
lub2.1.0
pakietulifecycle-process
. (b/141536990)
Wersja 2.2.0-alpha05
18 września 2019 r.
androidx.lifecycle:lifecycle-*:2.2.0-alpha05
został zwolniony. Wersja 2.2.0-alpha05 zawiera te commity
Poprawki błędów
- Usunięto warunek wyścigu w budującym danych na żywo w ramach coroutine. b/140249349
Wersja 2.2.0-alpha04
5 września 2019 r.
androidx.lifecycle:lifecycle-*:2.2.0-alpha04
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
- Funkcje
lifecycleScope
,whenCreated
,whenStarted
,whenResumed
,viewModelScope
i podstawowa implementacja funkcjiliveData
używają teraz funkcjiDispatchers.Main.immediate
zamiastDispatchers.Main
. (b/139740492)
Wkład zewnętrzny
- Dziękujemy Nicklasowi Ansmanowi za przeniesienie do
Dispatchers.Main.immediate
. (aosp/1106073)
Wersja 2.2.0-alpha03
7 sierpnia 2019 r.
androidx.lifecycle:lifecycle-*:2.2.0-alpha03
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
- Implementacje
ViewModelStoreOwner
mogą teraz opcjonalnie implementowaćHasDefaultViewModelProviderFactory
, aby zapewnić domyślną wartośćViewModelProvider.Factory
. Zmiany te zostały wprowadzone w przypadku Aktywności1.1.0-alpha02
, Fragmentu1.2.0-alpha02
i Nawigacji2.2.0-alpha01
. (aosp/1092370, b/135716331)
Zmiany w interfejsie API
- Środowisko wykonawcze
ViewModelProviders.of()
zostało wycofane. Aby uzyskać tę samą funkcjonalność, możesz przekazać do nowego konstruktoraViewModelProvider(ViewModelStoreOwner)
argumentFragment
lubFragmentActivity
. (aosp/1009889)
Wersja 2.2.0-alpha02
2 lipca 2019 r.
androidx.lifecycle:*:2.2.0-alpha02
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Zmiany w interfejsie API
- Zastąpiono zmienną
LiveDataScope.initialValue
zmiennąLiveDataScope.latestValue
, która będzie śledzić bieżącą wartość emitowaną przez blokliveData
. - Do kreatora
liveData
dodano nową przeciążenie, które przyjmuje parametrtimeout
jako typDuration
Wersja 2.2.0-alpha01
7 maja 2019 r.
androidx.lifecycle:*:2.2.0-alpha01
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
- Ta wersja zawiera nowe funkcje, które umożliwiają obsługę coroutines w Kotlinie w przypadku Lifecycle i LiveData. Szczegółową dokumentację znajdziesz tutaj.
ViewModel-SavedState w wersji 1.0.0
Wersja 1.0.0
22 stycznia 2020 r.
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0
został zwolniony. Wersja 1.0.0 zawiera te zatwierdzenia:
Ważne funkcje w wersji 1.0.0
- Dodano nową klasę SavedStateHandle. Umożliwia to klasom
ViewModel
dostęp do zapisanego stanu i wprowadzanie zmian w tym stanie. Obiekt ten może być przekazywany w konstruktorze klasyViewModel
i fabrycznych obiektów domyślnie udostępnianych przez fragmenty. Komponent AppCompatActivity automatycznie wstrzyknie obiektSavedStateHandle
. - Dodano klasę AbstractSavedStateViewModelFactory. Umożliwia tworzenie niestandardowych fabryk dla
ViewModel
i udostępnianie im dostępu doSavedStateHandle
.
ViewModel-Savedstate w wersji 1.0.0-rc03
4 grudnia 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03
został zwolniony. Wersja 1.0.0-rc03 zawiera te zatwierdzenia
Zmiany zależności
- Stan zapisany Lifecycle ViewModel zależy teraz od
2.2.0-rc03
.
Viewmodel-Savedstate w wersji 1.0.0-rc02
7 listopada 2019 r.
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc02
został zwolniony. Wersja 1.0.0-rc02 zawiera te zatwierdzenia:
Zmiany zależności
- Teraz zależy to od cyklu życia
2.2.0-rc02
.
ViewModel-SavedState w wersji 1.0.0-rc01
23 października 2019 r.
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01
jest publikowany bez zmian z 1.0.0-beta01
. Wersja 1.0.0-rc01 zawiera te zatwierdzenia:
ViewModel-Savedstate w wersji 1.0.0-beta01
9 października 2019 r.
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01
został zwolniony. Wersja 1.0.0-beta01 zawiera te commity.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że pierwszy dostęp do
Activity.onActivityResult()
wIllegalStateException
powodował błądIllegalStateException
. (b/139093676) - Usunęliśmy błąd
IllegalStateException
występujący podczas używaniaAbstractSavedStateViewModelFactory
. (b/141225984)
ViewModel-SavedState w wersji 1.0.0-alpha05
18 września 2019 r.
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha05
został zwolniony. Wersja 1.0.0-alpha05 zawiera te zatwierdzenia.
Zmiany w interfejsie API
SavedStateViewModelFactory
nie rozszerza już klasyAbstractSavedStateViewModelFactory
, aSavedStateHandle
jest tworzona tylko dla ViewModels, które ją zażądały (aosp/1113593).
ViewModel-SavedState w wersji 1.0.0-alpha03
7 sierpnia 2019 r.
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Zmiany powodujące niezgodność
- Konstruktor
lifecycle-viewmodel-savedstate
nie zależy już od konstruktorafragment
, a powiązane konstruktorySavedStateViewModelFactory(Fragment)
iSavedStateViewModelFactory(FragmentActivity)
zostały usunięte. Zamiast tegoSavedStateViewModelFactory
jest teraz domyślną fabryką dla Aktywności1.1.0-alpha02
, Fragmentu1.2.0-alpha02
i Nawigacji2.2.0-alpha01
. (b/135716331)
ViewModel-SavedState w wersji 1.0.0-alpha02
2 lipca 2019 r.
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha02
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
- Dodano przeciążenie funkcji
SavedStateHandle.getLiveData()
, która przyjmuje wartość domyślną.
Zmiany w interfejsie API
- Nazwa
SavedStateVMFactory
została zmieniona naSavedStateViewModelFactory
. - Nazwa
AbstractSavedStateVMFactory
została zmieniona naAbstractSavedStateViewModelFactory
.
ViewModel-Savedstate w wersji 1.0.0-alpha01
13 marca 2019 r.
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01
został zwolniony. Pełny log zatwierdzeń dla tej wstępnej wersji znajdziesz tutaj.
Nowe funkcje
- Teraz
ViewModels
może współtworzyć stan zapisany. W tym celu używasz nowo wprowadzonej fabryki viewmodelSavedStateVMFactory
, a Twoja klasa ViewModel powinna mieć konstruktor, który jako parametr przyjmuje obiektSavedStateHandle
.
Wersja 2.1.0
Ważne zmiany od wersji 2.0.0
- Dodano
LifecycleEventObserver
na potrzeby sytuacji, w których potrzebny jest strumień zdarzeń cyklu życia. Jest to publiczny interfejs API, a nie ukryta klasaGenericLifecycleObserver
. - Dodano rozszerzenia ktx dla metod
LiveData.observe
iTransformations.*
. - Dodano funkcję
Transformations.distinctUntilChanged
, która tworzy nowy obiekt LiveData, który nie emituje wartości, dopóki nie zmieni się źródłowa wartośćLiveData
. - Dodano obsługę coroutine w klasach ViewModel poprzez dodanie właściwości rozszerzenia
ViewModel.viewModelScope
.
Wersja 2.1.0
5 września 2019 r.
androidx.lifecycle:lifecycle-*:2.1.0
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Wersja 2.1.0-rc01
2 lipca 2019 r.
androidx.lifecycle:*:2.1.0-rc01
jest publikowany bez zmian z androidx.lifecycle:*:2.1.0-beta01
. Zmiany zawarte w tej wersji znajdziesz tutaj.
Wersja 2.1.0-beta01
7 maja 2019 r.
androidx.lifecycle:*:2.1.0-beta01
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
- Cykle życia są dostępne w wersji beta: interfejsy API wprowadzone w poprzednich wersjach alfa, takie jak
liveData
funkcje rozszerzeń do przekształcania i obserwowania,ViewModel
inicjalizacja z delegowaniem właściwości i inne, są stabilne i nie ulegną zmianie.
Wersja 2.1.0-alpha04
3 kwietnia 2019 r.
androidx.lifecycle:*:2.1.0-alpha04
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Zmiany w interfejsie API
- Zmiana wprowadzająca: interfejs API używany przez
by viewModels()
iby activityViewModels()
został zmieniony, aby obsługiwał bezpośrednioViewModelStore
, a nie tylkoViewModelStoreOwner
. (aosp/932932)
Wersja 2.1.0-alpha03
13 marca 2019 r.
androidx.lifecycle:*:2.1.0-alpha03
został zwolniony. Pełną listę zatwierdzeń zawartych w tej wersji znajdziesz tutaj.
Zmiany w interfejsie API
- Pole „
ViewModelProvider.KeyedFactory
” zostało usunięte. Drugi interfejs opróczViewModelProvider.Factory
nie współpracował dobrze z nowymi funkcjami, takimi jak delegowanie właściwości w Kotlinieby viewmodels {}
. (aosp/914133)
Wersja 2.1.0-alpha02
30 stycznia 2019 r.
androidx.lifecycle 2.1.0-alpha02
został zwolniony.
Zmiany w interfejsie API
LifecycleRegistry
zawiera teraz metodęsetCurrentState()
, która zastępuje wycofaną metodęsetState()
. (aosp/880715)
Poprawki błędów
- Rozwiązaliśmy problem, który powodował awarię fałszywych instancji
ViewModel
po wyczyszczeniu zawierającego je obiektuViewModelStore
. b/122273087
Wersja 2.1.0-alpha01
17 grudnia 2018 r.
androidx.lifecycle 2.1.0-alpha01
został zwolniony.
Nowe funkcje
- Dodano
LifecycleEventObserver
na potrzeby sytuacji, w których potrzebny jest strumień zdarzeń cyklu życia. Jest to publiczny interfejs API, a nie ukryta klasaGenericLifecycleObserver
. - Dodano rozszerzenia ktx dla metod
LiveData.observe
iTransformations.*
. - Dodano metodę
Transformations.distinctUntilChanged
. Tworzy on nowy obiektLiveData
, który nie emituje wartości, dopóki nie zmieni się źródłowa wartość LiveData. - Obsługa coroutine w ViewModels: dodano właściwość rozszerzenia
ViewModel.viewModelScope
. - Dodaliśmy
ViewModelProvider.KeyedFactory
, fabrykę ViewModels, która w metodziecreate
przyjmuje parametrykey
iClass
.
Wersja 2.0.0
Wersja 2.0.0
21 września 2018 r.
Wersja 2.0.0
interfejsu Lifecycle zawiera poprawkę błędu z wersji 2.0.0-rc01
w ViewModel.
Poprawki błędów
- Naprawiono regułę Proguard dla ViewModel, która nieprawidłowo usuwała konstruktory b/112230489
Wersja 2.0.0-beta01
2 lipca 2018 r.
Poprawki błędów
- Naprawiono regułę Proguarda LifecycleObserver, aby zachować tylko implementacje, a nie interfejsy podrzędne b/71389427
- Poprawiono reguły Proguarda dotyczące ViewModel, aby umożliwić zaciemnianie i skracanie
Wersje starsze niż AndroidX
W przypadku wersji Cyklu życia, które powstały przed Androidem X, uwzględnij te zależności:
dependencies {
def lifecycle_version = "1.1.1"
// ViewModel and LiveData
implementation "android.arch.lifecycle:extensions:$lifecycle_version"
// alternatively - just ViewModel
implementation "android.arch.lifecycle:viewmodel:$lifecycle_version" // For Kotlin use viewmodel-ktx
// alternatively - just LiveData
implementation "android.arch.lifecycle:livedata:$lifecycle_version"
// alternatively - Lifecycles only (no ViewModel or LiveData).
// Support library depends on this lightweight import
implementation "android.arch.lifecycle:runtime:$lifecycle_version"
annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version" // For Kotlin use kapt instead of annotationProcessor
// alternately - if using Java8, use the following instead of compiler
implementation "android.arch.lifecycle:common-java8:$lifecycle_version"
// optional - ReactiveStreams support for LiveData
implementation "android.arch.lifecycle:reactivestreams:$lifecycle_version"
// optional - Test helpers for LiveData
testImplementation "android.arch.core:core-testing:$lifecycle_version"
}
Wersja 1.1.1
21 marca 2018 r.
Tylko jedna mała zmiana: android.arch.core.util.Function
przeniesiony z arch:runtime
do arch:common
. Dzięki temu można go używać bez zależności w czasie wykonywania, np. w paging:common
poniżej.
lifecycle:common
jest zależne od lifecycle:runtime
, więc ta zmiana nie wpływa bezpośrednio na lifecycle:runtime
, tylko na moduły, które są bezpośrednio zależne od lifecycle:common
, tak jak Paging.
Wersja 1.1.0
22 stycznia 2018 r.
Zmiany w opakowaniu
Dostępne są teraz nowe, znacznie mniejsze zależności:
android.arch.lifecycle:livedata:1.1.0
android.arch.lifecycle:viewmodel:1.1.0
Zmiany w interfejsie API
- Wycofane parametry
LifecycleActivity
iLifecycleFragment
zostały usunięte. Użyj parametrówFragmentActivity
,AppCompatActivity
lubFragment
. - Do dysku
ViewModelProviders
iViewModelStores
dodano adnotacje@NonNull
- Konstruktor
ViewModelProviders
został wycofany – używaj bezpośrednio jego metod statycznych. - Środowisko wykonawcze
ViewModelProviders.DefaultFactory
zostało wycofane – użyj środowiska wykonawczegoViewModelProvider.AndroidViewModelFactory
- Dodano statyczną metodę
ViewModelProvider.AndroidViewModelFactory.getInstance(Application)
, która umożliwia pobieranie statycznego obiektuFactory
odpowiedniego do tworzenia instancjiViewModel
iAndroidViewModel
.