Cykl życia
Ta tabela zawiera listę wszystkich artefaktów w grupie androidx.lifecycle
.
Artefakt | Wersja stabilna | Wersja kandydująca do publikacji | Wersja Beta | Wersja alfa |
---|---|---|---|---|
lifecycle-* | 2.9.1 | - | - | - |
lifecycle-viewmodel-navigation3 | - | - | - | 1.0.0-alpha03 |
Deklarowanie zależności
Aby dodać zależność od komponentu Lifecycle, musisz dodać repozytorium Google Maven do projektu. Więcej informacji znajdziesz w repozytorium Maven Google.
Dodaj zależności dotyczące potrzebnych artefaktów w pliku build.gradle
aplikacji lub modułu:
Kotlin
Groovy
dependencies { def lifecycle_version = "2.9.1" def arch_version = "2.2.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" // ViewModel utilities for Compose implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version" // LiveData implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version" // Lifecycles only (without ViewModel or LiveData) implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version" // Lifecycle utilities for Compose implementation "androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version" // Saved state module for ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version" // ViewModel integration with Navigation3 implementation "androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha03" // Annotation processor kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // alternately - if using Java8, use the following instead of lifecycle-compiler implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" // optional - helpers for implementing LifecycleOwner in a Service implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version" // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" // optional - ReactiveStreams support for LiveData implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version" // optional - Test helpers for LiveData testImplementation "androidx.arch.core:core-testing:$arch_version" // optional - Test helpers for Lifecycle runtime testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version" }
Kotlin
dependencies { val lifecycle_version = "2.9.1" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version") // ViewModel utilities for Compose implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version") // Lifecycle utilities for Compose implementation("androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // ViewModel integration with Navigation3 implementation("androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha03") // Annotation processor kapt("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation ("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
Java
Groovy
dependencies { def lifecycle_version = "2.9.1" def arch_version = "2.2.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version" // LiveData implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version" // Lifecycles only (without ViewModel or LiveData) implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version" // Saved state module for ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version" // Annotation processor annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // alternately - if using Java8, use the following instead of lifecycle-compiler implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" // optional - helpers for implementing LifecycleOwner in a Service implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version" // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" // optional - ReactiveStreams support for LiveData implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version" // optional - Test helpers for LiveData testImplementation "androidx.arch.core:core-testing:$arch_version" // optional - Test helpers for Lifecycle runtime testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version" }
Kotlin
dependencies { val lifecycle_version = "2.9.1" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // Annotation processor annotationProcessor("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.
Opinia
Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli odkryjesz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nową kartę, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz dodać swój głos do istniejącego problemu, klikając przycisk gwiazdki.
Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.
Lifecycle ViewModel Navigation3 w wersji 1.0.0
Wersja 1.0.0-alpha03
2 lipca 2025 r.
androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha03
i androidx.lifecycle:lifecycle-viewmodel-navigation3-android:1.0.0-alpha03
zostały opublikowane. Wersja 1.0.0-alpha03 zawiera te commity.
Zmiany zależności
- Lifecycle ViewModel Navigation 3 zależy teraz od Navigation3 Alpha05
Wersja 1.0.0-alpha02
18 czerwca 2025 r.
androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha02
i androidx.lifecycle:lifecycle-viewmodel-navigation3-android:1.0.0-alpha02
zostały opublikowane. Wersja 1.0.0-alpha02 zawiera te zmiany.
Aktualizacje zależności
- Lifecycle ViewModel Navigation3
1.0.0-alpha02
zależy od zmian w Navigation31.0.0-alpha04
. (Icd0fd, b/420991203)
Wersja 1.0.0-alpha01
23 maja 2025 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha01
Wersja 1.0.0-alpha01 zawiera te zmiany.
Nowe funkcje
- Lifecycle ViewModel Navigation3 to nowa biblioteka stworzona obok Navigation3, która zapewnia integrację z
ViewModels
.androidx.lifecycle:lifecycle-viewmodel-navigation3
artefakt zawieraViewModelStoreNavEntryDecorator
, który zapewnia unikalnyViewModelStoreOwner
dla zawartości każdegoNavEntry
. Zawiera teżrememberViewModelStoreNavEntryDecorator()
, aby mieć pewność, że dekorator jest prawidłowo obsługiwany przez zmiany konfiguracji.
val viewModelDecorator = rememberViewModelStoreNavEntryDecorator()
NavDisplay(
…,
entryDecorators =
listOf(
rememberSceneSetupNavEntryDecorator(),
rememberSavedStateNavEntryDecorator(),
viewModelDecorator
)
)
Wersja 2.9
Wersja 2.9.1
4 czerwca 2025 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.1
Wersja 2.9.1 zawiera te zmiany.
Poprawki błędów
- Naprawiono problem z nieusuwaniem stanów
SavedStateHandle.remove(key)
przezSavedStateHandle.getMutableStateFlow(key)
. (d5f939, b/418746333)
Wersja 2.9.0
7 maja 2025 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0
Wersja 2.9.0 zawiera te zmiany.
Ważne zmiany od wersji 2.8.0
- Dostępny jest nowy artefakt
androidx.lifecycle:lifecycle-viewmodel-testing
KMP, który zawiera klasęViewModelScenario
do testowaniaViewModels
w izolacji, z obsługąonCleared
iSavedStateHandle
, a także testowania procesu zakończenia i ponownego utworzenia za pomocąrecreate()
. - Dodaj
getMutableStateFlow
doSavedStateHandle
, aby zwrócićMutableStateFlow
. Ta nowa funkcja jest dostępna tylko w przypadku kluczy i nie można jej używać zgetLiveData
. Jeśli spróbujesz użyć obu tych metod do uzyskania dostępu do tego samego stanu, zostanie zgłoszony wyjątek. CreationExtras
zawiera teraz przeciążenia operatorów podobne do map, które umożliwiają idiomatyczną manipulację treściami w języku Kotlin. Umożliwia używanie właściwościin
,+=
i+
z właściwościąCreationExtras
.
Obsługa serializacji KotlinX
Dzięki obsłudze serializacji KotlinX dodanej w SavedState
1.3.0
wprowadziliśmysaved
, delegata właściwości leniwej, aby ułatwić przechowywanie klas@Serializable
wSavedStateHandle
i automatyczne przywracanie tych klas po zakończeniu i ponownym utworzeniu procesu. Pamiętaj, żesaved
delegat jest leniwy i nie wywołainit
lambdy ani nie zapisze niczego wSavedStateHandle
, dopóki nie zostanie do niego uzyskany dostęp.@Serializable data class Person(val firstName: String, val lastName: String) class MyViewModel(handle: SavedStateHandle) : ViewModel() { var person by handle.saved { Person("John", "Doe") } fun onPersonChanged(person: Person) { this.person = person } }
Kotlin Multiplatform
- Moduł
lifecycle-testing
jest teraz zgodny z KMP, w tym z interfejsami API, takimi jakTestLifecycleOwner
. - Moduł
lifecycle-viewmodel-savedstate
jest teraz zgodny z KMP, w tym z interfejsami API, takimi jakSavedStateHandle
. androidx.compose.ui.platform.LocalLifecycleOwner
jest teraz dostępny w wspólnym zestawie źródeł.NewInstanceFactory
jest teraz dostępny na platformach JVM Desktop i Android.
Zmiany w zachowaniu
- Stan
Lifecycle.DESTROYED
jest stanem końcowym i każda próba przeniesieniaLifecycle
z tego stanu do innego stanu spowoduje teraz wystąpienie błęduIllegalStateException
. SavedStateHandle
nie zawiera już żadnychSavedStateProvider.saveState()
, w przypadku których zwrócona wartośćBundle
jest pusta.
Wersja 2.9.0-rc01
23 kwietnia 2025 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0-rc01
Wersja 2.9.0-rc01 zawiera te zmiany.
Wersja 2.9.0-beta01
9 kwietnia 2025 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0-beta01
Wersja 2.9.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
Lifecycle ViewModel Compose
korzysta teraz z tej samej konfiguracji Kotlin Multiplatform co Compose Runtime w wersji 1.7.1 i nowszej – artefakty-desktop
zostały usunięte, a dodano artefakty-jvmStubs
i-linuxx64Stubs
. Żaden z tych celów nie jest przeznaczony do użytku. Są to symbole zastępcze, które mają pomóc w pracach nad Jetbrains Compose. (I5cb14, b/406592090)
Aktualizacje zależności
- Ta biblioteka jest teraz kierowana na poziom języka Kotlin 2.0 i wymaga KGP w wersji 2.0.0 lub nowszej. (Idb6b5)
Lifecycle ViewModel Compose
zależy teraz od Compose w wersji 1.7.8. (I5cb14, b/406592090)
Wersja 2.9.0-alpha13
26 marca 2025 r.
androidx.lifecycle:lifecycle-*:2.9.0-alpha13
została wydana bez znaczących zmian publicznych. Wersja 2.9.0-alpha13 zawiera te zmiany.
Wersja 2.9.0-alpha12
12 marca 2025 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0-alpha12
Wersja 2.9.0-alpha12 zawiera te zmiany.
Zmiany w interfejsie API
- Dodaj adnotację
@MainThread
doViewModelProvider.get
na wszystkich obsługiwanych platformach KMP. (I7e8dd, b/397736115) - Zmień nazwę
SavedState*Delegates
naSavedState*Delegate
. (I8589b, b/399629301)
Wersja 2.9.0-alpha11
26 lutego 2025 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0-alpha11
Wersja 2.9.0-alpha11 zawiera te zmiany.
Zmiany w interfejsie API
- Dodaj parametr
SavedStateConfig
do delegatówsaved()
(I39b3a)
Wersja 2.9.0-alpha10
12 lutego 2025 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0-alpha10
Wersja 2.9.0-alpha10 zawiera te zmiany.
Zmiany w interfejsie API
- Przenieś
MutableStateSerializer
dosavedstate-compose
zlifecycle-viewmodel-compose
. (I4f690, b/378895074)
Wkład zewnętrzny
- Dodaje nowy problem Lint dotyczący wywoływania funkcji
Lifecycle::currentState
w kompozycji, zamiast tego sugeruje użycie funkcjicurrentStateAsalue().value
, aby mieć pewność, że zmiany stanu cyklu życia prawidłowo powodują ponowne komponowanie. Dziękujemy Stevenowi Schoenowi! (Iad484)
Wersja 2.9.0-alpha09
29 stycznia 2025 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0-alpha09
Wersja 2.9.0-alpha09 zawiera te zmiany.
Nowe funkcje
- Dodaj
MutableStateSerializer
do serializacjiandroidx.compose.runtime.MutableState
. (Idfc48, b/378895074)
Zmiany w interfejsie API
- Zastąpienie przeciążonych funkcji delegata
SavedStateHandle.saved()
parametrami domyślnymi (Icd1c1) AbstractSavedStateViewModelFactory
jest wycofana, ponieważ tworzySavedStateHandle
dla każdegoViewModel
, co powoduje niepotrzebne obciążenie. Aby skuteczniej tworzyćViewModel
, używaj zamiast tego atrybutuViewModelProvider.Factory
z atrybutemCreationExtras.createSavedStateHandle
. (Ia920b, b/388590327)
Wersja 2.9.0-alpha08
11 grudnia 2024 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0-alpha08
Wersja 2.9.0-alpha08 zawiera te zmiany.
Nowe funkcje
- Dodaj
ViewModelScenario.recreate
, aby zasymulować zakończenie procesu systemowego, odtwarzającViewModel
poddany testowi i wszystkie powiązane komponenty. (Id6a69, b/381063087) - Instancje
LifecycleOwner
iViewModelStoreOwner
pobrane za pomocą odpowiednich interfejsów APIfindViewTree
można teraz rozwiązywać za pomocą rozłącznych elementów nadrzędnych widoku, np.ViewOverlay
. Więcej informacji o rozłącznych elementach nadrzędnych widoku znajdziesz w informacjach o wersji podstawowej lub w dokumentacji wViewTree.setViewTreeDisjointParent
. (I800f4)
Zmiany w interfejsie API
- Ujednolicenie nazewnictwa i organizacji pakietów zgodnie z
SavedStateRegistryOwnerDelegate
(I8c135, b/376026744)
Poprawki błędów
- Ta biblioteka używa teraz adnotacji o wartości null JSpecify, które są używane w typach. Deweloperzy korzystający z języka Kotlin powinni używać tego argumentu kompilatora, aby wymusić prawidłowe użycie:
-Xjspecify-annotations=strict
(jest to domyślne ustawienie od wersji 2.1.0 kompilatora Kotlin). (Ie4340, b/326456246) - Sekwencja czyszczenia dokumentu
ViewModel.onCleared
. (I586c7, b/363984116)
Wersja 2.9.0-alpha07
13 listopada 2024 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0-alpha07
Wersja 2.9.0-alpha07 zawiera te zmiany.
Zgodność z Kotlin Multiplatform
- Biblioteka Lifecycle
ViewModel SavedState
jest teraz zgodna z KMP. Dzięki temu możesz używaćSavedStateHandle
w kodzie wspólnym. (Ib6394, b/334076622)
Obsługa serializacji KotlinX
Dzięki obsłudze serializacji KotlinX dodanej w SavedState
1.3.0-alpha05
wprowadziliśmysaved
, delegata właściwości leniwej, aby ułatwić przechowywanie klas@Serializable
wSavedStateHandle
i automatyczne przywracanie tych klas po zakończeniu i ponownym utworzeniu procesu. Pamiętaj, żesaved
delegat jest leniwy i nie wywołainit
lambdy ani nie zapisze niczego wSavedStateHandle
, dopóki nie zostanie do niego uzyskany dostęp. (I47a88, b/376026744)@Serializable data class Person(val firstName: String, val lastName: String) class MyViewModel(handle: SavedStateHandle) : ViewModel() { var person by handle.saved { Person("John", "Doe") } fun onPersonChanged(person: Person) { this.person = person } }
Zmiany w interfejsie API
- Dodaj
getMutableStateFlow
doSavedStateHandle
, aby zwrócićMutableStateFlow
. Ta nowa funkcja jest dostępna tylko w przypadku kluczy i nie można jej używać zgetLiveData
. Jeśli spróbujesz użyć obu tych metod do uzyskania dostępu do tego samego stanu, zostanie zgłoszony wyjątek. (I04a4f, b/375408415)
Wersja 2.9.0-alpha06
30 października 2024 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0-alpha06
Wersja 2.9.0-alpha06 zawiera te zmiany.
Zmiany w zachowaniu
- Stan
Lifecycle.DESTROYED
jest stanem końcowym i każda próba przeniesieniaLifecycle
z tego stanu do innego stanu spowoduje teraz wystąpienie błęduIllegalStateException
. (I116c4, b/370577987) SavedStateHandle
nie zawiera już żadnychSavedStateProvider.saveState()
, w przypadku których zwrócona wartośćBundle
jest pusta. (I910b5, b/370577987)
Poprawki błędów
Lifecycle.eventFlow
teraz prawidłowo kończy się, gdyLifecycle
ma wartośćDESTROYED
(I293b2, b/374043130)
Wersja 2.9.0-alpha05
16 października 2024 r.
Wersja androidx.lifecycle:lifecycle-*:2.9.0-alpha05
nie zawiera znaczących zmian. Wersja 2.9.0-alpha05 zawiera te zmiany.
Wersja 2.9.0-alpha04
2 października 2024 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0-alpha04
Wersja 2.9.0-alpha04 zawiera te zmiany.
Kotlin Multiplatform
- Moduł
lifecycle-viewmodel-savedstate
jest teraz skonfigurowany tak, aby był zgodny z KMP. Przygotowujemy się w ten sposób do udostępnienia w przyszłej wersji interfejsów API takich jakSavedStateHandle
w wspólnym zestawie źródeł. (I503ed, I48764, b/334076622)
Wersja 2.9.0-alpha03
18 września 2024 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0-alpha03
Wersja 2.9.0-alpha03 zawiera te zmiany.
Poprawki błędów
- Z sekcji Cykl życia
2.8.6
:NullSafeMutableLiveData
błąd Lint ma ulepszoną obsługę inteligentnego rzutowania, co pozwala uniknąć fałszywych alarmów. (85fed6, b/181042665)
Aktualizacje zależności
- W sekcji Cykl życia
2.8.6
: środowisko wykonawcze cyklu życia w Compose zależy teraz od środowiska wykonawczego Compose1.7.1
- Środowisko wykonawcze cyklu życia zależy teraz od ProfileInstaller
1.4.0
Wersja 2.9.0-alpha02
4 września 2024 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0-alpha02
Wersja 2.9.0-alpha02 zawiera te zmiany.
Poprawki błędów
- W sekcji Cykl życia
2.8.5
: zaktualizujandroidx.lifecycle.ReportFragment
reguły ProGuard, aby zezwalały na zaciemnianie . (ff898e1)
Wkład zewnętrzny
- Przenieś
androidx.compose.ui.platform.LocalLifecycleOwner
do wspólnego zestawu źródeł (KMP). Dziękujemy Ivanowi Matkovowi z JetBrains za pomoc. (8cd5d03) - W cyklu życia
2.8.5
: delegat rozszerzenia SavedStateHandle.saveable` obsługuje teraz wartości dopuszczające wartość null. Dziękujemy Romanowi Kalukiewiczowi za pomoc. (0d78ea6)
Wersja 2.9.0-alpha01
7 sierpnia 2024 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.9.0-alpha01
Wersja 2.9.0-alpha01 zawiera te zmiany.
Kotlin Multiplatform
lifecycle-testing
jest teraz zgodne z KMP. (Iea41e)- Dodanie obsługi
linuxArm64
platformy wieloplatformowej Kotlin (I139d3, b/338268719)
Nowe funkcje
- Dostępny jest nowy artefakt KMP, który zawiera klasę
ViewModelScenario
do testowania elementów ViewModel w izolacji, z obsługąonCleared
(wszystkie platformy) iSavedStateHandle
(tylko Android).androidx.lifecycle:lifecycle-viewmodel-testing
(337f68d, c9b3409, 9799a95c, b/264602919) - Tworzenie obiektu
ViewModel
za pomocą obiektuViewModelProvider
jest teraz bezpieczne dla wątków. Usunięto adnotacje@MainThread
. (Ifd978, b/237006831)
Zmiany w interfejsie API
- Dodaj funkcję fabryczną
CreationExtras.Key()
, aby uprościć tworzenie anonimowych obiektówCreationExtras.Key
. (I970ee) CreationExtras
zawiera teraz przeciążenia operatorów podobne do map, które umożliwiają idiomatyczną manipulację treściami w języku Kotlin. Umożliwia używanie właściwościin
,+=
i+
z właściwościąCreationExtras
. (Ib4353)CreationExtras
implementuje teraz metodyequals
,hashCode
itoString
. (Ib4353)NewInstanceFactory
jest teraz dostępny na platformach JVM Desktop i Android. (d3d0892)- Właściwość rozszerzenia wbudowanego, która bezpiecznie udostępnia bazową aplikację w języku Kotlin w wersji 2.0 (I39df2)
Poprawki błędów
- Usunęliśmy ręczne określanie dostępu do nowych interfejsów API platformy, ponieważ odbywa się to automatycznie za pomocą modelowania interfejsu API podczas korzystania z R8 z AGP 7.3 lub nowszym (np. R8 w wersji 3.3) oraz w przypadku wszystkich kompilacji podczas korzystania z AGP 8.1 lub nowszego (np. D8 w wersji 8.1). Klienci, którzy nie korzystają z AGP, powinni zaktualizować D8 do wersji 8.1 lub nowszej. Więcej szczegółów znajdziesz w tym artykule. (If6b4c, b/345472586)
Wersja 2.8
Wersja 2.8.7
30 października 2024 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.7
Wersja 2.8.7 zawiera te zmiany.
Zmiany w interfejsie API
androidx.compose.ui.platform.LocalLifecycleOwner
jest teraz dostępny w zestawie wspólnych źródeł (KMP). (6a3f5b3)lifecycle-runtime-compose
: usuniętodesktop
artefaktów, a dodano-jvmStubs
i-linuxx64Stubs
artefakty. Żaden z tych celów nie jest przeznaczony do użytku. Są to symbole zastępcze, które mają pomóc w pracach nad Jetbrains Compose. (6a3f5b3)
Wersja 2.8.6
18 września 2024 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.6
Wersja 2.8.6 zawiera te zmiany.
Poprawki błędów
NullSafeMutableLiveData
Błąd Lint ma ulepszoną obsługę inteligentnego rzutowania, co pozwala uniknąć fałszywych trafień. (85fed6, b/181042665)
Aktualizacje zależności
- Biblioteka Lifecycle Runtime Compose zależy teraz od Compose Runtime
1.7.1
.
Wersja 2.8.5
4 września 2024 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.5
Wersja 2.8.5 zawiera te zmiany.
Poprawki błędów
- Zaktualizuj reguły
androidx.lifecycle.ReportFragment
ProGuard, aby zezwalały na zaciemnianie . (ff898e1)
Wkład zewnętrzny
- Delegat rozszerzenia
SavedStateHandle.saveable
obsługuje teraz wartości dopuszczające wartość null. Dziękujemy Romanowi Kalukiewiczowi za pomoc. (0d78ea6)
Wersja 2.8.4
24 lipca 2024 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.4
Wersja 2.8.4 zawiera te zmiany.
Poprawki błędów
LiveData.asFlow()
teraz prawidłowo obsługuje przypadki, w których zwrócony przepływ jest natychmiast kończony po otrzymaniu wartości już ustawionej wLiveData
(np. podczas korzystania ztake(1)
). (I9c566)- Metoda
Lifecycle*Effect
jest teraz idempotentna (tzn. jeśli została wywołana z powodu zatrzymania cyklu życia, nie zostanie wywołana po raz drugi po usunięciu, chyba że cykl życia wróci do stanuSTARTED
).onStopOrDispose
(I5f607, b/352364595)
Wersja 2.8.3
1 lipca 2024 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.3
Wersja 2.8.3 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem ze wsteczną zgodnością biblioteki Lifecycle 2.8 z Compose 1.6.0 i starszymi wersjami podczas używania zmniejszania kodu. (aosp/3133056, b/346808608)
Wersja 2.8.2
12 czerwca 2024 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.2
Wersja 2.8.2 zawiera te zmiany.
Poprawki błędów
- Naprawiono błędy
CompositionLocal LocalLifecycleOwner not present
podczas korzystania z Lifecycle w wersji 2.8.X z Compose w wersji 1.6.X lub starszej. Teraz możesz używać Lifecycle w wersji 2.8.2 z dowolną wersją Compose bez konieczności stosowania obejść. (aosp/3105647, b/336842920) ViewModelProvider
nie będzie już ulegać awarii w przypadku łączenia poprzednich wersji zależności cyklu życiacompileOnly
z wersjami 2.8 lub nowszymi, co rozwiązuje problemy z bibliotekami takimi jak LeakCanary. (I80383, b/341792251)
Wersja 2.8.1
29 maja 2024 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.1
Wersja 2.8.1 zawiera te zmiany.
Poprawki błędów
lifecycle-viewmodel-compose
ma teraz tylko wspólną zależność odcompose-runtime
, co usuwa wspólną zależność odcompose-ui
. Artefakt Androida zachowujecompose-ui
ze względu na zgodność. (aosp/3079334, b/339562627)- Integracja
ViewModel
z użyciem delegatów właściwościsaveable
korzysta teraz z nazwy klasy jako części automatycznie generowanego klucza, co pozwala uniknąć konfliktów, jeśli wiele klas używa tego samegoSavedStateHandle
. (aosp/3063463)
Wersja 2.8.0
14 maja 2024 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.0
Wersja 2.8.0 zawiera te zmiany.
Ważne zmiany od wersji 2.7.0
LocalLifecycleOwner
został przeniesiony z interfejsu Compose dolifecycle-runtime-compose
, aby jego interfejsy API pomocnicze oparte na Compose mogły być używane poza interfejsem Compose.- Artefakt
lifecycle-runtime-compose
zawiera teraz interfejsy APIdropUnlessResumed
idropUnlessStarted
, które umożliwiają pomijanie kliknięć lub innych zdarzeń występujących nawet po tym, jak wartośćLifecycleOwner
spadnie poniżej podanej wartościLifecycle.State
. Można go na przykład używać w przypadku Navigation Compose, aby uniknąć obsługi zdarzeń kliknięcia po rozpoczęciu przejścia na inny ekran:onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
ViewModel.viewModelScope
jest teraz parametrem konstruktora, który można zastępować. Umożliwia to wstrzykiwanie własnego dyspozytora iSupervisorJob()
lub zastępowanie domyślnego dyspozytora za pomocąbackgroundScope
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) }
ViewModel
został przepisany w Kotlinie i używa terazAutoClosable
zamiastCloseable
. Umożliwia teraz dodawanieAutoCloseable
obiektów zkey
, które pozwalają na pobieranie ich za pomocągetCloseable()
.Wywoływanie funkcji
LifecycleStartEffect
iLifecycleResumeEffect
bez klucza jest teraz błędem, zgodnie z tą samą konwencją co w przypadku interfejsuDisposableEffect
API, którego te interfejsy API są kopią.Wycofano
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
na rzeczLiveData.toPublisher(lifecycleOwner)
.lifecycle-livedata-core-ktx
rozszerzenia Kotlin zostały przeniesione do modułulifecycle-livedata-core
.NullSafeMutableLiveData
został zmodyfikowany, aby uniknąć wielu fałszywych dopasowań.
Zgodność z Kotlin Multiplatform w zakresie cyklu życia
Podstawowe interfejsy API cyklu życia w Lifecycle
, LifecycleOwner
, LifecycleObserver
, Lifecycle.State
, Lifecycle.Event
i LifecycleRegistry
są teraz dostarczane w artefaktach zgodnych z Kotlin Multiplatform.
Artefakty, których to dotyczy:
lifecycle-common
przenosi większość interfejsów API docommon
i obsługuje jvm oraz iOS oprócz Androida.lifecycle-runtime
przenosi większość interfejsów API docommon
i obsługuje jvm oraz iOS oprócz Androida.lifecycle-runtime-ktx
jest teraz pusta, ponieważ wszystkie interfejsy API zostały przeniesione dolifecycle-runtime
.lifecycle-runtime-compose
przenosi wszystkie interfejsy API docommon
i udostępnia artefakt Androida, który jest zgodny z obsługą wielu platform wandroidx.compose
.
Zgodność ViewModel z Kotlin Multiplatform
Artefakt lifecycle-viewmodel
i interfejsy API, takie jak ViewModel
, ViewModelStore
, ViewModelStoreOwner
i ViewModelProvider
, są teraz dostarczane w artefaktach zgodnych z Kotlin Multiplatform.
Aby uwzględnić tę zmianę, metody takie jak te w ViewModelProvider
, które przyjmowały wartość java.lang.Class<T>
, mają teraz odpowiednik przyjmujący wartość kotlin.reflect.KClass<T>
.
Zachowaliśmy zgodność binarną w Androidzie, ale w porównaniu z wspólnym interfejsem API wprowadziliśmy kilka istotnych zmian w interfejsie API Androida:
- Tworzenie instancji
ViewModelProvider
odbywa się teraz za pomocą metodViewModelProvider.create()
, a nie przez bezpośrednie wywoływanie jej konstruktora. - Wartości
ViewModelProvider.NewInstanceFactory
iViewModelProvider.AndroidViewModelFactory
są dostępne tylko na Androidzie.- W przypadku fabryk niestandardowych zalecamy rozszerzenie klasy
ViewModelProvider.Factory
i użycie metodycreate
, która przyjmuje wartośćCreationExtras
, lub użycie języka Kotlin DSLviewModelFactory
.
- W przypadku fabryk niestandardowych zalecamy rozszerzenie klasy
- Użycie
ViewModelProvider
bez niestandardowej fabryki na platformach innych niż JVM spowoduje wystąpienie błęduUnsupportedOperationException
. Na platformach JVM zgodność jest zachowywana przez użycie konstruktora ViewModel bez argumentów, jeśli nie podano niestandardowej fabryki. viewModelScope
zostanie zastąpiony przezEmptyCoroutineContext
na platformach, na którychDispatchers.Main
nie jest dostępny (np. Linux).
Artefakty, których to dotyczy:
lifecycle-viewmodel
przenosi większość interfejsów API docommon
i obsługuje jvm oraz iOS oprócz Androida.lifecycle-viewmodel-ktx
jest teraz pusta, ponieważ wszystkie interfejsy API zostały przeniesione dolifecycle-viewmodel
.lifecycle-viewmodel-compose
przenosi wszystkie interfejsy API docommon
i udostępnia artefakt Androida, który jest zgodny z obsługą wielu platform wandroidx.compose
.
Zmiany w zachowaniu
InitializerViewModelFactory
(w tym funkcjaviewModelFactory
) będzie teraz zwracać błądIllegalArgumentException
, jeśli dodano jużinitializer
o tym samymclazz: KClass<VM : ViewModel>
. (Ic3a36)
Znane problemy
lifecycle-*:2.8.0
wymaga minimalnej wersji Compose 1.7.0-alpha05 (b/336842920).
Wersja 2.8.0-rc01
1 maja 2024 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.0-rc01
Wersja 2.8.0-rc01 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że profil podstawowy dla klas
lifecycle-common
nie był prawidłowo pakowany. Są one teraz spakowane wlifecycle-runtime
AAR. (aosp/3038274, b/322382422) - Naprawiliśmy niezamierzoną zmianę kolejności usuwania instancji
AutoCloseable
dołączonych do ViewModelu – przywróciliśmy poprzednią kolejność:addCloseable(String, AutoCloseable)
,addClosable(AutoCloseable)
,onCleared()
. (aosp/3041632) - Ulepsz domyślne działanie tworzenia
viewModelScope
w środowiskach natywnych i JVM Desktop. (aosp/3039221)
Wkład zewnętrzny
- Dziękujemy Victorowi Kroppowi za ulepszenie sprawdzania wątku głównego na komputerach z JVM. (aosp/3037116)
Wersja 2.8.0-beta01
17 kwietnia 2024 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.0-beta01
Wersja 2.8.0-beta01 zawiera te zmiany.
Nowe funkcje
- Artefakt
lifecycle-runtime-compose
jest teraz zgodny z Kotlin Multiplatform, a jego kod został przeniesiony docommon
. Zawiera on artefakt Androida, który jest zgodny z wieloplatformową obsługąandroidx.compose
. (If7a71, I4f4a0, b/331769623)
Wersja 2.8.0-alpha04
3 kwietnia 2024 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.0-alpha04
Wersja 2.8.0-alpha04 zawiera te zmiany.
Nowe funkcje
- Artefakt
lifecycle-viewmodel-compose
jest teraz zgodny z Kotlin Multiplatform, a jego kod został przeniesiony docommon
. Zawiera on artefakt Androida, co odpowiada obsłudze wielu platform wandroidx.compose
. Aby uwzględnić tę zmianę, funkcja ComposableviewModel
akceptuje teraz wartośćKClass
oprócz wartościjava.lang.Class
. (b/330323282)
Poprawki błędów
NullSafeMutableLiveData
został zmodyfikowany, aby uniknąć wielu fałszywych dopasowań. (I2d8c1, Iafb18, I03463, I7ecef)
Aktualizacja zależności
- Artefakt
lifecycle-viewmodel-compose
zależy teraz od Compose w wersji 1.6.0. - Cykl życia zależy teraz od instalatora profilu w wersji 1.3.1.
Wersja 2.8.0-alpha03
20 marca 2024 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.0-alpha03
Wersja 2.8.0-alpha03 zawiera te zmiany.
Nowe funkcje
ViewModel.viewModelScope
jest teraz parametrem konstruktora, który można zastępować. Umożliwia to wstrzykiwanie własnego dyspozytora iSupervisorJob()
lub zastępowanie domyślnego dyspozytora za pomocąbackgroundScope
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ść z Kotlin Multiplatform
Artefakt lifecycle-viewmodel
i interfejsy API, takie jak ViewModel
, ViewModelStore
, ViewModelStoreOwner
i ViewModelProvider
, są teraz dostarczane w artefaktach zgodnych z Kotlin Multiplatform. (b/214568825)
Aby uwzględnić tę zmianę, metody takie jak te w ViewModelProvider
, które przyjmowały wartość java.lang.Class<T>
, mają teraz odpowiednik przyjmujący wartość kotlin.reflect.KClass<T>
.
Zachowaliśmy zgodność binarną w Androidzie, ale w porównaniu z wspólnym interfejsem API wprowadziliśmy kilka istotnych zmian w interfejsie API Androida:
- Tworzenie instancji
ViewModelProvider
odbywa się teraz za pomocą metodViewModelProvider.create()
, a nie przez bezpośrednie wywoływanie jej konstruktora. - Wartości
ViewModelProvider.NewInstanceFactory
iViewModelProvider.AndroidViewModelFactory
są dostępne tylko na Androidzie.- W przypadku fabryk niestandardowych zalecamy rozszerzenie klasy
ViewModelProvider.Factory
i użycie metodycreate
, która przyjmuje wartośćCreationExtras
, lub użycie języka Kotlin DSLviewModelFactory
.
- W przypadku fabryk niestandardowych zalecamy rozszerzenie klasy
- Użycie
ViewModelProvider
bez niestandardowej fabryki na platformach innych niż JVM spowoduje wystąpienie błęduUnsupportedOperationException
. Na platformach JVM zgodność jest zachowywana przez użycie konstruktora ViewModel bez argumentów, jeśli nie podano niestandardowej fabryki. viewModelScope
zostanie zastąpiony przezEmptyCoroutineContext
na platformach, na którychDispatchers.Main
nie jest dostępny (np. Linux).
Zmiany w zachowaniu
InitializerViewModelFactory
(w tym funkcjaviewModelFactory
) będzie teraz zwracać błądIllegalArgumentException
, jeśli dodano jużinitializer
o tym samymclazz: KClass<VM : ViewModel>
. (Ic3a36)
Poprawki błędów
ViewModel.getCloseable
obsługuje teraz zduplikowane klucze: jeślikey
ma już powiązany zasóbAutoCloseable
, stary zasób zostanie zastąpiony i natychmiast zamknięty. (Ibeb67)- Dostęp do
viewModelScope
wViewModel
jest teraz bezpieczny wątkowo. (If4766, b/322407038)
Wkład zewnętrzny
LocalLifecycleOwner
został przeniesiony z Compose UI do lifecycle-runtime-compose, aby jego interfejsy API pomocnicze oparte na Compose można było używać poza Compose UI. Dziękujemy Jake’owi Whartonowi za pomoc. (I6c41b, b/328263448)
Wersja 2.8.0-alpha02
21 lutego 2024 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.0-alpha02
Wersja 2.8.0-alpha02 zawiera te zmiany.
Nowe funkcje
- Dodaliśmy interfejsy API
dropUnlessResumed
idropUnlessStarted
, które umożliwiają pomijanie kliknięć lub innych zdarzeń występujących nawet wtedy, gdy wartośćLifecycleOwner
spadnie poniżej podanej wartościLifecycle.State
. Można go na przykład używać w przypadku Navigation Compose, aby uniknąć obsługi zdarzeń kliknięcia po rozpoczęciu przejścia do innego ekranu:onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
(Icba83, b/317230685).
Konwersje w Kotlinie
ViewModel
jest teraz napisany w języku Kotlin (I16f26, b/214568825)- Rozszerzenia Kotlin
lifecycle-viewmodel-ktx
zostały przeniesione do podstawowego modułu cyklu życia. (Id787b, b/274800183) - Rozszerzenia Kotlin
lifecycle-runtime-ktx
zostały przeniesione do podstawowego modułu cyklu życia. (Ic3686, b/274800183) - Rozszerzenia Kotlin
lifecycle-livedata-core-ktx
zostały przeniesione do podstawowego modułu cyklu życia. (I54a3d, b/274800183)
Zgodność z Kotlin Multiplatform
- Podstawowe interfejsy API cyklu życia w
Lifecycle
,LifecycleOwner
,LifecycleObserver
,Lifecycle.State
,Lifecycle.Event
iLifecycleRegistry
są teraz dostarczane w artefaktach zgodnych z Kotlin Multiplatform. (b/317249252)
Zmiany w interfejsie API
- Wywoływanie funkcji
LifecycleStartEffect
iLifecycleResumeEffect
bez klucza jest teraz błędem, zgodnie z tą samą konwencją co w przypadku interfejsuDisposableEffect
API, którego te interfejsy API są kopią. (Ib0e0c, b/323518079) ViewModel
korzysta teraz zAutoCloseable
zamiast zCloseable
. Jest to zmiana zgodna wstecznie. (I27f8e, b/214568825)- Wycofano
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
na rzeczLiveData.toPublisher(lifecycleOwner)
. (Iabe29, b/262623005)
Wkład zewnętrzny
- Dziękujemy Ivanowi Matkovowi z Jetbrains za pomoc w przeniesieniu komponentu Lifecycle na Kotlin Multiplatform. (aosp/2926690, I0c5ac, If445d)
Wersja 2.8.0-alpha01
24 stycznia 2024 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.8.0-alpha01
Wersja 2.8.0-alpha01 zawiera te zmiany.
Nowe funkcje
ViewModel
obsługuje teraz dodawanie obiektówCloseable
zkey
, które umożliwiają pobieranie ich za pomocągetCloseable()
. (I3cf63)
Wersja 2.7
Wersja 2.7.0
10 stycznia 2024 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.7.0
Wersja 2.7.0 zawiera te zmiany.
Ważne zmiany od wersji 2.6.0
TestLifecycleOwner
zawiera teraz funkcję zawieszaniasetCurrentState()
, która zapewnia, że przed zwróceniem wartości zakończy się zmiana stanu i wszystkie wywołania zwrotneLifecycleObserver
. W przeciwieństwie do bezpośredniego ustawiania właściwościcurrentState
nie używa ona funkcjirunBlocking
, dzięki czemu można jej bezpiecznie używać w korutynie, np. w korutynie dostarczanej przezrunTest
.- Rozszerzenia
LiveData
funkcjimap
iswitchMap
działają teraz tak samo jak rozszerzeniedistinctUntilChanged
– jeśli rozszerzenieLiveData
ma ustawioną wartośćvalue
, funkcjamap
/switchMap
zostanie natychmiast wywołana, aby wypełnić wartośćvalue
zwróconego rozszerzeniaLiveData
. Dzięki temu wartość początkowa zostanie ustawiona w ramach pierwszej kompozycji (gdy jest używana zobserveAsState()
), ale nie zmieni to sposobu obserwacji – aktualizacje wartości ze źródłaLiveData
będą nadal stosowane dopiero po rozpoczęciu obserwacjiLiveData
. - W tej wersji rozwiązano problem polegający na tym, że po zakończeniu i ponownym utworzeniu procesu nie można było prawidłowo przywrócić niestandardowych klas
Parcelable
.SavedStateHandle
Ze względu na informacje o typach, które są tracone przez platformę Android, tablice niestandardowych obiektów Parcelable wymagają dodatkowej pracy (ręcznego tworzenia tablicy typów odpowiedniego typu), a dokumentacja dotyczącaget
,getLiveData
igetStateFlow
wyraźnie wskazuje to ograniczenie. - Usunięto reguły proguard keep powiązane z
LifecycleObserver
. Oznacza to, że kod chroniony za pomocą ProGuard, który chce używać interfejsów API za pomocą odbicia (np. za pomocą dawno już wycofanej adnotacji@OnLifecycleEvent
), będzie musiał podać własne reguły zachowywania w swoim konkretnym przypadku użycia.
Obserwowanie zdarzeń cyklu życia
- Zamiast używać
LifecycleEventObserver
, możesz teraz obserwowaćFlow
Lifecycle.Event
za pomocą metody rozszerzeniaLifecycle.asFlow()
. - Użytkownicy Jetpack Compose mogą teraz używać funkcji
LifecycleEventEffect
do uruchamiania efektów ubocznych Compose na podstawie funkcjiLifecycle.Event
.
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
viewModel.refreshData()
}
// …
}
- Użytkownicy Jetpack Compose mogą używać funkcji
LifecycleStartEffect
iLifecycleResumeEffect
do obsługi par zdarzeń – od rozpoczęcia do zatrzymania i od wznowienia do wstrzymania. Ten interfejs API jest podobny do tego, który znajduje się wDisposableEffect
, i jest odpowiedni w przypadkach, gdy zmiana wprowadzana w momencie zwiększania stanu musi zostać cofnięta, gdy stan się zmniejsza.
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
LifecycleStartEffect(viewModel) {
val timeTracking = viewModel.startTrackingTimeOnScreen()
onStopOrDispose {
timeTracking.stopTrackingTimeOnScreen()
}
}
// …
}
Więcej informacji znajdziesz w artykule Uruchamianie kodu w przypadku zdarzeń cyklu życia.
Obserwowanie stanu cyklu życia
- Bieżący
Lifecycle.State
można teraz obserwować za pomocą właściwościLifecycle.currentStateFlow
, która zwracaStateFlow
, gdzievalue
to bieżącyLifecycle.State
. - Użytkownicy Jetpack Compose mogą użyć rozszerzenia
Lifecycle.currentStateAsState()
, aby bezpośrednio udostępnićLifecycle.State
jakoState
w Compose. Jest to odpowiednik (i krótsza alternatywa) funkcjilifecycle.currentStateFlow.collectAsState()
.
Więcej informacji znajdziesz w artykule Zbieranie informacji o stanie cyklu życia za pomocą przepływów.
Wersja 2.7.0-rc02
13 grudnia 2023 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.7.0-rc02
Wersja 2.7.0-rc02 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że po zakończeniu i ponownym utworzeniu procesu nie były prawidłowo przywracane niestandardowe klasy
Parcelable
.SavedStateHandle
Ze względu na informacje o typach, które są tracone przez platformę Android, tablice niestandardowych obiektów Parcelable wymagają dodatkowej pracy (ręcznego tworzenia tablicy typów odpowiedniego typu), a dokumentacja dotyczącaget
,getLiveData
igetStateFlow
wyraźnie wskazuje to ograniczenie. (I0b55a)
Wersja 2.7.0-rc01
15 listopada 2023 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.7.0-rc01
Wersja 2.7.0-rc01 zawiera te zmiany.
Poprawki błędów
LifecycleStartEffect
iLifecycleResumeEffect
teraz prawidłowo usuwają i ponownie tworzą blok efektu, jeśli zmieni sięLifecycleOwner
. (Ia25c6)
Wersja 2.7.0-beta01
1 listopada 2023 roku
androidx.lifecycle:lifecycle-*:2.7.0-beta01
zostaje opublikowany bez zmian. Wersja 2.7.0-beta01 zawiera te zmiany.
- Wersja beta, w której nie wprowadzono większych zmian.
Wersja 2.7.0-alpha03
18 października 2023 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.7.0-alpha03
Wersja 2.7.0-alpha03 zawiera te zmiany.
Nowe funkcje
lifecycle-runtime-testing
zawiera teraz nowy test Lint, który zapobiega ustawianiuLifecycle.State
elementuTestLifecycleOwner
za pomocą polacurrentState
w przypadku korzystania z korutyny. Sprawdzanie Lint sugeruje teraz zawieszeniesetCurrentState
, które umożliwia ustawienieLifecycle.State
bez blokowania. (Icf728, b/297880630)
Poprawki błędów
- Rozwiązaliśmy problem z
LiveData.switchMap
, który polegał na tym, że zwracanie tej samej instancjiLiveData
zarówno podczas pierwszego, jak i kolejnego wywołania uniemożliwiało dodanie instancjiLiveData
jako źródła. (Ibedcba7)
Wersja 2.7.0-alpha02
6 września 2023 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.7.0-alpha02
Wersja 2.7.0-alpha02 zawiera te zmiany.
Nowe funkcje
TestLifecycleOwner
zawiera teraz funkcję zawieszaniasetCurrentState()
, która umożliwia użytkownikom korzystanie zTestLifecycleOwner
w ramach korutyny, np. takiej, jaką zapewniarunTest
. (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 elementuLiveData
, jeśli poprzedni elementLiveData
miał ustawioną wartość, co zapewnia, że używanie wynikowego elementu LiveData w Jetpack Compose ma odpowiedni stan w początkowej kompozycji. (I91d2b, b/269479952) ViewModel
addCloseable()
natychmiast zamykaCloseable
, jeśliViewModel
otrzymał już wywołanie funkcjionCleared()
. (I4712e, b/280294730)
Poprawki błędów
- Cykl życia
2.6.2
: rozwiązaliśmy problem, który powodował, że po zakończeniu procesu nie można było prawidłowo przywrócić wartościSavedStateHandle
, jeśli stan został przywrócony, wywołano funkcjęsave()
bez zapisywania stanu w nadrzędnym elemencieSavedStateRegistry
, a następnie stan został ponownie przywrócony. Rozwiązuje to problem z interakcją międzyrememberSaveable
aNavHost
z biblioteki Navigation Compose. (aosp/2729289)
Wersja 2.7.0-alpha01
26 lipca 2023 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.7.0-alpha01
Wersja 2.7.0-alpha01 zawiera te zmiany.
Zmiany w interfejsie API
Lifecycle.State
można teraz obserwować w Compose za pomocą funkcjiLifecycle.currentStateFlow
, która zwracaStateFlow
, gdzievalue
to bieżąca wartośćLifecycle.State
. (Ib212d, b/209684871)Lifecycle.Event
s można teraz obserwować jakoFlow
zLifecycle.asFlow().
(If2c0f, b/176311030)LifecycleResumeEffect
Dodaliśmy interfejs API, który umożliwia uruchamianie funkcji ComposeSideEffect
na podstawie wywołań zwrotnych zdarzeńLifecycle.Event.ON_RESUME
iLifecycle.Event.ON_PAUSE
. (I60386, b/235529345)LifecycleStartEffect
Dodano interfejs API do uruchamiania funkcji ComposeSideEffect
na podstawie wywołań zwrotnych zdarzeńLifecycle.Event.ON_START
iLifecycle.Event.ON_STOP
. (I5a8d1, b/235529345)- Dodaliśmy interfejs API
LifecycleEventEffect
, aby uruchamiać funkcjeSideEffect
Compose na podstawieLifecycle.Event
. (Ic9794, b/235529345) - Dodano rozszerzenie
Lifecycle.collectAsState()
, aby bezpośrednio udostępniaćLifecycle.State
jakoState
w Compose. Jest to odpowiednik (i krótsza alternatywa) funkcjilifecycle.currentStateFlow.collectAsState()
. (I11015, b/235529345)
Poprawki błędów
- Rozszerzenie
LiveData.distinctUntilChanged()
ustawia terazvalue
zwróconego elementuLiveData
, jeśli poprzedni elementLiveData
miał ustawioną wartość. Nie zmienia to sposobu działania obserwacji – zaktualizowane wartości ze źródłaLiveData
będą nadal stosowane dopiero po rozpoczęciu obserwacji wartościLiveData
zwróconej przezdistinctUntilChanged()
. (Ib482f) - Usunięto reguły proguard keep powiązane z
LifecycleObserver
. Oznacza to, że kod chroniony za pomocą ProGuard, który chce używać interfejsów API za pomocą odbicia, musi podać własne reguły zachowywania dla konkretnego przypadku użycia. (Ia12fd)
Wersja 2.6
Wersja 2.6.2
6 września 2023 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.6.2
Wersja 2.6.2 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że po zakończeniu procesu nie można było prawidłowo przywrócić stanu
SavedStateHandle
, jeśli stan został przywrócony, wywołanosave()
bez zapisywania stanu w nadrzędnymSavedStateRegistry
, a następnie stan został ponownie przywrócony. Rozwiązuje to problem z interakcją międzyrememberSaveable
aNavHost
z biblioteki Navigation Compose. (aosp/2729289)
Wersja 2.6.1
22 marca 2023 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.6.1
Wersja 2.6.1 zawiera te zmiany.
Aktualizacje zależności
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.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.6.0
Wersja 2.6.0 zawiera te zmiany.
Ważne zmiany od wersji 2.5.0
LiveData
zawiera teraz nową właściwośćisInitialized
, która wskazuje, czy kiedykolwiek ustawiono jawną wartość wLiveData
. Dzięki temu możesz odróżnić sytuację, w którejliveData.value
zwraca wartośćnull
, ponieważ nigdy nie ustawiono żadnej wartości, od sytuacji, w której zwraca jawną wartośćnull
.MediatorLiveData
zawiera teraz konstruktor do ustawiania wartości początkowej.- Dodano nowe rozszerzenie w przypadku
StateFlow
iFlow
wcollectAsStateWithLifecycle()
, które zbiera dane z przepływów i przedstawia ich najnowszą wartość jako stan Compose w sposób uwzględniający cykl życia. - Metody
Lifecycle.launchWhenX
iLifecycle.whenX
zostały wycofane, ponieważ użycie wstrzymującego dyspozytora może w niektórych przypadkach prowadzić do marnowania zasobów. Zalecamy użycieLifecycle.repeatOnLifecycle
. Więcej informacji o jednorazowym wstrzymywaniu pracy znajdziesz w tym wyjaśnieniu, które pokazuje, dlaczego jest to z natury niebezpieczne. - Konwersja na Kotlin – duża liczba klas cyklu życia została przekonwertowana na Kotlin. Wszystkie przekonwertowane zajęcia zachowują zgodność binarną z poprzednimi wersjami. W przypadku klas napisanych w Kotlinie te klasy mają niezgodne zmiany w kodzie źródłowym:
ViewTreeLifecycleOwner
,LiveDataReactiveStreams
,HasDefaultViewModelProviderFactory
,ViewTreeViewModelStoreOwner
,Transformations
,ViewModelStoreOwner
,LifecycleOwner
W tabeli poniżej znajdziesz źródłowe konwersje w przypadku nowej wersji cyklu życia.
Cykl życia 2.5 | Cykl życia 2.5 (KTX) | Cykl życia 2.6 |
---|---|---|
Transformations.switchMap(liveData) {...} |
liveData.switchMap {...} |
liveData.switchMap {...} |
Transformations.map(liveData) {...} |
liveData.map {...} |
liveData.map {...} |
Transformations.distinctUntilChanged(liveData) {...} |
liveData.distinctUntilChanged{...} |
liveData.distinctUntilChanged{...} |
LiveDataReactiveStreams.fromPublisher(publisher) |
publisher.toLiveData() |
publisher.toLiveData() |
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) |
liveData.toPublisher(lifecycleOwner) |
liveData.toPublisher(lifecycleOwner) |
override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory |
override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory |
override val defaultViewModelProviderFactory = factory |
override fun getDefaultViewModelCreationExtras(): CreationExtras = extras |
override fun getDefaultViewModelCreationExtras(): CreationExtras = extras |
override val defaultViewModelProviderCreationExtras = extras |
ViewTreeLifecycleOwner.set(view, owner) |
ViewTreeLifecycleOwner.set(view, owner) |
view.setViewTreeLifecycleOwner(owner) |
ViewTreeLifecycleOwner.get(view) |
view.findViewTreeLifecycleOwner() |
view.findViewTreeLifecycleOwner() |
override fun getViewModelStore(): ViewModelStore = store |
override fun getViewModelStore(): ViewModelStore = store |
override val viewModelStore: ViewModelStore = store |
override fun getLifecycle(): Lifecycle = registry |
override fun getLifecycle(): Lifecycle = registry |
override val lifecycle: Lifecycle get() = registry |
- Wartość dopuszczająca wartość null metody
onChanged
obiektuObserver
utworzonego w Kotlinie jest teraz zgodna z wartością dopuszczającą wartość null typu ogólnego. Jeśli chcesz, abyObserver.onChanged()
akceptował typ dopuszczający wartość null, musisz utworzyć instancjęObserver
z typem dopuszczającym wartość null. - Te klasy zostały również przekonwertowane na język Kotlin, ale zachowują zgodność ze źródłem:
DefaultLifecycleObserver
,LifecycleEventObserver
,Lifecycle
,LifecycleRegistry
,LifecycleObserver
,ViewModelStore
,AndroidViewModel
,AbstractSavedStateViewModelFactory
,LifecycleService
,ServiceLifecycleDispatcher
iProcessLifecycleOwner
.
Wersja 2.6.0-rc01
22 lutego 2023 roku
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.6.0-rc01
Wersja 2.6.0-rc01 zawiera te zmiany.
Poprawki błędów
- Rozszerzenie
LiveData.distinctUntilChanged()
ustawia terazvalue
zwróconego elementuLiveData
, jeśli poprzedni elementLiveData
miał ustawioną wartość. Nie zmienia to sposobu działania obserwacji – zaktualizowane wartości ze źródłaLiveData
będą nadal stosowane dopiero po rozpoczęciu obserwacji wartościLiveData
zwróconej przezdistinctUntilChanged()
. (Ib482f)
Wersja 2.6.0-beta01
8 lutego 2023 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.6.0-beta01
Wersja 2.6.0-beta01 zawiera te zmiany.
Konwersje w Kotlinie
LifecycleOwner
jest teraz napisany w języku Kotlin. W przypadku klas napisanych w Kotlinie jest to zmiana powodująca niezgodność ze źródłem – muszą one teraz zastępować właściwośćlifecycle
zamiast implementować poprzednią funkcjęgetLifecycle()
. (I75b4b, b/240298691)ViewModelStoreOwner
jest teraz w języku Kotlin. W przypadku klas napisanych w Kotlinie jest to zmiana powodująca niezgodność ze źródłem – muszą one teraz zastępować właściwośćviewModelStore
zamiast implementować poprzednią funkcjęgetViewModelStore()
. (I86409, b/240298691)- Rozszerzenie Kotlin w
LifecycleOwner
, które udostępnia polelifecycleScope
, zostało przeniesione zlifecycle-runtime-ktx
do artefaktulifecycle-common
. (I41d78, b/240298691) - Rozszerzenie Kotlin w
Lifecycle
, które udostępnia polecoroutineScope
, zostało przeniesione zlifecycle-runtime-ktx
do artefaktulifecycle-common
. (Iabb91, b/240298691)
Wersja 2.6.0-alpha05
25 stycznia 2023 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.6.0-alpha05
Wersja 2.6.0-alpha05 zawiera te zmiany.
Konwersje w Kotlinie
Transformations
jest teraz napisany w języku Kotlin. Jest to zmiana powodująca niezgodność na poziomie kodu źródłowego w przypadku klas napisanych w Kotlinie, które bezpośrednio używały składni takiej jakTransformations.map
– kod Kotlin musi teraz używać składni metody rozszerzenia Kotlin, która była wcześniej dostępna tylko w przypadku używanialifecycle-livedata-ktx
. W przypadku języka programowania Java wersje tych metod, które przyjmują argumentandroidx.arch.core.util.Function
, są wycofywane i zastępowane wersjami, które przyjmują argumentFunction1
w języku Kotlin. Ta zmiana zachowuje zgodność binarną. (I8e14f)ViewTreeViewModelStoreOwner
jest teraz napisany w języku Kotlin. W przypadku klas napisanych w Kotlinie jest to zmiana powodująca niezgodność ze źródłem – aby ustawić i znaleźć wcześniej ustawionego właściciela, musisz teraz bezpośrednio importować i używać metod rozszerzeń Kotlin naView
wandroidx.lifecycle.setViewTreeViewModelStoreOwner
iandroidx.lifecycle.findViewTreeViewModelStoreOwner
. Jest on zgodny binarnie i pozostaje zgodny ze źródłem w przypadku implementacji napisanych w języku programowania Java. (Ia06d8, Ib22d8, b/240298691)- Interfejs
HasDefaultViewModelProviderFactory
jest teraz napisany w języku Kotlin. Jest to zmiana niezgodna ze źródłem w przypadku klas napisanych w Kotlinie – muszą one teraz zastępować właściwościdefaultViewModelProviderFactory
idefaultViewModelCreationExtras
zamiast implementować poprzednie odpowiednie funkcje. (Iaed9c, b/240298691) Observer
jest teraz napisany w języku Kotlin. MetodaonChanged()
używa teraz nazwyvalue
dla swojego parametru. (Iffef2, I4995e, b/240298691)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.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.6.0-alpha04
Wersja 2.6.0-alpha04 zawiera te zmiany.
Nowe funkcje
LiveData
zawiera teraz nową właściwośćisInitialized
, która wskazuje, czy kiedykolwiek ustawiono jawną wartość wLiveData
. Dzięki temu możesz odróżnić sytuację, w którejliveData.value
zwraca wartośćnull
, ponieważ nigdy nie ustawiono żadnej wartości, od sytuacji, w której zwraca jawną wartośćnull
. (Ibd018)
Zmiany w interfejsie API
- Interfejsy API
collectAsStateWithLifecycle()
usługilifecycle-runtime-compose
nie są już w stanie eksperymentalnym. (I09d42, b/258835424) - Metody
Lifecycle.launchWhenX
iLifecycle.whenX
zostały wycofane, ponieważ użycie wstrzymującego dyspozytora może w niektórych przypadkach prowadzić do marnowania zasobów. Zalecamy użycieLifecycle.repeatOnLifecycle
. (Iafc54, b/248302832)
Konwersje w Kotlinie
ViewTreeLifecycleOwner
jest teraz napisany w języku Kotlin. W przypadku klas napisanych w Kotlinie jest to zmiana powodująca niezgodność ze źródłem – aby ustawić i znaleźć wcześniej ustawionego właściciela, musisz teraz bezpośrednio importować i używać metod rozszerzeń Kotlin naView
wandroidx.lifecycle.setViewTreeLifecycleOwner
iandroidx.lifecycle.findViewTreeLifecycleOwner
. Zastępuje on poprzednie rozszerzenie Kotlin wlifecycle-runtime-ktx
. Jest on zgodny binarnie i pozostaje zgodny ze źródłem w przypadku implementacji napisanych w języku programowania Java. (I8a77a, I5234e, b/240298691)LiveDataReactiveStreams
jest teraz napisany w języku Kotlin. Rozszerzenia Kotlin, które wcześniej znajdowały się wlifecycle-reactivestreams-ktx
, zostały przeniesione do modułulifecycle-reactivestreams
i stały się głównym interfejsem kodu napisanego w Kotlinie. Jest to zmiana powodująca niezgodność kodu źródłowego w przypadku kodu napisanego w Kotlinie, jeśli nie używasz jeszcze interfejsów API metod rozszerzeń Kotlin. (I2b1b9, I95d22, b/240298691)DefaultLifecycleObserver
,LifecycleEventObserver
,Lifecycle
,LifecycleRegistry
,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 z błędemClassCastException
podczas wywoływania funkcjiget()
z nieprawidłowym typem klasy. (I6ae7c)
Wersja 2.6.0-alpha03
24 października 2022 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.6.0-alpha03
Wersja 2.6.0-alpha03 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem z ograniczeniami między różnymi modułami cyklu życia, które nie działały zgodnie z oczekiwaniami. (I18d0d, b/249686765)
- Błędy zgłaszane przez
LifecycleRegistry.moveToState()
zawierają teraz bardziej przydatne komunikaty o błędach, które informują deweloperów o komponencie powodującym błąd. (Idf4b2, b/244910446)
Wersja 2.6.0-alpha02
7 września 2022 roku
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.6.0-alpha02
Wersja 2.6.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
MediatorLiveData
zawiera teraz konstruktor do ustawiania wartości początkowej. (Ib6cc5, b/151244085)
Poprawki błędów
- Artefakty
Lifecycle
zawierają teraz ograniczenia, które zapewniają, że wszystkie wzajemnie zależne artefakty cyklu życia używają tej samej wersji, automatycznie uaktualniając inne zależności, gdy jedna z nich zostanie uaktualniona. b/242871265 FlowLiveData.asFlow()
tworzy terazcallbackFlow
zamiast korzystać z własnej implementacjiChannel
, aby zapewnić bezpieczeństwo wątków i zachowanie kontekstu. (I4a8b2, b/200596935)- Funkcja
FlowLiveData
'sasLiveData
będzie teraz zachowywać początkową wartośćStateFlow
podczas tworzenia nowego obiektuLiveData
. (I3f530, b/157380488) - Z Cyklu życia
2.5.1
: niestandardowe implementacjeAndroidViewModelFactory
prawidłowo wywołują teraz funkcjęcreate(modelClass)
podczas korzystania z konstruktora stanowego zLifecycle
w wersji 2.4 lub nowszej (I5b315, b/238011621).
Wersja 2.6.0-alpha01
29 czerwca 2022 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.6.0-alpha01
Wersja 2.6.0-alpha01 zawiera te zmiany.
Nowe funkcje
- Dodano nowe rozszerzenie w
StateFlow
iFlow
wcollectAsStateWithLifecycle
, które zbiera dane z przepływów i reprezentuje jego najnowszą wartość jako stan Compose w sposób uwzględniający cykl życia. Przepływ jest zbierany, a nowa emisja jest ustawiana na wartość stanu, gdy cykl życia osiągnie co najmniej określony poziomLifecycle.State
. Gdy okres eksploatacji spadnie poniżej wartościLifecycle.State
, zbieranie danych o przepływie zostanie zatrzymane, a wartość stanu nie zostanie zaktualizowana. (I1856e, b/230557927)
Wersja 2.5
Wersja 2.5.1
27 lipca 2022 roku
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.5.1
Wersja 2.5.1 zawiera te zmiany.
Poprawki błędów
- Niestandardowe implementacje
AndroidViewModelFactory
prawidłowo wywołują teraz funkcjęcreate(modelClass)
, gdy używają konstruktoraAndroidViewModelFactory
z zachowywaniem stanu w przypadkuLifecycle
w wersji 2.4 lub nowszej (I5b315, b/238011621).
Wersja 2.5.0
29 czerwca 2022 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.5.0
Wersja 2.5.0 zawiera te zmiany.
Ważne zmiany od wersji 2.4.0
SavedStateHandle
udostępnia teraz interfejs APIgetStateFlow()
, który zwraca obiekt KotlinStateFlow
do monitorowania zmian wartości jako alternatywę dla używaniaLiveData
.ViewModel CreationExtras – podczas pisania niestandardowego
ViewModelProvider.Factory
nie trzeba już rozszerzaćAndroidViewModelFactory
aniAbstractSavedStateViewModelFactory
, aby uzyskać dostęp odpowiednio doApplication
lubSavedStateHandle
. Zamiast tego te pola są udostępniane każdej podklasieViewModelProvider.Factory
jakoCreationExtras
za pomocą nowego przeciążeniacreate
:create(Class<T>, CreationExtras)
. Te dodatki są udostępniane automatycznie przez aktywność lub fragment podczas korzystania odpowiednio z Activity1.5.0
i Fragment1.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
Kotlin DSL, który umożliwia definiowanieViewModelProvider.Factory
za pomocą co najmniej 1 inicjatora lambda, po jednym dla każdej klasyViewModel
obsługiwanej przez fabrykę niestandardową, 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
oferuje teraz interfejsviewModel()
API, który przyjmuje fabrykę lambda do tworzenia instancjiViewModel
bez konieczności tworzenia niestandardowegoViewModelProvider.Factory
.// Within a @Composable, you can now skip writing a custom Factory // and instead write a lambda to do the initialization of your ViewModel val detailViewModel = viewModel { // This lambda is only called the first time the ViewModel is created // and all CreationExtras are available inside the lambda val savedStateHandle = createSavedStateHandle() DetailViewModel(savedStateHandle) }
Integracja SavedStateHandle Compose Saver – artefakt
lifecycle-viewmodel-compose
zawiera teraz nowe eksperymentalne interfejsy API wSavedStateHandle.saveable
, które umożliwiają zachowanie podobne dorememberSaveable
, oparte naSavedStateHandle
elementu `ViewModel`.class ListScreenViewModel(handle: SavedStateHandle): ViewModel() { // This value survives both configuration changes and process death and recreation val editMode by handle.saveable { mutableStateOf(false) } }
Dodano interfejs API
addCloseable()
i nowe przeciążenie konstruktora, które umożliwiają dodawanie do obiektuViewModel
co najmniej 1 obiektuCloseable
, który zostanie zamknięty po wyczyszczeniu obiektuViewModel
bez konieczności ręcznego wykonywania czynności wonCleared()
.Aby na przykład utworzyć zakres coroutine, który możesz wstrzyknąć do ViewModelu, ale kontrolować za pomocą testowania, możesz utworzyć
CoroutineScope
, który implementujeCloseable
:class CloseableCoroutineScope( context: CoroutineContext = SupervisorJob() + Dispatchers.Main.immediate ) : Closeable, CoroutineScope { override val coroutineContext: CoroutineContext = context override fun close() { coroutineContext.cancel() } }
Możesz go potem użyć w konstruktorze
ViewModel
, zachowując ten sam okres istnienia coviewModelScope
:class TestScopeViewModel( val customScope: CloseableCoroutineScope = CloseableCoroutineScope() ) : ViewModel(customScope) { // You can now use customScope in the same way as viewModelScope }
Zmiany w działaniu
- Próba przeniesienia
Lifecycle.State
zINITIALIZED
doDESTROYED
zawsze będzie teraz powodować zgłoszenieIllegalStateException
, niezależnie od tego, czy doLifecycle
jest dołączony obserwator. LifecycleRegistry
będzie teraz usuwać obserwatorów, gdy osiągnie stanDESTROYED
.
Wersja 2.5.0-rc02
15 czerwca 2022 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.5.0-rc02
Wersja 2.5.0-rc02 zawiera te zmiany.
Poprawki błędów
ViewModelProvider
nie będzie już ulegać awarii podczas łączenia poprzednich wersji zależności compileOnly Lifecycle z wersjami 2.5 lub nowszymi. (I81a66, b/230454566)
Wersja 2.5.0-rc01
11 maja 2022 roku
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.5.0-rc01
Wersja 2.5.0-rc01 zawiera te zmiany.
Poprawki błędów
MediatorLiveData.addSource()
zgłasza teraz błądNullPointerException
, gdy otrzyma źródłonull
, zamiast przekazywać je do obserwatorów.(Ibd0fb, b/123085232)null
Wersja 2.5.0-beta01
20 kwietnia 2022 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.5.0-beta01
Wersja 2.5.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano delegaty właściwości
SavedStateHandle.saveable
, aby używać nazw właściwości jako kluczy do utrwalania stanu wSavedStateHandle
(I8bb86, b/225014345).
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że zagnieżdżenie jednego elementu
NavHost
w innym elemencieNavHost
na karcie nawigacji u dołu, która nie jest główną kartą, prowadziło do błęduIllegalStateException
podczas korzystania z wielu stosów wstecznych. (I11bd5, b/228865698)
Wersja 2.5.0-alpha06
6 kwietnia 2022 roku
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.5.0-alpha06
Wersja 2.5.0-alpha06 zawiera te zmiany.
Nowe funkcje
- Dodanie eksperymentalnego przeciążenia
MutableState
doSavedStateHandle.saveable
w celu zapewnienia zgodności zrememberSaveable
(I38cfe, b/224565154)
Zmiany w interfejsie API
- Klasa
CreationExtras
jest teraz abstrakcyjna, a nie zamknięta. (Ib8a7a)
Poprawki błędów
- Naprawiono błąd
IllegalStateException: Already attached to lifecycleOwner
spowodowany przezSavedStateHandleController
. (I7ea47, b/215406268)
Wersja 2.5.0-alpha05
23 marca 2022 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.5.0-alpha05
Wersja 2.5.0-alpha05 zawiera te zmiany.
Nowe funkcje
- Moduł
lifecycle-viewmodel-compose
udostępnia terazSavedStateHandleSaver
, eksperymentalny interfejs API, który zapewnia prawidłową integrację wartości wSavedStateHandle
z tym samym zapisanym stanem instancji, którego używarememberSaveable
. (Ia88b7, b/195689777)
Zmiany w interfejsie API
- Rozwiązaliśmy problem ze zgodnością z cyklem życia 2.3 i nowszymi wersjami cyklu życia w języku Java. (I52c8a, b/219545060)
Poprawki błędów
SavedStateViewFactory
obsługuje teraz używanieCreationExtras
nawet wtedy, gdy zostało zainicjowane za pomocąSavedStateRegistryOwner
. Jeśli podasz dodatkowe informacje, zainicjowane argumenty zostaną zignorowane. (I6c43b, b/224844583)
Wersja 2.5.0-alpha04
9 marca 2022 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.5.0-alpha04
Wersja 2.5.0-alpha04 zawiera te zmiany.
Zmiany w interfejsie API
SavedStateHandle
udostępnia teraz interfejs APIgetStateFlow()
, który zwraca KotlinStateFlow
do monitorowania zmian wartości jako alternatywę dla używaniaLiveData
. (Iad3ab, b/178037961)
Wersja 2.5.0-alpha03
23 lutego 2022 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.5.0-alpha03
Wersja 2.5.0-alpha03 zawiera te zmiany.
Nowe funkcje
- Dodano interfejs
addCloseable()
API i nowe przeciążenie konstruktora, które umożliwiają dodawanie do obiektuViewModel
co najmniej 1 obiektuCloseable
. ObiektViewModel
zostanie zamknięty po wyczyszczeniu bez konieczności ręcznego wykonywania czynności w obiekcieonCleared()
. (I55ea0) lifecycle-viewmodel
udostępnia terazInitializerViewModelFactory
, które umożliwia dodawanie funkcji lambda do obsługi określonych klasViewModel
przy użyciuCreationExtras
jako głównego źródła danych. (If58fc, b/216687549)lifecycle-viewmodel-compose
udostępnia teraz interfejsviewModel()
API, który przyjmuje fabrykę funkcji lambda do tworzenia instancjiViewModel
bez konieczności tworzenia niestandardowego elementuViewModelProvider.Factory
. (I97fbb, b/216688927)
Zmiany w interfejsie API
- Możesz teraz utworzyć
ViewModel
z użyciemCreationExtras
za pomocąlifecycle-viewmodel-compose
. (I08887, b/216688927)
Zmiany w działaniu
- Próba przeniesienia elementu
Lifecycle.State
zINITIALIZED
doDESTROYED
zawsze będzie teraz powodować błądIllegalStateException
, niezależnie od tego, czy elementLifecycle
ma dołączony obserwator. (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.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.5.0-alpha02
Wersja 2.5.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
- Pliki
SavedStateHandle
iSavedStateViewModelFactory
zostały przekonwertowane na Kotlin. Poprawiliśmy możliwość przyjmowania wartości null w przypadku typów ogólnych w obu klasach. (Ib6ce2, b/216168263, I9647a, b/177667711) - Parametr funkcji
LiveData
switchMap
może teraz zwracać wartość null. (I40396, b/132923666) - Rozszerzenia
LiveData
-ktx są teraz oznaczone adnotacją@CheckResult
, aby wymusić użycie wyniku podczas wywoływania tych funkcji. (Ia0f05, b/207325134)
Zmiany w działaniu
SavedStateHandle
prawidłowo przechowuje teraz wartość defaultValue, gdy nie ma wartości dla określonego klucza. (I1c6ce, b/178510877)
Poprawki błędów
- W Lifecycle
2.4.1
: zaktualizowanolifecycle-process
, aby zależał od Startup 1.1.1. Dzięki temu poprawki zapobiegające zgłaszaniu przezProcessLifecycleInitializer
błęduStartupException
będą dostępne domyślnie. (Ib01df, b/216490724) - Gdy niestandardowe klasy
AndroidViewModel
mają parametry w niewłaściwej kolejności i próbują utworzyćViewModel
, wyświetlany jest teraz ulepszony komunikat o błędzie. (I340f7, b/177667711) - Model widoku możesz teraz utworzyć za pomocą funkcji
CreationExtras
, korzystając zAndroidViewModelFactory
bez konfigurowania aplikacji. (I6ebef, b/217271656)
Wersja 2.5.0-alpha01
26 stycznia 2022 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.5.0-alpha01
Wersja 2.5.0-alpha01 zawiera te zmiany.
ViewModel CreationExtras
W tej wersji tworzymy podstawy do restrukturyzacji sposobu tworzenia ViewModel
. Zamiast sztywnego zestawu podklas ViewModelProvider.Factory
, z których każda dodaje dodatkowe funkcje (umożliwiając parametr konstruktora Application
za pomocą AndroidViewModelFactory
, parametr konstruktora SavedStateHandle
za pomocą SavedStateViewModelFactory
i AbstractSavedStateViewModelFactory
itp.), przechodzimy do świata fabryk bezstanowych, które opierają się na nowej koncepcji – CreationExtras
. (Ia7343, b/188691010, b/188541057)
W związku z tą zmianą ViewModelProvider
nie będzie już bezpośrednio wywoływać poprzedniej metody create(Class<T>)
ViewModelProvider.Factory
. Zamiast tego wywołuje nowy przeciążony wariant funkcji create
: create(Class<T>, CreationExtras)
. Oznacza to, że każda bezpośrednia implementacja instancji ViewModelProvider.Factory
ma teraz dostęp do każdego z tych nowych CreationExtras
:
ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY
: tenString
zapewnia dostęp do niestandardowego klucza przekazanego doViewModelProvider.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 tego obiektu ViewModel.SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY
zapewnia dostęp doViewModelStoreOwner
, który jest używany do tworzenia tego obiektu ViewModel.SavedStateHandleSupport.DEFAULT_ARGS_KEY
zapewnia dostęp doBundle
argumentów, które powinny być użyte do utworzeniaSavedStateHandle
.
Te dodatkowe informacje są domyślnie dostępne w przypadku korzystania z aktywności 1.5.0-alpha01
, fragmentu 1.5.0-alpha01
i nawigacji 2.5.0-alpha01
. Jeśli używasz starszej wersji tych bibliotek, Twój CreationExtras
będzie pusty – wszystkie dotychczasowe podklasy ViewModelProvider.Factory
zostały przepisane tak, aby obsługiwać zarówno starszą ścieżkę tworzenia używaną przez starsze wersje tych bibliotek, jak i ścieżkę CreationExtras
, która będzie używana w przyszłości.
Te CreationExtras
umożliwiają utworzenie ViewModelProvider.Factory
, który przekazuje tylko potrzebne informacje do każdego ViewModel
bez polegania na ścisłej hierarchii podklas Factory:
class CustomFactory : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
return when (modelClass) {
HomeViewModel::class -> {
// Get the Application object from extras
val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY])
// Pass it directly to HomeViewModel
HomeViewModel(application)
}
DetailViewModel::class -> {
// Create a SavedStateHandle for this ViewModel from extras
val savedStateHandle = extras.createSavedStateHandle()
DetailViewModel(savedStateHandle)
}
else -> throw IllegalArgumentException("Unknown class $modelClass")
} as T
}
}
Używamy funkcji rozszerzenia createSavedStateHandle()
Kotlina w CreationExtras
z SavedStateHandleSupport
, aby utworzyć SavedStateHandle
tylko dla jednego obiektu ViewModel, który tego potrzebuje. (Ia6654, b/188541057)
Niestandardowe CreationExtras
można udostępnić, zastępując getDefaultViewModelCreationExtras()
w ComponentActivity
lub Fragment
. Dzięki temu będą one dostępne dla niestandardowego ViewModelProvider.Factory
jako wbudowana forma wspomaganego wstrzykiwania. Te dodatki będą automatycznie dostępne w niestandardowej fabryce, gdy będą używane bezpośrednio z ViewModelProvider
lub z rozszerzeniami właściwości Kotlin by viewModels()
i by activityViewModels()
. (I79f2b, b/207012584, b/207012585, b/207012490)
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że wartość domyślna podana w
SavedStateHandle
pojawiała się ponownie po zakończeniu procesu i jego ponownym utworzeniu, nawet jeśli została specjalnie usunięta zSavedStateHandle
. W związku z tymSavedStateHandle
nie będzie już łączyć wartości domyślnych i przywróconych, a jako źródło informacji będzie używać tylko wartości przywróconych. (I53a4b)
Wersja 2.4
Wersja 2.4.1
9 lutego 2022 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.4.1
Wersja 2.4.1 zawiera te zmiany.
Poprawki błędów
- Wycofano z Lifecycle
2.5.0-alpha01
: rozwiązaliśmy problem polegający na tym, że wartość domyślna podana wSavedStateHandle
pojawiała się ponownie po zakończeniu i ponownym utworzeniu procesu, nawet jeśli została specjalnie usunięta zSavedStateHandle
. W związku z tymSavedStateHandle
nie będzie już łączyć wartości domyślnych i przywróconych, a jako źródło informacji będzie używać tylko wartości przywróconych. (I53a4b) lifecycle-process
zależy teraz od Androidx Startup 1.1.1, w którym naprawiono regresję polegającą na tym, że użycieProcessLifecycleInitializer
powodowałoStartupException
. (b/216490724)
Wersja 2.4.0
27 października 2021 roku
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.4.0
Wersja 2.4.0 zawiera te zmiany.
Ważne zmiany od wersji 2.3.0
- Środowisko wykonawcze
@OnLifecycleEvent
zostało wycofane. Zamiast tego użyj polaLifecycleEventObserver
lubDefaultLifecycleObserver
. - Dodano bibliotekę
androidx.lifecycle:lifecycle-viewmodel-compose
. ZapewniaviewModel()
komponentów iLocalViewModelStoreOwner
.- Zmiana powodująca niezgodność z kodem źródłowym:
ViewModelProvider
został przepisany w języku Kotlin. MetodaViewModelProvider.Factory.create
nie zezwala już na typ ogólny dopuszczający wartość null.
- Zmiana powodująca niezgodność z kodem źródłowym:
- Do
androidx.lifecycle:lifecycle-runtime-ktx
dodano nowe interfejsy API do współprogramów: Lifecycle.repeatOnLifecycle
, interfejs API, który wykonuje blok kodu w korutynie, gdy stan cyklu życia jest co najmniej w określonym stanie. Blok zostanie anulowany i ponownie uruchomiony, gdy cykl życia będzie wchodzić w stan docelowy i z niego wychodzić.Flow.flowWithLifecycle
, interfejs API, który emituje wartości z obiektu Flow wyższego rzędu, gdy cykl życia jest co najmniej w określonym stanie.- Element
DefaultLifecycleObserver
został przeniesiony zlifecycle.lifecycle-common-java8
dolifecycle.lifecycle-common
.lifecycle.lifecycle-common-java8
nie zapewnia już żadnych dodatkowych funkcji pozalifecycle.lifecycle-common
, więc zależność od niego można zastąpićlifecycle.lifecycle-common
. - Interfejs API bez korutyn z
lifecycle-viewmodel-ktx
został przeniesiony do modułulifecycle-viewmodel
. lifecycle-process
używa terazandroidx.startup
do inicjowaniaProcessLifecycleOwner
.Wcześniej zajmował się tym
androidx.lifecycle.ProcessLifecycleOwnerInitializer
.Jeśli w przeszłości do inicjowania cyklu życia procesu używano
tools:node="remove"
, musisz wykonać te czynności.ContentProvider
<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.lifecycle.ProcessLifecycleInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
(lub)
<!-- If you want to disable androidx.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
Wersja 2.4.0-rc01
29 września 2021 r.
androidx.lifecycle:lifecycle-*:2.4.0-rc01
została wydana bez zmian w porównaniu z wersją Lifecycle 2.4.0-beta01. Wersja 2.4.0-rc01 zawiera te zmiany.
Wersja 2.4.0-beta01
15 września 2021 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.4.0-beta01
Wersja 2.4.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
- Środowisko wykonawcze
@OnLifecycleEvent
zostało wycofane. Zamiast tego należy użyćLifecycleEventObserver
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 pozaandroidx.lifecycle.lifecycle-common
, więc zależność od niego można zastąpićandroidx.lifecycle.lifecycle-common
. (I021aa) - Interfejs API bez korutyn z
lifecycle-viewmodel-ktx
został przeniesiony do modułulifecycle-viewmodel
. (I6d5b2)
Wkład zewnętrzny
Wersja 2.4.0-alpha03
4 sierpnia 2021 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.4.0-alpha03
Wersja 2.4.0-alpha03 zawiera te zmiany.
Zmiany w interfejsie API
- Zmiana powodująca niezgodność ze źródłem: klasa ViewModelProvider została przepisana w języku Kotlin.
Metoda
ViewModelProvider.Factory.create
nie zezwala już na typ ogólny dopuszczający wartość null. (I9b9f6)
Zmiany w zachowaniu
- Funkcja
Lifecycle.repeatOnLifecycle
:block
jest teraz zawsze wywoływana szeregowo podczas powtarzania wykonania. (Ibab33)
Wkład zewnętrzny
- Dziękujemy chao2zhang za poprawienie fragmentów kodu w dokumentacji
repeatOnLifecycle
. 205.
Wersja 2.4.0-alpha02
16 czerwca 2021 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.4.0-alpha02
Wersja 2.4.0-alpha02 zawiera te zmiany.
Nowe funkcje
- Dodano nowy test
RepeatOnLifecycleWrongUsage
dolifecycle-runtime-ktx
, który wykrywa nieprawidłowe użycierepeateOnLifecycle
wonStart()
lubonResume()
. (706078, b/187887400)
Zmiany w interfejsie API
- Interfejs API
LifecycleOwner.addRepeatingJob
został usunięty na rzecz interfejsuLifecycle.repeatOnLifecycle
, który uwzględnia współbieżność strukturalną i jest łatwiejszy w użyciu. (I4a3a8) - Udostępnij
ProcessLifecycleInitializer
publicznie, aby inneandroidx.startup.Initializer
mogły używać go jako zależności. (I94c31)
Poprawki błędów
- Rozwiązaliśmy problem z
NullSafeMutableLiveData
sprawdzaniem kodu, który występował, gdy pole zawierało modyfikatory. (#147, b/183696616) - Rozwiązaliśmy kolejny problem z kontrolą jakości
NullSafeMutableLiveData
podczas używania typów ogólnych. (#161, b/184830263)
Wkład zewnętrzny
- Dziękujemy maxsav za ulepszenie sprawdzania kodu
NullSafeMutableLiveData
. (#147, b/183696616) - Dziękujemy kozaxinan za ulepszenie
NullSafeMutableLiveData
sprawdzania kodu. (#161, b/184830263)
Wersja 2.4.0-alpha01
24 marca 2021 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.4.0-alpha01
Wersja 2.4.0-alpha01 zawiera te zmiany.
Zmiany w zachowaniu
lifecycle-process
używa terazandroidx.startup
do inicjowaniaProcessLifecycleOwner
.Wcześniej zajmował się tym
androidx.lifecycle.ProcessLifecycleOwnerInitializer
.Jeśli w przeszłości do inicjowania cyklu życia procesu używano
tools:node="remove"
, musisz wykonać te czynności.ContentProvider
<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.lifecycle.ProcessLifecycleInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
(lub)
<!-- If you want to disable androidx.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
Zmiany w interfejsie API
- Dodano interfejs
Flow.flowWithLifecycle
API, który emituje wartości z obiektu Flow wyższego poziomu, gdy cykl życia jest w określonym stanie, za pomocą interfejsuLifecycle.repeatOnLifecycle
API. Jest to alternatywa dla nowego interfejsu APILifecycleOwner.addRepeatinJob
. (I0f4cd)
Poprawki błędów
- Od wersji Lifecycle 2.3.1: reguła lint
NonNullableMutableLiveData
może teraz prawidłowo rozróżniać zmienne pól o różnej możliwości przyjmowania wartości null. (b/169249668)
Lifecycle Viewmodel Compose w wersji 1.0.0
Wersja 1.0.0-alpha07
16 czerwca 2021 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07
Wersja 1.0.0-alpha07 zawiera te zmiany.
Zmiany w interfejsie API powodujące niezgodność
viewModel()
przyjmuje teraz opcjonalny parametrViewModelStoreOwner
, co ułatwia współpracę z właścicielami innymi niżLocalViewModelStoreOwner
. Możesz na przykład użyć adnotacjiviewModel(navBackStackEntry)
, aby pobrać ViewModel powiązany z określonym wykresem nawigacji. (I2628d, b/188693123)
Wersja 1.0.0-alpha06
2 czerwca 2021 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06
Wersja 1.0.0-alpha06 zawiera te zmiany.
Zaktualizowano, aby była zgodna z wersją Compose 1.0.0-beta08
.
Wersja 1.0.0-alpha05
18 maja 2021 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05
Wersja 1.0.0-alpha05 zawiera te zmiany.
Nowe funkcje
- Zaktualizowano, aby była zgodna z wersją Compose
1.0.0-beta07
.
Poprawki błędów
- Pliki AndroidManifest z ui-test-manifest i ui-tooling-data są teraz zgodne z Androidem 12 (I6f9de, b/184718994).
Wersja 1.0.0-alpha04
7 kwietnia 2021 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04
Wersja 1.0.0-alpha04 zawiera te zmiany.
Zmiany zależności
- Ta wersja umożliwia synchronizowanie zależności
androidx.hilt:hilt-navigation-compose
iandroidx.navigation:navigation-compose
w usługachandroidx.compose.compiler:compiler:1.0.0-beta04
iandroidx.compose.runtime:runtime:1.0.0-beta04
. W przypadku wersji 1.0.0 wymagane jest, aby kompilator i środowisko wykonawcze były zgodne.
Wersja 1.0.0-alpha03
10 marca 2021 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha03
Wersja 1.0.0-alpha03 zawiera te zmiany.
Zmiany w interfejsie API
LocalViewModelStoreOwner.current
zwraca teraz wartość dopuszczającą wartość nullViewModelStoreOwner
, aby lepiej określać, czy w bieżącej kompozycji jest dostępny elementViewModelStoreOwner
. Interfejsy API, które wymagająViewModelStoreOwner
, np.viewModel()
iNavHost
, nadal zgłaszają wyjątek, jeśli nie ustawionoViewModelStoreOwner
. (Idf39a)
Lifecycle-Viewmodel-Compose w wersji 1.0.0-alpha02
24 lutego 2021 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02
Wersja 1.0.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
LocalViewModelStoreOwner
ma teraz funkcjeprovides
, których można używać zCompositionLocalProvider
. Zastępują one interfejsasProvidableCompositionLocal()
API. (I45d24)
Lifecycle-Viewmodel-Compose w wersji 1.0.0-alpha01
10 lutego 2021 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01
Wersja 1.0.0-alpha01 zawiera te zmiany.
Nowe funkcje
- Funkcje
viewModel()
iLocalViewModelStoreOwner
zostały przeniesione zandroidx.compose.ui.viewinterop
do tego artefaktu w pakiecieandroidx.lifecycle.viewmodel.compose
. (I7a374)
Wersja 2.3.1
Cykl życia w wersji 2.3.1
24 marca 2021 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.3.1
Wersja 2.3.1 zawiera te zmiany.
Poprawki błędów
- Reguła lint
NonNullableMutableLiveData
może teraz prawidłowo rozróżniać zmienne pól o różnej możliwości przyjmowania wartości null. (b/169249668)
Wersja 2.3.0
Wersja 2.3.0
10 lutego 2021 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.3.0
Wersja 2.3.0 zawiera te zmiany.
Główne zmiany od wersji 2.2.0
SavedStateHandle
obsługuje klasy, które nie mogą być przekazywane w pakietach:SavedStateHandle
obsługuje teraz leniwą serializację, umożliwiając wywołaniesetSavedStateProvider()
dla danego klucza, co zapewniaSavedStateProvider
, które otrzyma wywołanie zwrotne dosaveState()
, gdySavedStateHandle
zostanie poproszony o zapisanie swojego stanu. Zobacz Zapisywanie klas, których nie można przekształcić w obiekt Parcelable.- Wymuszanie zachowań związanych z cyklem życia:
- LifecycleRegistry wymusza teraz stan końcowy
DESTROYED
. LifecycleRegistry
sprawdza teraz, czy jego metody są wywoływane w głównym wątku. Zawsze było to wymagane w przypadku cykli życia działań, fragmentów itp. Dodanie obserwatorów z wątków innych niż główny powodowało trudne do wykrycia awarie w czasie działania. W przypadku obiektówLifecycleRegistry
należących do Twoich komponentów możesz wyraźnie zrezygnować ze sprawdzania za pomocąLifecycleRegistry.createUnsafe(...)
, ale musisz wtedy zadbać o odpowiednią synchronizację, gdy do tego obiektuLifecycleRegistry
uzyskuje się dostęp z różnych wątków.
- LifecycleRegistry wymusza teraz stan końcowy
- Pomocnicze funkcje stanu cyklu życia i zdarzeń: dodano statyczne metody pomocnicze
downFrom(State)
,downTo(State)
,upFrom(State)
,upTo(State)
doLifecycle.Event
, aby generowaćEvent
na podstawieState
i kierunku przejścia. Dodano metodęgetTargetState()
, która udostępniaState
, do którego cykl życia przejdzie bezpośrednio poEvent
. withStateAtLeast
: dodano interfejsy APILifecycle.withStateAtLeast
, które oczekują na etap cyklu życia i synchronicznie wykonują blok kodu niezawieszającego w momencie zmiany stanu, a następnie wznawiają działanie z wynikiem. Te interfejsy API różnią się od dotychczasowych metodwhen*
, ponieważ nie zezwalają na uruchamianie kodu zawieszającego ani nie korzystają z niestandardowego dyspozytora. (aosp/1326081)ViewTree
Interfejsy API: nowe interfejsy APIViewTreeLifecycleOwner.get(View)
iViewTreeViewModelStoreOwner.get(View)
umożliwiają pobieranie odpowiednio kontenerówLifecycleOwner
iViewModelStoreOwner
na podstawie instancjiView
. Aby prawidłowo wypełnić te pola, musisz przejść na Activity1.2.0
i Fragment1.3.0
oraz AppCompat 1.3.0-alpha01 lub nowszy. Rozszerzenia KotlinfindViewTreeLifecycleOwner
ifindViewTreeViewModelStoreOwner
są dostępne odpowiednio wlifecycle-runtime-ktx
ilifecycle-viewmodel-ktx
.LiveData.observe()
Wycofanie rozszerzenia Kotlin: rozszerzenie KotlinLiveData.observe()
niezbędne do używania składni lambda zostało wycofane, ponieważ nie jest potrzebne w przypadku Kotlina 1.4.
Wersja 2.3.0-rc01
16 grudnia 2020 roku
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.3.0-rc01
Wersja 2.3.0-rc01 zawiera te zmiany.
Poprawki błędów
- Metoda
keys()
obiektuSavedStateHandle
jest teraz spójna przed zapisaniem stanu i po jego zapisaniu – obejmuje teraz klucze używane wcześniej z obiektemsetSavedStateProvider()
, a także klucze używane z obiektamiset()
igetLiveData()
. (aosp/1517919, b/174713653)
Wkład zewnętrzny
- Interfejsy API do zawieszania współprogramów uwzględniających cykl życia lepiej obsługują teraz wywołania funkcji
yield()
. Dzięki Nicklasowi Ansmanowi Giertzowi! (aosp/1430830, b/168777346)
Wersja 2.3.0-beta01
1 października 2020 roku
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.3.0-beta01
Wersja 2.3.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
LiveData.observe()
Rozszerzenie KotlinLiveData.observe()
niezbędne do używania składni lambda zostało wycofane, ponieważ nie jest potrzebne w przypadku Kotlina 1.4. (I40d3f)
Poprawki błędów
- Uaktualnienie androidx do Kotlin 1.4 (Id6471, b/165307851, b/165300826)
Zmiany w dokumentacji
- Zaktualizowaliśmy
liveData
kreator iasLiveData()
dokumenty, aby uwzględnić w nich szczegółowe informacje o zmianie podanych wartości limitu czasu. (aosp/1122324)
Wersja 2.3.0-alpha07
19 sierpnia 2020 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.3.0-alpha07
Wersja 2.3.0-alpha07 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem z awarią w
NullSafeMutableLiveData
sprawdzaniu Lint. (aosp/1395367)
Wersja 2.3.0-alpha06
22 lipca 2020 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.3.0-alpha06
Wersja 2.3.0-alpha06 zawiera te zmiany.
Nowe funkcje
- Dodano statyczne metody pomocnicze
downFrom(State)
,downTo(State)
,upFrom(State)
,upTo(State)
doLifecycle.Event
do generowaniaEvent
na podstawieState
i kierunku przejścia. Dodano metodęgetTargetState()
, która udostępniaState
, do którego cykl życia przejdzie bezpośrednio poEvent
. (I00887) - Dodano interfejsy API
Lifecycle.withStateAtLeast
, które czekają na stan cyklu życia i synchronicznie wykonują blok kodu niezawieszającego w momencie zmiany stanu, a następnie wznawiają działanie z wynikiem. Te interfejsy API różnią się od dotychczasowych metodwhen*
, ponieważ nie zezwalają na uruchamianie kodu zawieszającego ani nie korzystają z niestandardowego dyspozytora. (aosp/1326081)
Zmiany w zachowaniu
- LifecycleRegistry wymusza teraz stan końcowy
DESTROYED
. (I00887) LifecycleRegistry
sprawdza teraz, czy jego metody są wywoływane w głównym wątku. Zawsze było to wymagane w przypadku cykli życia działań, fragmentów itp. Dodanie obserwatorów z wątków innych niż główny powodowało trudne do wykrycia awarie w czasie działania. W przypadku obiektówLifecycleRegistry
należących do Twoich komponentów możesz wyraźnie zrezygnować ze sprawdzania, używającLifecycleRegistry.createUnsafe(...)
, ale musisz wtedy zadbać o odpowiednią synchronizację, gdy ten obiektLifecycleRegistry
jest dostępny z różnych wątków (Ie7280, b/137392809).
Poprawki błędów
- Naprawiliśmy awarię w
NullSafeMutableLiveData
. (b/159987480) - Naprawiono
ObsoleteLintCustomCheck
w przypadku sprawdzania kodu za pomocą narzędzia Lint w pakiecielifecycle-livedata-core-ktx
(a w szczególnościNullSafeMutableLiveData
). (b/158699265)
Wersja 2.3.0-alpha05
24 czerwca 2020 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.3.0-alpha05
Wersja 2.3.0-alpha05 zawiera te zmiany.
Poprawki błędów
LiveData
lepiej obsługuje teraz przypadki ponownego wejścia, unikając zduplikowanych wywołań funkcjionActive()
lubonInactive()
. (b/157840298)- Rozwiązaliśmy problem, który powodował, że lintowanie nie działało w Android Studio 4.1 Canary 6 lub nowszej. (aosp/1331903)
Wersja 2.3.0-alpha04
10 czerwca 2020 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.3.0-alpha04
Wersja 2.3.0-alpha04 zawiera te zmiany.
Poprawki błędów
- Naprawiliśmy błąd w
NonNullableMutableLiveData
Lint check. (b/157294666) NonNullableMutableLiveData
Sprawdzanie kodu obejmuje teraz znacznie więcej przypadków, w którychnull
wartość została ustawiona wMutableLiveData
z parametrem typu o wartości innej niż null. (b/156002218)
Wersja 2.3.0-alpha03
20 maja 2020 r.
androidx.lifecycle:lifecycle-*:2.3.0-alpha03
. Wersja 2.3.0-alpha03 zawiera te zmiany.
Nowe funkcje
SavedStateHandle
obsługuje teraz leniwą serializację, umożliwiając wywołanie funkcjisetSavedStateProvider()
dla danego klucza i udostępniającSavedStateProvider
, które otrzyma wywołanie zwrotne dosaveState()
, gdySavedStateHandle
zostanie poproszony o zapisanie swojego stanu. (b/155106862)- Nowy interfejs
ViewTreeViewModelStoreOwner.get(View)
API umożliwia pobieranie konteneraViewModelStoreOwner
na podstawie instancjiView
. Aby poprawnie wypełnić te pola, musisz przejść na Activity1.2.0-alpha05
, Fragment1.3.0-alpha05
i AppCompat1.3.0-alpha01
. Dolifecycle-viewmodel-ktx
dodano rozszerzenie KotlinfindViewModelStoreOwner()
. (aosp/1295522)
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że
MutableLiveData
sprawdzanie Lint wydane w Lifecycle2.3.0-alpha01
nie było publikowane razem z artefaktemlifecycle-livedata-core-ktx
. (b/155323109)
Wersja 2.3.0-alpha02
29 kwietnia 2020 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.3.0-alpha02
Wersja 2.3.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
SavedStateViewModelFactory
umożliwia teraz przekazywanie wartości nullApplication
do konstruktora, aby lepiej obsługiwać przypadki, w których nie jest on łatwo dostępny i nie jest potrzebna obsługaAndroidViewModel
. (aosp/1285740)
Poprawki błędów
- Poprawiliśmy wydajność uruchamiania „na zimno”, unikając błędu weryfikacji klasy na urządzeniach z API 28 i starszych. (aosp/1282118)
Wersja 2.3.0-alpha01
4 marca 2020 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.3.0-alpha01
Wersja 2.3.0-alpha01 zawiera te zmiany.
Nowe funkcje
- Nowy interfejs
ViewTreeLifecycleOwner.get(View)
API umożliwia pobieranie konteneraLifecycleOwner
na podstawie instancjiView
. Aby poprawnie wypełnić te pola, musisz przejść na Aktywność1.2.0-alpha01
i Fragment1.3.0-alpha01
.findViewTreeLifecycleOwner
rozszerzenie Kotlin jest dostępne wlifecycle-runtime-ktx
. (aosp/1182361, aosp/1182956) - Dodano nowe sprawdzenie Lint, które ostrzega, gdy ustawisz wartość
null
w przypadku właściwościMutableLiveData
zdefiniowanej w Kotlinie jako niepustej. Jest to dostępne podczas korzystania z artefaktówlivedata-core-ktx
lublivedata-ktx
. (aosp/1154723, aosp/1159092) - Dostępny jest nowy artefakt
lifecycle-runtime-testing
, który udostępniaTestLifecycleOwner
implementującyLifecycleOwner
i bezpieczny wątkowo modyfikowalnyLifecycle
. (aosp/1242438)
Poprawki błędów
- Artefakt
lifecycle-runtime
ma teraz unikalną nazwę pakietu. (aosp/1187196)
Wersja 2.2.0
ViewModel-Savedstate w wersji 2.2.0
5 lutego 2020 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0
Wersja 2.2.0 zawiera te zmiany.
Biblioteka Lifecycle ViewModel SavedState ma teraz tę samą wersję co inne artefakty Lifecycle. Działanie 2.2.0
jest identyczne z działaniem 1.0.0
.
Wersja 2.2.0
22 stycznia 2020 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.2.0
Wersja 2.2.0 zawiera te zmiany.
Ważne zmiany od wersji 2.1.0
- Integracja z korutynami cyklu życia: nowy artefakt
lifecycle-runtime-ktx
dodaje integrację między cyklem życia a korutynami Kotlin. Rozszerzyliśmy teżlifecycle-livedata-ktx
, aby wykorzystać korutyny. Więcej informacji znajdziesz w artykule Korzystanie z korutyn Kotlin z komponentami architektury. - Wycofanie
ViewModelProviders.of()
:ViewModelProviders.of()
zostało wycofane. Możesz przekazać wartośćFragment
lubFragmentActivity
do nowego konstruktoraViewModelProvider(ViewModelStoreOwner)
, aby uzyskać tę samą funkcjonalność podczas korzystania z Fragment1.2.0
. lifecycle-extensions
Wycofanie artefaktu: w związku z wycofaniemViewModelProviders.of()
ta wersja oznacza wycofanie ostatniego interfejsu API wlifecycle-extensions
, dlatego ten artefakt należy teraz uznać za całkowicie wycofany. Zdecydowanie zalecamy korzystanie z konkretnych artefaktów cyklu życia, których potrzebujesz (np.lifecycle-service
, jeśli używaszLifecycleService
, ilifecycle-process
, jeśli używaszProcessLifecycleOwner
), zamiastlifecycle-extensions
, ponieważ w przyszłości nie będzie dostępna wersja2.3.0
lifecycle-extensions
.- Gradle Incremental Annotation Processor: procesor adnotacji Lifecycle jest domyślnie przyrostowy.
Jeśli Twoja aplikacja jest napisana w języku programowania Java 8, możesz użyć
DefautLifecycleObserver
, a jeśli jest napisana w języku programowania Java 7, możesz użyćLifecycleEventObserver
.
Wersja 2.2.0-rc03
4 grudnia 2019
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.2.0-rc03
Wersja 2.2.0-rc03 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że gdy zamockowany obiekt
ViewModel
był przechowywany w obiekcieViewModelStore
i później wysyłano do niego zapytanie za pomocą domyślnej fabryki, występował błąd. - Naprawiono użycie
Dispatchers.Main.immediate
wlaunchWhenCreated
i podobnych metodach, aby były wywoływane synchronicznie podczas odpowiedniego zdarzenia cyklu życia. (aosp/1156203)
Wkład użytkowników zewnętrznych
- Dziękujemy Andersowi Järlebergowi za przesłanie poprawki. (aosp/1156203)
- Dziękujemy Vsevolodowi Tolstopyatovowi z Jetbrains za sprawdzenie implementacji wykonania wbudowanego.
Zmiany zależności
- Rozszerzenia cyklu życia zależą teraz od fragmentu
1.2.0-rc03
.
Wersja 2.2.0-rc02
7 listopada 2019 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.2.0-rc02
Wersja 2.2.0-rc02 zawiera te zmiany.
Poprawki błędów
- Naprawiono błąd w konfiguracji narzędzia ProGuard w bibliotece, który występował na urządzeniach z interfejsem API w wersji 28 lub nowszej, jeśli docelowy interfejs API był starszy niż 29. (b/142778206)
Wersja 2.2.0-rc01
23 października 2019 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.2.0-rc01
Wersja 2.2.0-rc01 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że
launchWhenCreated
i powiązane metody były wykonywane o jedną klatkę później niż powiązana metoda cyklu życia z powodu używaniaDispatchers.Main
zamiastDispatchers.Main.immediate
. (aosp/1145596)
Wkład użytkowników zewnętrznych
- Dziękujemy Nicklasowi Ansmanowi za przesłanie poprawki. (aosp/1145596)
Wersja 2.2.0-beta01
9 października 2019 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.2.0-beta01
Wersja 2.2.0-beta01 zawiera te zmiany.
Poprawki błędów
- Naprawiono regresję wprowadzoną w Lifecycle 2.2.0-alpha05 w kolejności wywoływania
ProcessLifecycleOwner
iLifecycleOwner
w przypadku aktywności na urządzeniach z Androidem 10. (aosp/1128132) - Rozwiązaliśmy problem regresji wprowadzony w Lifecycle
2.2.0-alpha05
, który powodował błądNullPointerException
podczas korzystania z wersji2.0.0
lub2.1.0
pakietulifecycle-process
. (b/141536990)
Wersja 2.2.0-alpha05
18 września 2019 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.2.0-alpha05
Wersja 2.2.0-alpha05 zawiera te zmiany.
Poprawki błędów
- Naprawiono wyścig w konstruktorze danych LiveData w rutynie. b/140249349
Wersja 2.2.0-alpha04
5 września 2019 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.2.0-alpha04
Listę zmian w tej wersji znajdziesz tutaj.
Nowe funkcje
lifecycleScope
,whenCreated
,whenStarted
,whenResumed
,viewModelScope
i implementacja funkcjiliveData
używają terazDispatchers.Main.immediate
zamiastDispatchers.Main
. (b/139740492)
Wkład użytkowników zewnętrznych
- Dziękujemy Nicklasowi Ansmanowi za pomoc w przeniesieniu usługi na platformę
Dispatchers.Main.immediate
. (aosp/1106073)
Wersja 2.2.0-alpha03
7 sierpnia 2019 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.2.0-alpha03
Listę zmian w tej wersji znajdziesz tutaj.
Nowe funkcje
- Implementacje interfejsu
ViewModelStoreOwner
mogą teraz opcjonalnie implementować interfejsHasDefaultViewModelProviderFactory
, aby udostępniać domyślny interfejsViewModelProvider.Factory
. Zostało to zrobione w przypadku Aktywności1.1.0-alpha02
, Fragmentu1.2.0-alpha02
i Nawigacji2.2.0-alpha01
. (aosp/1092370, b/135716331)
Zmiany w interfejsie API
ViewModelProviders.of()
zostało wycofane. Aby uzyskać tę samą funkcjonalność, możesz przekazać wartośćFragment
lubFragmentActivity
do nowego konstruktoraViewModelProvider(ViewModelStoreOwner)
. (aosp/1009889)
Wersja 2.2.0-alpha02
2 lipca 2019 r.
Zostanie wycofaneandroidx.lifecycle:*:2.2.0-alpha02
Listę zmian w tej wersji znajdziesz tutaj.
Zmiany w interfejsie API
- Zastąpiliśmy
LiveDataScope.initialValue
elementemLiveDataScope.latestValue
, który będzie śledzić bieżącą emitowaną wartość blokuliveData
. - Dodano nowe przeciążenie do kreatora
liveData
, które przyjmuje parametrtimeout
jako typDuration
.
Wersja 2.2.0-alpha01
7 maja 2019 r.
Zostanie wycofaneandroidx.lifecycle:*:2.2.0-alpha01
Listę zmian w tej wersji znajdziesz tutaj.
Nowe funkcje
- Ta wersja zawiera nowe funkcje, które dodają obsługę korutyn w języku Kotlin dla komponentów Lifecycle i LiveData. Szczegółową dokumentację znajdziesz tutaj.
ViewModel-SavedState w wersji 1.0.0
Wersja 1.0.0
22 stycznia 2020 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0
Wersja 1.0.0 zawiera te zmiany.
Ważne funkcje w wersji 1.0.0
- Dodano nową klasę SavedStateHandle. Umożliwia to klasom
ViewModel
dostęp do zapisanego stanu i dodawanie do niego treści. Ten obiekt można otrzymać w konstruktorze klasyViewModel
, a fabryki domyślnie udostępniane przez Fragmenty i AppCompatActivity automatycznie wstrzyknąSavedStateHandle
. - Dodano klasę AbstractSavedStateViewModelFactory. Umożliwia tworzenie niestandardowych fabryk dla
ViewModel
i zapewnianie im dostępu doSavedStateHandle
.
ViewModel-Savedstate w wersji 1.0.0-rc03
4 grudnia 2019
Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03
Wersja 1.0.0-rc03 zawiera te zmiany.
Zmiany zależności
- Lifecycle ViewModel SavedState zależy teraz od Lifecycle
2.2.0-rc03
.
Viewmodel-Savedstate w wersji 1.0.0-rc02
7 listopada 2019 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc02
Wersja 1.0.0-rc02 zawiera te commity.
Zmiany zależności
- Teraz zależy od cyklu życia
2.2.0-rc02
.
ViewModel-SavedState w wersji 1.0.0-rc01
23 października 2019 r.
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01
zostaje opublikowany bez zmian w stosunku do 1.0.0-beta01
. Wersja 1.0.0-rc01 zawiera te commity.
ViewModel-Savedstate w wersji 1.0.0-beta01
9 października 2019 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01
Wersja 1.0.0-beta01 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że pierwsze uzyskanie dostępu do obiektu SavedState ViewModel w
Activity.onActivityResult()
skutkowało błędemIllegalStateException
. (b/139093676) - Usunęliśmy
IllegalStateException
podczas korzystania zAbstractSavedStateViewModelFactory
. (b/141225984)
ViewModel-SavedState w wersji 1.0.0-alpha05
18 września 2019 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha05
Wersja 1.0.0-alpha05 zawiera te zmiany.
Zmiany w interfejsie API
SavedStateViewModelFactory
nie jest już rozszerzanyAbstractSavedStateViewModelFactory
, aSavedStateHandle
jest tworzony tylko w przypadku obiektów ViewModel, które tego wymagają (aosp/1113593).
ViewModel-SavedState w wersji 1.0.0-alpha03
7 sierpnia 2019 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03
Listę zmian w tej wersji znajdziesz tutaj.
Zmiany powodujące niezgodność
lifecycle-viewmodel-savedstate
nie zależy już odfragment
, a powiązane z nim konstruktorySavedStateViewModelFactory(Fragment)
iSavedStateViewModelFactory(FragmentActivity)
zostały usunięte. Zamiast tegoSavedStateViewModelFactory
jest teraz domyślną fabryką dla Activity1.1.0-alpha02
, Fragment1.2.0-alpha02
i Navigation2.2.0-alpha01
. (b/135716331)
ViewModel-SavedState w wersji 1.0.0-alpha02
2 lipca 2019 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha02
Listę zmian w tej wersji znajdziesz tutaj.
Nowe funkcje
- Dodano przeciążenie
SavedStateHandle.getLiveData()
, które akceptuje wartość domyślną.
Zmiany w interfejsie API
- Nazwa
SavedStateVMFactory
została zmieniona naSavedStateViewModelFactory
. - Nazwa
AbstractSavedStateVMFactory
została zmieniona naAbstractSavedStateViewModelFactory
.
ViewModel-Savedstate w wersji 1.0.0-alpha01
13 marca 2019 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01
Pełny dziennik zatwierdzeń tej pierwszej wersji znajdziesz tutaj.
Nowe funkcje
- Teraz
ViewModels
może współtworzyć savedstate. W tym celu użyj nowo wprowadzonej fabryki modelu widokuSavedStateVMFactory
, a Twój model widoku powinien mieć konstruktor, który przyjmuje obiektSavedStateHandle
jako parametr.
Wersja 2.1.0
Ważne zmiany od wersji 2.0.0
- Dodano
LifecycleEventObserver
w przypadku, gdy potrzebny jest strumień zdarzeń cyklu życia. Jest to publiczny interfejs API, a nie ukryta klasaGenericLifecycleObserver
. - Dodano rozszerzenia ktx dla metod
LiveData.observe
iTransformations.*
. - Dodano
Transformations.distinctUntilChanged
, która tworzy nowy obiekt LiveData, który nie emituje wartości, dopóki nie zmieni się wartość źródłaLiveData
. - Dodano obsługę korutyn w klasach ViewModel przez dodanie właściwości rozszerzenia
ViewModel.viewModelScope
.
Wersja 2.1.0
5 września 2019 r.
Zostanie wycofaneandroidx.lifecycle:lifecycle-*:2.1.0
Listę zmian w tej wersji znajdziesz tutaj.
Wersja 2.1.0-rc01
2 lipca 2019 r.
androidx.lifecycle:*:2.1.0-rc01
zostaje opublikowany bez zmian w stosunku do androidx.lifecycle:*:2.1.0-beta01
. Listę zmian w tej wersji znajdziesz tutaj.
Wersja 2.1.0-beta01
7 maja 2019 r.
Zostanie wycofaneandroidx.lifecycle:*:2.1.0-beta01
Listę zmian w tej wersji znajdziesz tutaj.
Nowe funkcje
- Cykle życia są przenoszone do wersji beta: interfejs API wprowadzony w poprzednich wersjach alfa, np.
liveData
funkcje rozszerzeń do przekształceń i obserwacji,ViewModel
inicjowanie z delegowaniem właściwości i inne, są stabilizowane i nie będą się zmieniać.
Wersja 2.1.0-alpha04
3 kwietnia 2019 r.
Zostanie wycofaneandroidx.lifecycle:*:2.1.0-alpha04
Listę zmian w tej wersji znajdziesz tutaj.
Zmiany w interfejsie API
- Zmiana powodująca niezgodność: interfejs API, który obsługuje funkcje
by viewModels()
iby activityViewModels()
, został zmieniony, aby obsługiwać bezpośrednioViewModelStore
, a nie tylkoViewModelStoreOwner
. (aosp/932932)
Wersja 2.1.0-alpha03
13 marca 2019 r.
Zostanie wycofaneandroidx.lifecycle:*:2.1.0-alpha03
Pełną listę zmian w tej wersji znajdziesz tutaj.
Zmiany w interfejsie API
- Usunięto kartę
ViewModelProvider.KeyedFactory
. Drugi interfejs opróczViewModelProvider.Factory
nie pasował do nowych funkcji, takich jak delegowanie właściwości w języku Kotlinby viewmodels {}
. (aosp/914133)
Wersja 2.1.0-alpha02
30 stycznia 2019 r.
Zostanie wycofaneandroidx.lifecycle 2.1.0-alpha02
Zmiany w interfejsie API
LifecycleRegistry
zawiera teraz metodęsetCurrentState()
, która zastępuje wycofaną metodęsetState()
. (aosp/880715)
Poprawki błędów
- Rozwiązaliśmy problem, który powodował awarię instancji mock
ViewModel
, gdy zawierający elementViewModelStore
był czyszczony. b/122273087
Wersja 2.1.0-alpha01
17 grudnia 2018 r.
Zostanie wycofaneandroidx.lifecycle 2.1.0-alpha01
Nowe funkcje
- Dodano
LifecycleEventObserver
w przypadku, gdy potrzebny jest strumień zdarzeń cyklu życia. Jest to publiczny interfejs API, a nie ukryta klasaGenericLifecycleObserver
. - Dodano rozszerzenia ktx dla metod
LiveData.observe
iTransformations.*
. - Dodano metodę
Transformations.distinctUntilChanged
. Tworzy nowy obiektLiveData
, który nie emituje wartości, dopóki nie zmieni się wartość źródłowego obiektu LiveData. - Obsługa korutyn w klasach ViewModel: dodano właściwość rozszerzenia
ViewModel.viewModelScope
. - Dodaliśmy
ViewModelProvider.KeyedFactory
, fabrykę obiektów ViewModel, która w metodziecreate
otrzymujekey
iClass
.
Wersja 2.0.0
Wersja 2.0.0
21 września 2018 r.
Wersja 2.0.0
biblioteki Lifecycle została wydana z 1 poprawką błędu z 2.0.0-rc01
w ViewModel.
Poprawki błędów
- Naprawiono regułę ProGuard w ViewModel, która nieprawidłowo usuwała konstruktory b/112230489
Wersja 2.0.0-beta01
2 lipca 2018 r.
Poprawki błędów
- Poprawiono regułę ProGuard dla klasy LifecycleObserver, aby zachowywać tylko implementacje, a nie podinterfejsy b/71389427
- Poprawiono reguły ProGuard dla ViewModel, aby umożliwić zaciemnianie i zmniejszanie rozmiaru.
Wersje sprzed Androida X
W przypadku wersji Lifecycle sprzed Androida X, które są wymienione poniżej, uwzględnij te zależności:
dependencies {
def lifecycle_version = "1.1.1"
// ViewModel and LiveData
implementation "android.arch.lifecycle:extensions:$lifecycle_version"
// alternatively - just ViewModel
implementation "android.arch.lifecycle:viewmodel:$lifecycle_version" // For Kotlin use viewmodel-ktx
// alternatively - just LiveData
implementation "android.arch.lifecycle:livedata:$lifecycle_version"
// alternatively - Lifecycles only (no ViewModel or LiveData).
// Support library depends on this lightweight import
implementation "android.arch.lifecycle:runtime:$lifecycle_version"
annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version" // For Kotlin use kapt instead of annotationProcessor
// alternately - if using Java8, use the following instead of compiler
implementation "android.arch.lifecycle:common-java8:$lifecycle_version"
// optional - ReactiveStreams support for LiveData
implementation "android.arch.lifecycle:reactivestreams:$lifecycle_version"
// optional - Test helpers for LiveData
testImplementation "android.arch.core:core-testing:$lifecycle_version"
}
Wersja 1.1.1
21 marca 2018 r.
Tylko jedna niewielka zmiana: android.arch.core.util.Function
przeniesiony z arch:runtime
do arch:common
. Dzięki temu można go używać bez zależności od środowiska wykonawczego, np. w paging:common
poniżej.
lifecycle:common
jest zależnością lifecycle:runtime
, więc ta zmiana nie wpływa bezpośrednio na lifecycle:runtime
, tylko na moduły, które są bezpośrednio zależne od lifecycle:common
, tak jak Paging.
Wersja 1.1.0
22 stycznia 2018 r.
Zmiany w opakowaniu
Dostępne są teraz nowe, znacznie mniejsze zależności:
android.arch.lifecycle:livedata:1.1.0
android.arch.lifecycle:viewmodel:1.1.0
Zmiany w interfejsie API
- Wycofane funkcje
LifecycleActivity
iLifecycleFragment
zostały usunięte. Używaj funkcjiFragmentActivity
,AppCompatActivity
lubFragment
. - Do plików
ViewModelProviders
iViewModelStores
dodano adnotacje@NonNull
- Konstruktor
ViewModelProviders
został wycofany – używaj bezpośrednio jego metod statycznych. ViewModelProviders.DefaultFactory
zostało wycofane. UżywajViewModelProvider.AndroidViewModelFactory
.- Dodano statyczną metodę
ViewModelProvider.AndroidViewModelFactory.getInstance(Application)
, która umożliwia pobieranie statycznego obiektuFactory
odpowiedniego do tworzenia instancjiViewModel
iAndroidViewModel
.