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