Cykl życia
Ta tabela zawiera wszystkie artefakty w grupie androidx.lifecycle
.
Artefakt | Wersja stabilna | Kandydat do wydania | Wersja Beta | Wydanie alfa |
---|---|---|---|---|
cykl życia-* | 2.8.5 | - | - | 2.9.0-alfa02 |
cykl życia-widok modelu-kompozycja | 2.8.5 | - | - | 2.9.0-alfa02 |
Deklarowanie zależności
Aby dodać zależność do cyklu życia, musisz dodać repozytorium Google Maven do swojego w projektach AI. Zapoznaj się z repozytorium Google Maven. .
Dodaj zależności artefaktów, których potrzebujesz w pliku build.gradle
aplikacji lub modułu:
Kotlin
Groovy
dependencies { def lifecycle_version = "2.8.6" 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.6" 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
Groovy
dependencies { def lifecycle_version = "2.8.6" 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.6" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // Annotation processor annotationProcessor("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.
Opinia
Twoja opinia pomoże nam ulepszyć Jetpack. Daj nam znać, jeśli odkryjesz nowe problemy jak ulepszyć tę bibliotekę. Przyjrzyj się istniejące problemy w tej bibliotece, zanim utworzysz nową. Możesz zagłosować nad istniejącym problemem przez klikając przycisk gwiazdki.
Zobacz dokumentację narzędzia Issue Tracker. .
Wersja 2.9
Wersja 2.9.0-alpha02
4 września 2024 r.
Usługa androidx.lifecycle:lifecycle-*:2.9.0-alpha02
została zwolniona. Wersja 2.9.0-alfa02 zawiera te zatwierdzenia.
Poprawki błędów
- Z poziomu Cykl życia
2.8.5
: zaktualizujandroidx.lifecycle.ReportFragment
reguły ProGuard, aby umożliwić zaciemnianie kodu . (ff898e1).
Treści tłumaczone przez użytkowników zewnętrznych
- Przenieś zasób
androidx.compose.ui.platform.LocalLifecycleOwner
do wspólnego zestawu źródłowego (KMP). Dziękujemy Ivanowi Matkovowi z zespołu JetBrains za pomoc. (8cd5d03) - Z obszaru Cykl życia
2.8.5
: przedstawiciel rozszerzenia SavedStateHandle.saveable` obsługuje teraz wartości dopuszczone do wartości null. Dziękujemy Romanowi Kalukiewiczowi za pomoc. (0D78ea6)
Wersja 2.9.0-alpha01
7 sierpnia 2024 r.
Usługa androidx.lifecycle:lifecycle-*:2.9.0-alpha01
została zwolniona. Wersja 2.9.0-alfa01 zawiera te zatwierdzenia.
Wiele platform Kotlin
- Aplikacja
lifecycle-testing
jest teraz zgodna z KMP. (Iea41e). - Dodaj obsługę wieloplatformowego celu kotlin
linuxArm64
(I139d3, b/338268719)
Nowe funkcje
- Dostępny jest nowy artefakt KMP
androidx.lifecycle:lifecycle-viewmodel-testing
, który udostępnia klasęViewModelScenario
do niezależnego testowania modeli widoków. Obsługuje onaonCleared
(wszystkie platformy) iSavedStateHandle
(tylko Android). (337f68d, c9b3409, 9799a95c, b/264602919) - Tworzenie
ViewModel
przy użyciuViewModelProvider
jest teraz bezpieczne w wątku. Liczba usuniętych adnotacji:@MainThread
. (Ifd978, b/237006831)
Zmiany interfejsu API
- Dodaj funkcję fabryczną
CreationExtras.Key()
, aby uprościć tworzenie anonimowych obiektówCreationExtras.Key
. (I970ee) CreationExtras
zawiera teraz przeciążenia operatorów podobne do map, co umożliwia idiomatyczne manipulowanie treścią w Kotlin. Umożliwia korzystanie z usługin
,+=
i+
w połączeniu z usługąCreationExtras
. (IB4353)CreationExtras
implementuje teraz metodyequals
,hashCode
itoString
. (IB4353)- Usługa
NewInstanceFactory
jest teraz dostępna na komputerach JVM i na urządzeniach z Androidem. (D3D0892) - Wbudowana właściwość rozszerzenia do bezpiecznego udostępniania bazowej aplikacji w języku Kotlin w wersji 2.0 (I39df2)
Poprawki błędów
- Usunęliśmy ręczne dodawanie informacji o dostępie do nowych interfejsów API platformy, ponieważ dzieje się to automatycznie przez modelowanie API w przypadku korzystania z R8 z pakietem AGP w wersji 7.3 lub nowszej (np. R8 w wersji 3.3) oraz wszystkich kompilacji z pakietem AGP 8.1 lub nowszym (np. D8 w wersji 8.1). Klientom, którzy nie korzystają z pakietu AGP, zalecamy zaktualizowanie go do wersji D8 w wersji 8.1 lub nowszej. Więcej szczegółów znajdziesz w tym artykule. (If6b4c, b/345472586)
Wersja 2.8
Wersja 2.8.5
4 września 2024 r.
Usługa androidx.lifecycle:lifecycle-*:2.8.5
została zwolniona. Wersja 2.8.5 zawiera te zatwierdzenia.
Poprawki błędów
- Zaktualizuj
androidx.lifecycle.ReportFragment
reguły ProGuard, aby umożliwić zaciemnianie kodu . (ff898e1).
Treści tłumaczone przez użytkowników zewnętrznych
- Osoba, której przekazano dostęp do rozszerzenia
SavedStateHandle.saveable
, obsługuje teraz wartości dopuszczone do wartości null. Dziękujemy Romanowi Kalukiewiczowi za pomoc. (0D78ea6)
Wersja 2.8.4
24 lipca 2024 r.
Usługa androidx.lifecycle:lifecycle-*:2.8.4
została zwolniona. Wersja 2.8.4 zawiera te zatwierdzenia.
Poprawki błędów
- Funkcja
LiveData.asFlow()
teraz prawidłowo obsługuje przypadki, w których zwracany przepływ jest zakończony natychmiast po otrzymaniu wartości ustawionej już wLiveData
(na przykład gdy używasztake(1)
). (I9c566) - Realizacja funkcji
Lifecycle*Effect
ma teraz charakter idempotentny (tzn. jeśli elementonStopOrDispose
został wywołany z powodu zatrzymania cyklu życia, nie zostanie wywołany po raz drugi po usunięciu, chyba że cykl życia danych wróci do wartościSTARTED
). (I5f607, b/352364595)
Wersja 2.8.3
1 lipca 2024 r.
Usługa androidx.lifecycle:lifecycle-*:2.8.3
została zwolniona. Wersja 2.8.3 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem ze zgodnością wsteczną cyklu życia 2.8 z Compose w wersji 1.6.0 i starszymi podczas korzystania z zmniejszania kodu. (Aosp/3133056, b/346808608)
Wersja 2.8.2
12 czerwca 2024 r.
Usługa androidx.lifecycle:lifecycle-*:2.8.2
została zwolniona. Wersja 2.8.2 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiliśmy błędy (
CompositionLocal LocalLifecycleOwner not present
) występujące podczas używania funkcji Cykl życia 2.8.X z funkcją Compose w wersji 1.6.X lub starszej. Z wersji 2.8.2 możesz teraz korzystać z dowolnej wersji Compose bez konieczności obejścia problemów. (Aosp/3105647, b/336842920) ViewModelProvider
nie będzie już ulegać awarii podczas łączenia poprzednich wersji zależności cyklu życiacompileOnly
z wersjami 2.8 lub nowszymi, aby rozwiązać problemy z bibliotekami takimi jak LeakCanary. (I80383, b/341792251)
Wersja 2.8.1
29 maja 2024 r.
Usługa androidx.lifecycle:lifecycle-*:2.8.1
została zwolniona. Wersja 2.8.1 zawiera te zatwierdzenia.
Poprawki błędów
- Funkcja
lifecycle-viewmodel-compose
ma teraz wspólną zależność tylko odcompose-runtime
, usuwając swoją wspólną zależność odcompose-ui
. Artefakt Androida zachowuje zgodnośćcompose-ui
. (Aosp/3079334, b/339562627) - Integracja aplikacji
ViewModel
z funkcjąsaveable
za pomocą przedstawicieli usługi wykorzystuje teraz nazwę klasy jako część automatycznie wygenerowanego klucza. Pozwala to uniknąć konfliktów w sytuacji, gdy wiele klas używa tego samego obiektuSavedStateHandle
. (Aosp/3063463).
Wersja 2.8.0
14 maja 2024 r.
Usługa androidx.lifecycle:lifecycle-*:2.8.0
została zwolniona. Wersja 2.8.0 zawiera te zatwierdzenia.
Ważne zmiany wprowadzone od wersji 2.7.0
- Usługa
LocalLifecycleOwner
została przeniesiona z interfejsu tworzenia wiadomości dolifecycle-runtime-compose
, dzięki czemu jej pomocnicze interfejsy API oparte na Compose można używać poza tym interfejsem. - Artefakt
lifecycle-runtime-compose
zawiera teraz interfejsy APIdropUnlessResumed
idropUnlessStarted
, które umożliwiają pomijanie kliknięć lub innych zdarzeń, nawet gdy wartośćLifecycleOwner
spadnie poniżej wartościLifecycle.State
. Możesz na przykład użyć tej funkcji w narzędziu Nawigacja, aby uniknąć obsługi zdarzeń kliknięcia po rozpoczęciu przejścia na inny ekran:onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
ViewModel.viewModelScope
jest teraz parametrem konstruktora, który można zastępować, dzięki czemu możesz wprowadzić własnego dyspozytora iSupervisorJob()
lub zastąpić wartość domyślną za pomocą parametrubackgroundScope
dostępnego w usłudzerunTest
. (I2817c, b/264598574)class MyViewModel( // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob() ) : ViewModel(viewModelScope) { // Use viewModelScope as before, without any code changes } // Allows overriding the viewModelScope in a test fun Test() = runTest { val viewModel = MyViewModel(backgroundScope) }
Język
ViewModel
został przepisany w języku Kotlin i używa terazAutoClosable
zamiastCloseable
. Obsługuje teraz dodawanie obiektówAutoCloseable
za pomocą metodykey
, która umożliwia ich pobieranie przezgetCloseable()
.Wywołanie
LifecycleStartEffect
iLifecycleResumeEffect
bez klucza jest teraz błędem zgodnie z tą samą konwencją co interfejs APIDisposableEffect
powielany przez te interfejsy API.Wycofano pole
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
na rzeczLiveData.toPublisher(lifecycleOwner)
.Rozszerzenia kotlin (
lifecycle-livedata-core-ktx
) zostały przeniesione do modułulifecycle-livedata-core
.Element
NullSafeMutableLiveData
został zrefaktoryzowany, aby uniknąć wielu wyników fałszywie pozytywnych.
Cykl życia Kotlin – zgodność wieloplatformowa
Podstawowe interfejsy API cyklu życia w systemach Lifecycle
, LifecycleOwner
, LifecycleObserver
, Lifecycle.State
, Lifecycle.Event
i LifecycleRegistry
są teraz dostarczane w artefaktach zgodnych z platformą wieloplatformową Kotlin.
Artefakty, których to dotyczy:
lifecycle-common
przenosi większość interfejsów API docommon
i obsługuje jvm oraz iOS nie tylko na Androidzie.lifecycle-runtime
przenosi większość interfejsów API docommon
i obsługuje jvm oraz iOS nie tylko na Androidzie.- Plik
lifecycle-runtime-ktx
jest teraz pusty, a wszystkie interfejsy API zostały przeniesione do folderulifecycle-runtime
. lifecycle-runtime-compose
przenosi wszystkie interfejsy API docommon
i wysyła artefakt Androida zgodnie z obsługą wieloplatformowąandroidx.compose
.
Zgodność modelu ViewModel Kotlin na wielu platformach
Artefakt i interfejsy API lifecycle-viewmodel
, takie jak ViewModel
, ViewModelStore
, ViewModelStoreOwner
i ViewModelProvider
, są teraz dostarczane w artefaktach zgodnych z platformą wieloplatformową Kotlin.
Aby uwzględnić tę zmianę, metody, takie jak te w systemie ViewModelProvider
, które wymagały wykonania java.lang.Class<T>
, mają teraz równoważną metodę, która wymaga kotlin.reflect.KClass<T>
.
Zgodność plików binarnych na Androidzie została zachowana, ale podczas porównywania platformy interfejsu API Androida z wspólną platformą API wystąpiło kilka istotnych zmian:
- Tworzenie instancji
ViewModelProvider
odbywa się teraz za pomocą metodViewModelProvider.create()
, a nie bezpośrednio przy użyciu jego konstruktora. - Aplikacje
ViewModelProvider.NewInstanceFactory
iViewModelProvider.AndroidViewModelFactory
są dostępne tylko na Androidzie.- Zalecamy używanie fabryk niestandardowych, które rozpoczynają się od
ViewModelProvider.Factory
, i używają metodycreate
, która wymagaCreationExtras
lub DSLviewModelFactory
Kotlin.
- Zalecamy używanie fabryk niestandardowych, które rozpoczynają się od
- Jeśli na platformach innych niż JVM (innych niż JVM) użyjesz
ViewModelProvider
bez niestandardowej fabryki, otrzymaszUnsupportedOperationException
. Na platformach JVM zgodność jest zachowywana dzięki użyciu nieargumentowego konstruktora ViewModel, jeśli nie podano niestandardowej fabryki. - Parametr
viewModelScope
zwraca wartośćEmptyCoroutineContext
w przypadku platform, na których interfejsDispatchers.Main
jest niedostępny (np. Linux).
Artefakty, których to dotyczy:
lifecycle-viewmodel
przenosi większość interfejsów API docommon
i obsługuje jvm oraz iOS nie tylko na Androidzie.- Plik
lifecycle-viewmodel-ktx
jest teraz pusty, a wszystkie interfejsy API zostały przeniesione do folderulifecycle-viewmodel
. lifecycle-viewmodel-compose
przenosi wszystkie interfejsy API docommon
i wysyła artefakt Androida zgodnie z obsługą wieloplatformowąandroidx.compose
.
Zmiany w działaniu
InitializerViewModelFactory
(w tym funkcja konstruktoraviewModelFactory
) będzie teraz zwracać błądIllegalArgumentException
, jeśli zostało już dodaneinitializer
z tym samym identyfikatoremclazz: KClass<VM : ViewModel>
. (IC3a36).
Znane problemy
lifecycle-*:2.8.0
wymaga co najmniej 1.7.0-alpha05 (b/336842920).
Wersja 2.8.0-rc01
1 maja 2024 r.
Usługa androidx.lifecycle:lifecycle-*:2.8.0-rc01
została zwolniona. Wersja 2.8.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że profil podstawowy klas
lifecycle-common
nie był prawidłowo spakowany. Są one teraz połączone wlifecycle-runtime
AAR. (Aosp/3038274, b/322382422) - Naprawiliśmy niezamierzoną zmianę kolejności, w jakiej instancji
AutoCloseable
dołączone do modelu widoku danych – poprzednia kolejność:addCloseable(String, AutoCloseable)
, potemaddClosable(AutoCloseable)
, a następnieonCleared()
. (Aosp/3041632). - Popraw domyślne działanie tworzenia w
viewModelScope
w środowisku natywnym i środowisku JVM. (Aosp/3039221).
Treści tłumaczone przez użytkowników zewnętrznych
- Dziękujemy Victorowi Kroppowi za usprawnienie sprawdzania wątku głównego na pulpicie JVM. (Aosp/3037116).
Wersja 2.8.0-beta01
17 kwietnia 2024 r.
Usługa androidx.lifecycle:lifecycle-*:2.8.0-beta01
została zwolniona. Wersja 2.8.0-beta01 zawiera te zatwierdzenia.
Nowe funkcje
- Artefakt
lifecycle-runtime-compose
jest teraz zgodny z platformą Kotlin Multiplatform – jego kod zostaje przeniesiony docommon
i wysyła artefakt Androida zgodny z obsługą wieloplatformowąandroidx.compose
. (If7a71, I4f4a0, b/331769623)
Wersja 2.8.0-alpha04
3 kwietnia 2024 r.
Usługa androidx.lifecycle:lifecycle-*:2.8.0-alpha04
została zwolniona. Wersja 2.8.0-alfa04 zawiera te zatwierdzenia.
Nowe funkcje
- Artefakt
lifecycle-viewmodel-compose
jest teraz zgodny z platformą Kotlin Multiplatform – jego kod zostaje przeniesiony docommon
i wysyła artefakt Androida zgodny z obsługą wieloplatformowąandroidx.compose
. Zgodnie z tą zmianą metoda kompozycyjnaviewModel
akceptuje teraz oprócz metodyjava.lang.Class
obiektyKClass
. (b/330323282)
Poprawki błędów
- Element
NullSafeMutableLiveData
został zrefaktoryzowany, aby uniknąć wielu wyników fałszywie pozytywnych. (I2d8c1, Iafb18, I03463, I7ecef)
Aktualizacja zależności
- Artefakt
lifecycle-viewmodel-compose
korzysta teraz z funkcji Compose 1.6.0. - Cykl życia zależy teraz od instalatora profilu 1.3.1.
Wersja 2.8.0-alfa03
20 marca 2024 r.
Usługa androidx.lifecycle:lifecycle-*:2.8.0-alpha03
została zwolniona. Wersja 2.8.0-alfa03 zawiera te zatwierdzenia.
Nowe funkcje
ViewModel.viewModelScope
jest teraz parametrem konstruktora, który można zastępować, dzięki czemu możesz wprowadzić własnego dyspozytora iSupervisorJob()
lub zastąpić wartość domyślną za pomocą parametrubackgroundScope
dostępnego w usłudzerunTest
. (I2817c, b/264598574)class MyViewModel( // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob() ) : ViewModel(viewModelScope) { // Use viewModelScope as before, without any code changes } // Allows overriding the viewModelScope in a test fun Test() = runTest { val viewModel = MyViewModel(backgroundScope) }
Zgodność z platformą Kotlin – wieloplatformowa
Artefakt i interfejsy API lifecycle-viewmodel
, takie jak ViewModel
, ViewModelStore
, ViewModelStoreOwner
i ViewModelProvider
, są teraz dostarczane w artefaktach zgodnych z platformą wieloplatformową Kotlin. (b/214568825)
Aby uwzględnić tę zmianę, metody, takie jak te w systemie ViewModelProvider
, które wymagały wykonania java.lang.Class<T>
, mają teraz równoważną metodę, która wymaga kotlin.reflect.KClass<T>
.
Zgodność plików binarnych na Androidzie została zachowana, ale podczas porównywania platformy interfejsu API Androida z wspólną platformą API wystąpiło kilka istotnych zmian:
- Tworzenie instancji
ViewModelProvider
odbywa się teraz za pomocą metodViewModelProvider.create()
, a nie bezpośrednio przy użyciu jego konstruktora. - Aplikacje
ViewModelProvider.NewInstanceFactory
iViewModelProvider.AndroidViewModelFactory
są dostępne tylko na Androidzie.- Zalecamy używanie fabryk niestandardowych, które rozpoczynają się od
ViewModelProvider.Factory
, i używają metodycreate
, która wymagaCreationExtras
lub DSLviewModelFactory
Kotlin.
- Zalecamy używanie fabryk niestandardowych, które rozpoczynają się od
- Jeśli na platformach innych niż JVM (innych niż JVM) użyjesz
ViewModelProvider
bez niestandardowej fabryki, otrzymaszUnsupportedOperationException
. Na platformach JVM zgodność jest zachowywana dzięki użyciu nieargumentowego konstruktora ViewModel, jeśli nie podano niestandardowej fabryki. - Parametr
viewModelScope
zwraca wartośćEmptyCoroutineContext
w przypadku platform, na których interfejsDispatchers.Main
jest niedostępny (np. Linux).
Zmiany w działaniu
InitializerViewModelFactory
(w tym funkcja konstruktoraviewModelFactory
) będzie teraz zwracać błądIllegalArgumentException
, jeśli zostało już dodaneinitializer
z tym samym identyfikatoremclazz: KClass<VM : ViewModel>
. (IC3a36).
Poprawki błędów
ViewModel.getCloseable
obsługuje teraz zduplikowane klucze: jeśli z zasobemkey
jest już powiązany zasóbAutoCloseable
, stary zasób zostanie natychmiast zastąpiony i zamknięty. (Ibeb67)- Dostęp do elementu
viewModelScope
elementuViewModel
jest teraz bezpieczny dla wątków. (If4766, b/322407038)
Treści tłumaczone przez użytkowników zewnętrznych
- Usługa
LocalLifecycleOwner
została przeniesiona z interfejsu Compose do trybu cyklu życia środowiska wykonawczego i tworzenia środowiska wykonawczego, dzięki czemu jej pomocnicze interfejsy API oparte na Compose mogą być używane poza interfejsem Compose. Dziękujemy, Jake Wharton, za pomoc. (I6c41b, b/328263448)
Wersja 2.8.0-alpha02
21 lutego 2024 r.
Usługa androidx.lifecycle:lifecycle-*:2.8.0-alpha02
została zwolniona. Wersja 2.8.0-alfa02 zawiera te zatwierdzenia.
Nowe funkcje
- Dodaliśmy interfejsy API
dropUnlessResumed
idropUnlessStarted
, które umożliwiają pomijanie kliknięć lub innych zdarzeń nawet po spadku wartościLifecycleOwner
poniżej wartościLifecycle.State
. Tego ustawienia można na przykład użyć w funkcji Nawigacja, aby uniknąć obsługi zdarzeń kliknięcia po rozpoczęciu przejścia na inny ekran:onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
(Icba83, b/317230685)
Konwersje Kotlin
ViewModel
jest teraz napisany w języku Kotlin (I16f26, b/214568825)- Rozszerzenia kotlin (
lifecycle-viewmodel-ktx
) zostały przeniesione do podstawowego modułu cyklu życia. (Id787b, b/274800183) - Rozszerzenia kotlin (
lifecycle-runtime-ktx
) zostały przeniesione do podstawowego modułu cyklu życia. (Ic3686, b/274800183) - Rozszerzenia kotlin (
lifecycle-livedata-core-ktx
) zostały przeniesione do podstawowego modułu cyklu życia. (I54a3d, b/274800183)
Zgodność z platformą Kotlin – wieloplatformowa
- Podstawowe interfejsy API cyklu życia w systemach
Lifecycle
,LifecycleOwner
,LifecycleObserver
,Lifecycle.State
,Lifecycle.Event
iLifecycleRegistry
są teraz dostarczane w artefaktach zgodnych z platformą wieloplatformową Kotlin. (b/317249252)
Zmiany interfejsu API
- Wywołanie
LifecycleStartEffect
iLifecycleResumeEffect
bez klucza jest teraz błędem zgodnie z tą samą konwencją co interfejs APIDisposableEffect
powielany przez te interfejsy API. (Ib0e0c, b/323518079) ViewModel
używa terazAutoCloseable
zamiastCloseable
. Jest to zmiana zgodna wstecznie. (I27f8e, b/214568825)- Wycofano pole
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
na rzeczLiveData.toPublisher(lifecycleOwner)
. (Iabe29, b/262623005)
Treści tłumaczone przez użytkowników zewnętrznych
- Dziękujemy Ivanowi Matkovowi z firmy Jetbrains za pomoc w przeniesieniu cyklu życia do platformy Kotlin. (aosp/2926690, I0c5ac, If445d)
Wersja 2.8.0-alpha01
24 stycznia 2024 r.
Usługa androidx.lifecycle:lifecycle-*:2.8.0-alpha01
została zwolniona. Wersja 2.8.0-alfa01 zawiera te zatwierdzenia.
Nowe funkcje
ViewModel
obsługuje teraz dodawanie obiektówCloseable
za pomocą metodykey
, która umożliwia ich pobieranie przezgetCloseable()
. (I3cf63).
Wersja 2.7
Wersja 2.7.0
10 stycznia 2024 r.
Usługa androidx.lifecycle:lifecycle-*:2.7.0
została zwolniona. Wersja 2.7.0 zawiera te zatwierdzenia.
Ważne zmiany wprowadzone od wersji 2.6.0
TestLifecycleOwner
zawiera teraz funkcję zawieszaniasetCurrentState()
, która zapewnia, że zmiana stanu i wszystkie wywołania zwrotneLifecycleObserver
są wykonywane przed zwróceniem. W szczególności w przeciwieństwie do bezpośredniego ustawienia właściwościcurrentState
nie używa ona właściwościrunBlocking
, dzięki czemu można jej bezpiecznie używać zgodnie ze współrzędną, taką jakrunTest
.- Rozszerzenia
LiveData
funkcjimap
iswitchMap
odzwierciedlają teraz sposób działaniadistinctUntilChanged
– jeśliLiveData
ma ustawioną wartośćvalue
, funkcjamap
/switchMap
zostanie natychmiast wywołana w celu wypełnienia parametruvalue
zwróconego polaLiveData
. Dzięki temu wartość początkowa zostanie ustawiona jako część pierwszej kompozycji (gdy zostanie użyta z parametremobserveAsState()
), ale nie zmieni sposobu obserwacji – aktualizacje wartości ze źródłaLiveData
będą nadal stosowane dopiero wtedy, gdy zaczniesz obserwować wartośćLiveData
. - W tej wersji rozwiązano problem, który powodował, że
SavedStateHandle
nie przywracał prawidłowo niestandardowych klasParcelable
po śmierci i odtworzeniu danych. Z powodu informacji o typach, które są tracone przez platformę Androida, tablice niestandardowych obiektów Parcelable wymagają dodatkowej pracy (ręcznego tworzenia tablicy typu właściwego typu). W dokumentacji elementówget
,getLiveData
igetStateFlow
wyraźnie to ograniczenie jest opisane. - Reguły ProGuard Keep powiązane z usługą
LifecycleObserver
zostały usunięte. Oznacza to, że kod ProGuard, który chce korzystać z interfejsów API w ramach refleksji (np. używa długiej, wycofanej adnotacji@OnLifecycleEvent
), będzie musiał stworzyć własne reguły Keep dla konkretnego przypadku użycia.
Dostrzegalność zdarzeń cyklu życia
- Zamiast korzystać z
LifecycleEventObserver
, możesz teraz obserwować elementFlow
o wartościLifecycle.Event
za pomocą metody rozszerzeniaLifecycle.asFlow()
. - Użytkownicy Jetpack Compose mogą teraz używać
LifecycleEventEffect
do uruchamiania efektów ubocznych Compose opartych naLifecycle.Event
.
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
viewModel.refreshData()
}
// …
}
- Użytkownicy Jetpack Compose mogą używać
LifecycleStartEffect
iLifecycleResumeEffect
do obsługi par zdarzeń – odpowiednio rozpoczęte i wznawiane oraz wstrzymane. Ten interfejs API odzwierciedla ten z tabeliDisposableEffect
i nadaje się do przypadków, gdy zmiana wprowadzona w wyniku wzrostu trzeba cofnąć, a potem ją cofnąć.
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
LifecycleStartEffect(viewModel) {
val timeTracking = viewModel.startTrackingTimeOnScreen()
onStopOrDispose {
timeTracking.stopTrackingTimeOnScreen()
}
}
// …
}
Więcej informacji znajdziesz w sekcji Uruchamianie kodu w zdarzeniach cyklu życia.
Dostrzegalność stanu cyklu życia
- Bieżącą wartość
Lifecycle.State
można teraz obserwować za pomocą właściwoś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 odpowiednik (i krótsza alternatywa) funkcjilifecycle.currentStateFlow.collectAsState()
.
Więcej informacji znajdziesz w artykule Rejestrowanie stanu cyklu życia za pomocą przepływów.
Wersja 2.7.0-rc02
13 grudnia 2023 r.
Usługa androidx.lifecycle:lifecycle-*:2.7.0-rc02
została zwolniona. Wersja 2.7.0-rc02 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że usługa
SavedStateHandle
nie przywracała prawidłowo niestandardowych klasParcelable
po śmierci i odtworzeniu zdarzenia. Z powodu informacji o typach, które są tracone przez platformę Androida, tablice niestandardowych obiektów Parcelable wymagają dodatkowej pracy (ręcznego tworzenia tablicy typu właściwego typu). W dokumentacji elementówget
,getLiveData
igetStateFlow
wyraźnie to ograniczenie jest opisane. (I0B55a)
Wersja 2.7.0-rc01
15 listopada 2023 r.
Usługa androidx.lifecycle:lifecycle-*:2.7.0-rc01
została zwolniona. Wersja 2.7.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Mechanizmy
LifecycleStartEffect
iLifecycleResumeEffect
usuwają i ponownie tworzą blok efektu w przypadku zmiany parametruLifecycleOwner
. (IA25c6).
Wersja 2.7.0-beta01
1 listopada 2023 roku
Pakiet androidx.lifecycle:lifecycle-*:2.7.0-beta01
został udostępniony bez zmian. Wersja 2.7.0-beta01 zawiera te zatwierdzenia.
- Zwiększenie wersji beta – brak istotnych zmian w tej wersji produkcyjnej.
Wersja 2.7.0-alpha03
18 października 2023 r.
Usługa androidx.lifecycle:lifecycle-*:2.7.0-alpha03
została zwolniona. Wersja 2.7.0-alfa03 zawiera te zatwierdzenia.
Nowe funkcje
lifecycle-runtime-testing
zawiera teraz nowy mechanizm sprawdzania lint, który pozwala uniknąć ustawiania elementuLifecycle.State
obiektuTestLifecycleOwner
przy użyciu polacurrentState
wewnątrz współprogramu. Sprawdzanie licencji obecnie sugeruje zawieszaniesetCurrentState
, co umożliwia ustawienieLifecycle.State
bez blokowania. (Icf728, b/297880630)
Poprawki błędów
- Rozwiązaliśmy problem z funkcją
LiveData.switchMap
, który powodował, że zwrócenie tego samego wystąpieniaLiveData
zarówno podczas pierwszego wywołania, jak i kolejnego wywołania uniemożliwiało dodanie wystąpieniaLiveData
jako źródła. (Ibedcba7)
Wersja 2.7.0-alpha02
6 września 2023 r.
Usługa androidx.lifecycle:lifecycle-*:2.7.0-alpha02
została zwolniona. Wersja 2.7.0-alfa02 zawiera te zatwierdzenia.
Nowe funkcje
TestLifecycleOwner
zawiera teraz funkcję zawieszaniasetCurrentState()
, która umożliwia użytkownikom korzystanie zTestLifecycleOwner
przy użyciu współrzędu, takiego jakrunTest
. (I329de, b/259344129)
Zmiany interfejsu API
- Wszystkie pliki z modułów
lifecycle-livedata-ktx
zostały przeniesione do głównego modułulifecycle-livedata
. (I10c6f, b/274800183)
Zmiany w działaniu
- Rozszerzenia
LiveData.map()
iLiveData.switchMap()
ustawiają teraz wartośćvalue
zwróconego koduLiveData
, jeśli poprzedniLiveData
miał ustawioną wartość. Dzięki temu wynikowe dane LiveData w Jetpack Compose mają prawidłowy stan początkowej kompozycji. (I91d2b, b/269479952) - Urządzenie
addCloseable()
użytkownikaViewModel
zamyka terazCloseable
, jeśliViewModel
otrzymał(a) już połączenie z numeremonCleared()
. (I4712e, b/280294730)
Poprawki błędów
- Z cyklu życia
2.6.2
: naprawiono błąd polegający na tym, że elementSavedStateHandle
nie był prawidłowo przywracany po śmierci procesu w przypadku przywrócenia stanu, wywołanosave()
bez faktycznego zapisania stanu w elemencie nadrzędnymSavedStateRegistry
, po czym stan został przywrócony z powrotem. Poprawia to interakcję międzyrememberSaveable
aNavHost
w narzędziu Nawigacja. (Aosp/2729289).
Wersja 2.7.0-alpha01
26 lipca 2023 r.
Usługa androidx.lifecycle:lifecycle-*:2.7.0-alpha01
została zwolniona. Wersja 2.7.0-alfa01 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Funkcja
Lifecycle.State
jest teraz obserwowalna przez funkcjęLifecycle.currentStateFlow
, która zwracaStateFlow
, gdzievalue
to bieżącyLifecycle.State
. (Ib212d, b/209684871) - Elementy
Lifecycle.Event
można teraz obserwować jakoFlow
za pomocąLifecycle.asFlow().
(If2c0f, b/176311030) - Dodano interfejs API
LifecycleResumeEffect
, który umożliwia uruchamianie reguł tworzeniaSideEffect
na podstawie wywołań zwrotnych zdarzeńLifecycle.Event.ON_RESUME
iLifecycle.Event.ON_PAUSE
. (I60386, b/235529345) - Dodano interfejs API
LifecycleStartEffect
do uruchamiania elementów typuSideEffect
na podstawie wywołań zwrotnych zdarzeńLifecycle.Event.ON_START
iLifecycle.Event.ON_STOP
. (I5a8d1, b/235529345) - Dodano interfejs API
LifecycleEventEffect
, który umożliwia uruchamianie funkcji tworzenia wiadomościSideEffect
na podstawie regułyLifecycle.Event
. (IC9794, b/235529345) - Dodano rozszerzenie
Lifecycle.collectAsState()
, aby bezpośrednio udostępniać aplikacjęLifecycle.State
jako UtwórzState
. Jest to odpowiednik (i krótsza alternatywa) funkcjilifecycle.currentStateFlow.collectAsState()
. (I11015, b/235529345)
Poprawki błędów
- Rozszerzenie
LiveData.distinctUntilChanged()
ustawia terazvalue
zwracanych wartościLiveData
, jeśli poprzedniLiveData
ma ustawioną wartość. Nie zmieni to sposobu obserwacji – zaktualizowane wartości ze źródłaLiveData
będą nadal stosowane dopiero wtedy, gdy zaczniesz obserwować wartośćLiveData
zwracaną przez funkcjędistinctUntilChanged()
. (IB482f) - Reguły ProGuard Keep powiązane z usługą
LifecycleObserver
zostały usunięte. Oznacza to, że kod ProGuard, który chce korzystać z interfejsów API przez refleksję, będzie musiał opracować własne reguły Keep dla konkretnego przypadku użycia. (Ia12fd).
Wersja 2.6
Wersja 2.6.2
6 września 2023 r.
Usługa androidx.lifecycle:lifecycle-*:2.6.2
została zwolniona. Wersja 2.6.2 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że funkcja
SavedStateHandle
nie była prawidłowo przywracana po śmierci procesu w przypadku przywrócenia stanu, wywołaniasave()
bez faktycznego zapisania stanu w elemencie nadrzędnymSavedStateRegistry
, a potem stan został przywrócony z powrotem. Poprawia to interakcję międzyrememberSaveable
aNavHost
w narzędziu Nawigacja. (Aosp/2729289).
Wersja 2.6.1
22 marca 2023 r.
Usługa androidx.lifecycle:lifecycle-*:2.6.1
została zwolniona. Wersja 2.6.1 zawiera te zatwierdzenia.
Aktualizacje zależności
lifecycle-viewmodel-savedstate
korzysta teraz z klasy SavedState1.2.1
. (CD7251)- Cykl życia zależy teraz od modułu ProfileInstaller
1.3.0
. (F9D30B)
Wersja 2.6.0
8 marca 2023 r.
Usługa androidx.lifecycle:lifecycle-*:2.6.0
została zwolniona. Wersja 2.6.0 zawiera te zatwierdzenia.
Ważne zmiany wprowadzone od wersji 2.5.0
LiveData
zawiera teraz nową właściwośćisInitialized
, która wskazuje, czy w elemencieLiveData
była kiedykolwiek ustawiona jawna wartość. Pozwala to rozróżnić funkcjęliveData.value
zwracającąnull
, ponieważ nigdy nie ustawiono żadnej wartości lub jawną wartośćnull
.MediatorLiveData
zawiera teraz konstruktor umożliwiający ustawienie wartości początkowej.- Do wersji
StateFlow
iFlow
wcollectAsStateWithLifecycle()
dodaliśmy nowe rozszerzenie, które zbiera dane z przepływów i reprezentuje jego najnowszą wartość jako stan tworzenia wiadomości z uwzględnieniem cyklu życia. - Metody
Lifecycle.launchWhenX
iLifecycle.whenX
zostały wycofane, ponieważ używanie wstrzymania dyspozytora może w niektórych przypadkach prowadzić do marnowania zasobów. Zaleca się użycieLifecycle.repeatOnLifecycle
. Aby uzyskać więcej informacji na temat jednorazowego zawieszenia pracy, zapoznaj się z tym wyjaśnieniem wyjaśniającym, dlaczego to ustawienie jest faktycznie niebezpieczne. - Konwersja Kotlin – duża liczba klas cyklu życia została przekonwertowana na Kotlin. Wszystkie przekonwertowane klasy zachowują zgodność binarną z poprzednimi wersjami. W przypadku tych klas wprowadzono zmiany w przypadku zajęć napisanych w języku Kotlin, które są niezgodne ze źródłem:
ViewTreeLifecycleOwner
,LiveDataReactiveStreams
,HasDefaultViewModelProviderFactory
,ViewTreeViewModelStoreOwner
,Transformations
,ViewModelStoreOwner
,LifecycleOwner
W tabeli poniżej znajdziesz konwersje źródłowe dla nowej wersji cyklu życia.
Cykl życia 2.5 | Cykl życia 2.5 (KTX) | Cykl życia 2.6 |
---|---|---|
Transformations.switchMap(liveData) {...} |
liveData.switchMap {...} |
liveData.switchMap {...} |
Transformations.map(liveData) {...} |
liveData.map {...} |
liveData.map {...} |
Transformations.distinctUntilChanged(liveData) {...} |
liveData.distinctUntilChanged{...} |
liveData.distinctUntilChanged{...} |
LiveDataReactiveStreams.fromPublisher(publisher) |
publisher.toLiveData() |
publisher.toLiveData() |
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) |
liveData.toPublisher(lifecycleOwner) |
liveData.toPublisher(lifecycleOwner) |
override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory |
override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory |
override val defaultViewModelProviderFactory = factory |
override fun getDefaultViewModelCreationExtras(): CreationExtras = extras |
override fun getDefaultViewModelCreationExtras(): CreationExtras = extras |
override val defaultViewModelProviderCreationExtras = extras |
ViewTreeLifecycleOwner.set(view, owner) |
ViewTreeLifecycleOwner.set(view, owner) |
view.setViewTreeLifecycleOwner(owner) |
ViewTreeLifecycleOwner.get(view) |
view.findViewTreeLifecycleOwner() |
view.findViewTreeLifecycleOwner() |
override fun getViewModelStore(): ViewModelStore = store |
override fun getViewModelStore(): ViewModelStore = store |
override val viewModelStore: ViewModelStore = store |
override fun getLifecycle(): Lifecycle = registry |
override fun getLifecycle(): Lifecycle = registry |
override val lifecycle: Lifecycle get() = registry |
- Wartość null metody
onChanged
dla metodyObserver
utworzonej w Kotlin odpowiada teraz wartości zerowej typu ogólnego. Jeśli chcesz, abyObserver.onChanged()
akceptowała typ dopuszczający wartości null, musisz utworzyć instancjęObserver
z typem dopuszczającym wartości null. - Te zajęcia zostały też przekonwertowane na Kotlin, ale pozostają zgodne ze źródłem:
DefaultLifecycleObserver
,LifecycleEventObserver
,Lifecycle
,LifecycleRegistry
,LifecycleObserver
,ViewModelStore
,AndroidViewModel
,AbstractSavedStateViewModelFactory
,LifecycleService
,ServiceLifecycleDispatcher
iProcessLifecycleOwner
Wersja 2.6.0-rc01
22 lutego 2023 roku
Usługa androidx.lifecycle:lifecycle-*:2.6.0-rc01
została zwolniona. Wersja 2.6.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Rozszerzenie
LiveData.distinctUntilChanged()
ustawia terazvalue
zwracanych wartościLiveData
, jeśli poprzedniLiveData
ma ustawioną wartość. Nie zmieni to sposobu obserwacji – zaktualizowane wartości ze źródłaLiveData
będą nadal stosowane dopiero wtedy, gdy zaczniesz obserwować wartośćLiveData
zwracaną przez funkcjędistinctUntilChanged()
. (IB482f)
Wersja 2.6.0-beta01
8 lutego 2023 r.
Usługa androidx.lifecycle:lifecycle-*:2.6.0-beta01
została zwolniona. Wersja 2.6.0-beta01 zawiera te zatwierdzenia.
Konwersje Kotlin
LifecycleOwner
jest teraz napisany w języku Kotlin. Jest to niekompatybilna zmiana źródła w przypadku klas napisanych w Kotlin – muszą one zastąpić właściwośćlifecycle
, zamiast implementować poprzednią funkcjęgetLifecycle()
. (I75b4b, b/240298691)ViewModelStoreOwner
jest teraz w Kotlin. Jest to niekompatybilna zmiana źródła w przypadku klas napisanych w Kotlin – muszą one zastąpić właściwośćviewModelStore
, zamiast implementować poprzednią funkcjęgetViewModelStore()
. (I86409, b/240298691)- Rozszerzenie Kotlin w systemie
LifecycleOwner
, które zawiera polelifecycleScope
, zostało przeniesione do artefaktulifecycle-common
zlifecycle-runtime-ktx
. (I41d78, b/240298691) - Rozszerzenie Kotlin w systemie
Lifecycle
, które zawiera polecoroutineScope
, zostało przeniesione do artefaktulifecycle-common
zlifecycle-runtime-ktx
. (Iabb91, b/240298691)
Wersja 2.6.0-alpha05
25 stycznia 2023 r.
Usługa androidx.lifecycle:lifecycle-*:2.6.0-alpha05
została zwolniona. Wersja 2.6.0-alfa05 zawiera te zatwierdzenia.
Konwersje Kotlin
Transformations
jest teraz napisany w języku Kotlin. Jest to niekompatybilna zmiana źródła w przypadku klas napisanych w Kotlin, które używały bezpośrednio składni takiej jakTransformations.map
– kod Kotlin musi teraz używać składni metody rozszerzenia Kotlin, która wcześniej była dostępna tylko w przypadku korzystania zlifecycle-livedata-ktx
. W języku programowania Java wersje tych metod, które korzystają z metodyandroidx.arch.core.util.Function
, są wycofywane i zastępowane wersjami, które korzystają z metodyFunction1
Kotlin. Ta zmiana zachowuje zgodność plików binarnych. (I8e14f).ViewTreeViewModelStoreOwner
jest teraz napisany w języku Kotlin. Jest to niekompatybilna zmiana źródła dla klas napisanych w Kotlin. Aby ustawić i znaleźć wcześniej ustawionego właściciela, musisz bezpośrednio zaimportować i użyć metod rozszerzenia Kotlin wView
zandroidx.lifecycle.setViewTreeViewModelStoreOwner
iandroidx.lifecycle.findViewTreeViewModelStoreOwner
. Jest on zgodny z plikami binarnymi i pozostaje kompatybilny ze źródłem dla implementacji napisanych w języku programowania Java. (Ia06d8, Ib22d8, b/240298691)- Interfejs
HasDefaultViewModelProviderFactory
jest teraz napisany w języku Kotlin. Jest to niekompatybilna zmiana źródła w przypadku klas napisanych w Kotlin. Muszą one teraz zastąpić właściwościdefaultViewModelProviderFactory
idefaultViewModelCreationExtras
, zamiast implementować odpowiadające im funkcje. (Iaed9c, b/240298691) Observer
jest teraz napisany w języku Kotlin. MetodaonChanged()
używa teraz nazwyvalue
jako parametru. (Iffef2, I4995e, b/240298691)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.
Usługa androidx.lifecycle:lifecycle-*:2.6.0-alpha04
została zwolniona. Wersja 2.6.0-alfa04 zawiera te zatwierdzenia.
Nowe funkcje
LiveData
zawiera teraz nową właściwośćisInitialized
, która wskazuje, czy w elemencieLiveData
była kiedykolwiek ustawiona jawna wartość. Pozwala to rozróżnić funkcjęliveData.value
zwracającąnull
, ponieważ nigdy nie ustawiono żadnej wartości lub jawną wartośćnull
. (IBD018).
Zmiany interfejsu API
- Interfejsy API
collectAsStateWithLifecycle()
wlifecycle-runtime-compose
nie są już w wersji eksperymentalnej. (I09d42, b/258835424) - Metody
Lifecycle.launchWhenX
iLifecycle.whenX
zostały wycofane, ponieważ używanie wstrzymania dyspozytora może w niektórych przypadkach prowadzić do marnowania zasobów. Zaleca się użycieLifecycle.repeatOnLifecycle
. (Iafc54, b/248302832)
Konwersje Kotlin
ViewTreeLifecycleOwner
jest teraz napisany w języku Kotlin. Jest to niekompatybilna zmiana źródła dla klas napisanych w Kotlin. Aby ustawić i znaleźć wcześniej ustawionego właściciela, musisz bezpośrednio zaimportować i użyć metod rozszerzenia Kotlin wView
zandroidx.lifecycle.setViewTreeLifecycleOwner
iandroidx.lifecycle.findViewTreeLifecycleOwner
. Zastępuje to poprzednie rozszerzenie Kotlin wlifecycle-runtime-ktx
. Jest on zgodny z plikami binarnymi i pozostaje kompatybilny ze źródłem dla implementacji napisanych w języku programowania Java. (I8a77a, I5234e, b/240298691)LiveDataReactiveStreams
jest teraz napisany w języku Kotlin. Rozszerzenia Kotlin, które były wcześniej dostępne wlifecycle-reactivestreams-ktx
, zostały przeniesione do modułulifecycle-reactivestreams
i są głównym narzędziem do tworzenia kodu napisanego w języku Kotlin. Jest to niekompatybilna zmiana źródła w przypadku kodu napisanego w Kotlin, jeśli nie korzystasz jeszcze z interfejsów API metody rozszerzenia Kotlin. (I2b1b9, I95d22, b/240298691)DefaultLifecycleObserver
,LifecycleEventObserver
,Lifecycle
,LifecycleRegistry
,LifecycleObserver
iViewModelStore
są teraz napisane w języku Kotlin (Iadffd, (I60034, I8c52c, I9593d, I01fe1, I59/a238}, I59/238},
Poprawki błędów
SavedStateHandle
nie ulega już awarii zClassCastException
przy wywołaniuget()
z nieprawidłową klasą typu. (I6ae7c).
Wersja 2.6.0-alpha03
24 października 2022 r.
Usługa androidx.lifecycle:lifecycle-*:2.6.0-alpha03
została zwolniona. Wersja 2.6.0-alfa03 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że ograniczenia między różnymi modułami cyklu życia nie działały zgodnie z oczekiwaniami. (I18d0d, b/249686765)
- Błędy zgłaszane przez interfejs
LifecycleRegistry.moveToState()
zawierają teraz bardziej przydatne komunikaty o błędach, które informują deweloperów o komponencie powodującym błąd. (Idf4b2, b/244910446)
Wersja 2.6.0-alpha02
7 września 2022 roku
Usługa androidx.lifecycle:lifecycle-*:2.6.0-alpha02
została zwolniona. Wersja 2.6.0-alfa02 zawiera te zatwierdzenia.
Zmiany interfejsu API
MediatorLiveData
zawiera teraz konstruktor umożliwiający ustawienie wartości początkowej. (Ib6cc5, b/151244085)
Poprawki błędów
- Artefakty
Lifecycle
zawierają teraz ograniczenia, które gwarantują, że wszystkie współzależne artefakty cyklu życia używają tej samej wersji, co powoduje automatyczne uaktualnienie innych zależności po uaktualnieniu. b/242871265 FlowLiveData.asFlow()
tworzy terazcallbackFlow
, zamiast używać własnej implementacjiChannel
, aby zagwarantować bezpieczeństwo wątków i zachowanie kontekstu. (I4a8b2, b/200596935)- Funkcja
asLiveData
wFlowLiveData
zachowa teraz początkową wartość parametruStateFlow
podczas tworzenia nowy obiektLiveData
. (I3f530, b/157380488) - Z cyklu życia
2.5.1
: niestandardowe implementacje kluczaAndroidViewModelFactory
teraz prawidłowo wywołują funkcjęcreate(modelClass)
, gdy używasz konstruktora stanowego zLifecycle
2.4 lub nowszym (I5b315, b/238011621)
Wersja 2.6.0-alpha01
29 czerwca 2022 r.
Usługa androidx.lifecycle:lifecycle-*:2.6.0-alpha01
została zwolniona. Wersja 2.6.0-alfa01 zawiera te zatwierdzenia.
Nowe funkcje
- Do wersji
StateFlow
iFlow
w wersjicollectAsStateWithLifecycle
dodano nowe rozszerzenie, które pobiera dane z procesów i przedstawia jego najnowszą wartość jako stan tworzenia wiadomości w sposób uwzględniający cykl życia. Przepływ jest rejestrowany, a nowa emisja jest ustawiana na wartość stanu, gdy cykl życia mieści się w zakresie co najmniej określonej wartościLifecycle.State
. Gdy cykl życia spadnie poniżej tej wartości (Lifecycle.State
), zbieranie przepływu zostanie zatrzymane, a wartość stanu nie jest aktualizowana. (I1856e, b/230557927)
Wersja 2.5
Wersja 2.5.1
27 lipca 2022 roku
Usługa androidx.lifecycle:lifecycle-*:2.5.1
została zwolniona. Wersja 2.5.1 zawiera te zatwierdzenia.
Poprawki błędów
- Niestandardowe implementacje interfejsu
AndroidViewModelFactory
prawidłowo wywołują funkcjęcreate(modelClass)
podczas korzystania ze stanowego konstruktoraAndroidViewModelFactory
z tagiemLifecycle
w wersji 2.4 lub nowszej. (I5b315, b/238011621)
Wersja 2.5.0
29 czerwca 2022 r.
Usługa androidx.lifecycle:lifecycle-*:2.5.0
została zwolniona. Wersja 2.5.0 zawiera te zatwierdzenia.
Ważne zmiany wprowadzone od wersji 2.4.0
SavedStateHandle
oferuje teraz interfejs APIgetStateFlow()
, który zamiast używaniaLiveData
zwraca interfejs KotlinStateFlow
do monitorowania zmian wartości.Dodatki do tworzenia modelu widoku danych – podczas tworzenia niestandardowego
ViewModelProvider.Factory
nie trzeba już przedłużaćAndroidViewModelFactory
aniAbstractSavedStateViewModelFactory
, aby uzyskać dostęp odpowiednio doApplication
lubSavedStateHandle
. Zamiast tego te pola są udostępniane do każdej podklasyViewModelProvider.Factory
jakoCreationExtras
przez nowe przeciążeniecreate
:create(Class<T>, CreationExtras)
. Te dodatki są dostarczane automatycznie przez Twoją aktywność lub fragment, gdy używasz odpowiednio Aktywności1.5.0
i 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 teraz konsolę DSLviewModelFactory
Kotlin, która umożliwia definiowanieViewModelProvider.Factory
w oparciu o 1 lub więcej inicjatorów lambda, po jednym na każdą klasęViewModel
obsługiwaną przez Twoją własną fabrykę przy uż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
oferuje teraz interfejs APIviewModel()
, który wykorzystuje fabrykę lambdy przy tworzeniu instancjiViewModel
bez konieczności tworzenia niestandardowegoViewModelProvider.Factory
.// Within a @Composable, you can now skip writing a custom Factory // and instead write a lambda to do the initialization of your ViewModel val detailViewModel = viewModel { // This lambda is only called the first time the ViewModel is created // and all CreationExtras are available inside the lambda val savedStateHandle = createSavedStateHandle() DetailViewModel(savedStateHandle) }
SavedStateHandle Compose Saver Integration – artefakt
lifecycle-viewmodel-compose
zawiera teraz wSavedStateHandle.saveable
nowe, eksperymentalne interfejsy API, które pozwalająrememberSaveable
na podobne działanie obsługiwane przezSavedStateHandle
modelu `ViewModel.class ListScreenViewModel(handle: SavedStateHandle): ViewModel() { // This value survives both configuration changes and process death and recreation val editMode by handle.saveable { mutableStateOf(false) } }
Dodaliśmy interfejs API
addCloseable()
i nowe przeciążenie konstruktora, które pozwalają na dodanie do obiektuViewModel
co najmniej 1 obiektuCloseable
, który zostanie zamknięty, gdyViewModel
zostanie wyczyszczony, bez konieczności ręcznego wprowadzania zmian w elemencieonCleared()
.Na przykład, aby utworzyć zakres współrzędny, który można wstrzykiwać do modelu widoku danych i kontrolować za pomocą testów, możesz utworzyć
CoroutineScope
z implementacjąCloseable
:class CloseableCoroutineScope( context: CoroutineContext = SupervisorJob() + Dispatchers.Main.immediate ) : Closeable, CoroutineScope { override val coroutineContext: CoroutineContext = context override fun close() { coroutineContext.cancel() } }
Którego można następnie użyć w konstruktorze
ViewModel
z zachowaniem tego samego czasu działania co wviewModelScope
:class TestScopeViewModel( val customScope: CloseableCoroutineScope = CloseableCoroutineScope() ) : ViewModel(customScope) { // You can now use customScope in the same way as viewModelScope }
Zmiany w działaniu
- Próba przeniesienia wskaźnika
Lifecycle.State
zINITIALIZED
doDESTROYED
zawsze spowoduje zgłoszenieIllegalStateException
niezależnie o tym, czyLifecycle
ma dołączonego obserwatora. - Użytkownik
LifecycleRegistry
wyczyści teraz swoich obserwatorów, gdy osiągnie stanDESTROYED
.
Wersja 2.5.0-rc02
15 czerwca 2022 r.
Usługa androidx.lifecycle:lifecycle-*:2.5.0-rc02
została zwolniona. Wersja 2.5.0-rc02 zawiera te zatwierdzenia.
Poprawki błędów
ViewModelProvider
nie będzie już ulegać awarii podczas mieszania wcześniejszych wersji zależności cyklu życia kompilowania tylko z wersją 2.5 lub nowszą. (I81a66, b/230454566)
Wersja 2.5.0-rc01
11 maja 2022 roku
Usługa androidx.lifecycle:lifecycle-*:2.5.0-rc01
została zwolniona. Wersja 2.5.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
MediatorLiveData.addSource()
wysyła terazNullPointerException
po przekazaniu źródłanull
, zamiast propagować źródłonull
obserwatorom.(Ibd0fb, b/123085232)
Wersja 2.5.0-beta01
20 kwietnia 2022 r.
Usługa androidx.lifecycle:lifecycle-*:2.5.0-beta01
została zwolniona. Wersja 2.5.0-beta01 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Dodano przedstawicieli właściwości
SavedStateHandle.saveable
, aby używać nazw właściwości jako kluczy do zachowania stanu w obiekcieSavedStateHandle
(I8bb86, b/225014345)
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że zagnieżdżenie jednego elementu
NavHost
w innym elemencieNavHost
w innej dolnej karcie nawigacyjnej prowadziło do wywołaniaIllegalStateException
w przypadku korzystania z kilku tylnych stosów. (I11bd5, b/228865698)
Wersja 2.5.0-alpha06
6 kwietnia 2022 roku
Usługa androidx.lifecycle:lifecycle-*:2.5.0-alpha06
została zwolniona. Wersja 2.5.0-alfa06 zawiera te zatwierdzenia.
Nowe funkcje
- Dodaj eksperymentalne przeciążenie
MutableState
doSavedStateHandle.saveable
dla zgodność zrememberSaveable
(I38cfe, b/224565154)
Zmiany interfejsu API
- Funkcja
CreationExtras
ma teraz postać abstrakcyjną, a nie zapieczętowaną. (IB8a7a)
Poprawki błędów
- Naprawiliśmy błąd (
IllegalStateException: Already attached to lifecycleOwner
) spowodowany przez regułęSavedStateHandleController
. (I7ea47, b/215406268)
Wersja 2.5.0-alpha05
23 marca 2022 r.
Usługa androidx.lifecycle:lifecycle-*:2.5.0-alpha05
została zwolniona. Wersja 2.5.0-alfa05 zawiera te zatwierdzenia.
Nowe funkcje
- Moduł
lifecycle-viewmodel-compose
udostępnia terazSavedStateHandleSaver
– eksperymentalny interfejs API, który zapewnia prawidłową integrację wartości w tabeliSavedStateHandle
z tym samym stanem zapisanego instancji, którego używarememberSaveable
. (Ia88b7, b/195689777)
Zmiany interfejsu API
- Rozwiązaliśmy problem ze zgodnością z wersjami cyklu życia 2.3 i nowszymi w języku Java. (I52c8a, b/219545060)
Poprawki błędów
SavedStateViewFactory
obsługuje teraz korzystanie zCreationExtras
nawet wtedy, gdy zostało zainicjowane za pomocąSavedStateRegistryOwner
. Jeśli podano dodatki, zainicjowane argumenty są ignorowane. (I6c43b, b/224844583)
Wersja 2.5.0-alpha04
9 marca 2022 r.
Usługa androidx.lifecycle:lifecycle-*:2.5.0-alpha04
została zwolniona. Wersja 2.5.0-alfa04 zawiera te zatwierdzenia.
Zmiany interfejsu API
SavedStateHandle
oferuje teraz interfejs APIgetStateFlow()
, który zwraca parametr KotlinStateFlow
do monitorowania zmian wartości jako alternatywa dla użyciaLiveData
. (Iad3ab, b/178037961)
Wersja 2.5.0-alpha03
23 lutego 2022 r.
Usługa androidx.lifecycle:lifecycle-*:2.5.0-alpha03
została zwolniona. Wersja 2.5.0-alfa03 zawiera te zatwierdzenia.
Nowe funkcje
- Dodano interfejs API
addCloseable()
i nowy przeciążenie konstruktora, które pozwala dodaćCloseable
obiektów doViewModel
, które zostaną zamknięta, gdyViewModel
jest wyczyszczony bez konieczności pracy ręcznej wonCleared()
. (I55ea0) lifecycle-viewmodel
udostępnia teraz:InitializerViewModelFactory
, który umożliwia dodanie parametru lambda do obsługi żądań określonych klasViewModel
zCreationExtras
jako danymi podstawowymi źródła. (If58fc, b/216687549).lifecycle-viewmodel-compose
oferuje teraz interfejs APIviewModel()
, który wykorzystuje fabrykę lambda, aby utworzyć instancjęViewModel
bez wymaga utworzenia niestandardowego elementuViewModelProvider.Factory
. (I97fbb, b/216688927)
Zmiany interfejsu API
- Teraz możesz utworzyć
ViewModel
za pomocą usługiCreationExtras
przezlifecycle-viewmodel-compose
(I08887, b/216688927)
Zmiany w działaniu
- Próba przeniesienia wskaźnika
Lifecycle.State
z położeniaINITIALIZED
doDESTROYED
będzie teraz zawsze wysyłaćIllegalStateException
niezależnie o tym, czyLifecycle
ma dołączonego obserwatora. (I7c390, b/177924329) - Użytkownik
LifecycleRegistry
wyczyści teraz listę obserwatorów, gdy: przejść do stanuDESTROYED
. (I4f8dd, b/142925860)
Wersja 2.5.0-alpha02
9 lutego 2022 r.
Usługa androidx.lifecycle:lifecycle-*:2.5.0-alpha02
została zwolniona. Wersja 2.5.0-alfa02 zawiera te zatwierdzenia.
Zmiany interfejsu API
SavedStateHandle
iSavedStateViewModelFactory
zostały przekształcone w Kotlin. Zwiększyło to możliwość wartości null identyfikatorów ogólnych w obu klasach. (Ib6ce2, b/216168263, I9647a, b/177667711)- Parametr funkcji
LiveData
switchMap
może mają teraz dane wyjściowe z możliwością wartości null. (I40396, b/132923666) - Do rozszerzeń
LiveData
-ktx dodano adnotacje:@CheckResult
, aby wymusić stosowanie wyników przy ich wywoływaniu. funkcji. (Ia0f05, b/207325134)
Zmiany w działaniu
SavedStateHandle
teraz prawidłowo przechowuje wartość domyślną, gdy brak wartości dla określonego klucza. (I1c6ce, b/178510877)
Poprawki błędów
- Z cyklu życia
2.4.1
: zaktualizowaliśmylifecycle-process
, aby polegać na uruchamianiu 1.1.1, aby mieć pewność, że poprawki, które uniemożliwiają aplikacjiProcessLifecycleInitializer
wysłanieStartupException
, są domyślnie dostępne. (Ib01df, b/216490724) - Pojawia się ulepszony komunikat o błędzie, gdy niestandardowe zajęcia
AndroidViewModel
mają w niewłaściwej kolejności i spróbuj utworzyćViewModel
. (I340f7, b/177667711) - Możesz teraz utworzyć model widoku w
CreationExtras
za pomocąAndroidViewModelFactory
bez konfigurowania aplikacji. (I6ebef, b/217271656)
Wersja 2.5.0-alpha01
26 stycznia 2022 r.
Usługa androidx.lifecycle:lifecycle-*:2.5.0-alpha01
została zwolniona. Wersja 2.5.0-alfa01 zawiera te zatwierdzenia.
Dodatki do tworzenia modelu ViewModel
W tej wersji rozpoczynamy budowę ViewModel
. Zamiast sztywnego zestawu podklas klasy ViewModelProvider.Factory
, z których każda dodaje dodatkowe funkcje (umożliwia stosowanie parametru konstruktora Application
w obiekcie AndroidViewModelFactory
, a także umożliwia stosowanie parametru konstruktora SavedStateHandle
za pomocą komponentów SavedStateViewModelFactory
i AbstractSavedStateViewModelFactory
itd.), przechodzimy do świata bezstanowych fabryk, opierających się na nowej koncepcji – CreationExtras
. (Ia7343, b/188691010, b/188541057)
Po tej zmianie usługa ViewModelProvider
nie wywołuje już bezpośrednich wywołań do poprzedniej metody metody create(Class<T>)
(ViewModelProvider.Factory
). Zamiast tego wywołuje nowe przeciążenie typu create
: create(Class<T>, CreationExtras)
. Oznacza to, że każda bezpośrednia implementacja instancji ViewModelProvider.Factory
ma teraz dostęp do każdego z tych nowych elementów CreationExtras
:
ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY
: ta sekcjaString
zapewnia dostęp do klucza niestandardowego przekazanego przez CiebieViewModelProvider.get()
.ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY
zapewnia dostęp do klasyApplication
.SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY
zapewnia dostęp do modeluSavedStateRegistryOwner
, który jest używany do tworzenia tego modelu widoku.SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY
zapewnia dostęp do modeluViewModelStoreOwner
, który jest używany do tworzenia tego modelu widoku.SavedStateHandleSupport.DEFAULT_ARGS_KEY
zapewnia dostęp doBundle
argumentów, których należy użyć do skonstruowaniaSavedStateHandle
.
Te dodatki są udostępniane domyślnie, gdy używasz opcji Aktywność 1.5.0-alpha01
, Fragment 1.5.0-alpha01
i Nawigacja 2.5.0-alpha01
. Jeśli używasz wcześniejszej wersji tych bibliotek, Twoja CreationExtras
będzie pusta – wszystkie istniejące podklasy obiektu ViewModelProvider.Factory
zostały przepisane, aby obsługiwać zarówno starszą ścieżkę tworzenia używaną przez wcześniejsze wersje tych bibliotek, jak i ścieżkę CreationExtras
, która będzie używana w przyszłości.
Te CreationExtras
umożliwiają utworzenie klasy ViewModelProvider.Factory
, która przekazuje do każdego typu ViewModel
tylko te informacje, których potrzebujesz, bez korzystania ze ścisłej hierarchii podklas fabryki:
class CustomFactory : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
return when (modelClass) {
HomeViewModel::class -> {
// Get the Application object from extras
val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY])
// Pass it directly to HomeViewModel
HomeViewModel(application)
}
DetailViewModel::class -> {
// Create a SavedStateHandle for this ViewModel from extras
val savedStateHandle = extras.createSavedStateHandle()
DetailViewModel(savedStateHandle)
}
else -> throw IllegalArgumentException("Unknown class $modelClass")
} as T
}
}
Używamy funkcji rozszerzenia createSavedStateHandle()
Kotlin w obiekcie CreationExtras
z SavedStateHandleSupport
, aby utworzyć SavedStateHandle
tylko dla jednego modelu widoku, który go potrzebuje. (Ia6654, b/188541057)
Niestandardowy CreationExtras
można udostępnić, zastępując getDefaultViewModelCreationExtras()
w ComponentActivity
lub Fragment
, dzięki czemu są one dostępne w niestandardowym elemencie ViewModelProvider.Factory
jako wbudowany mechanizm wspomaganego wstrzykiwania. Te dodatki będą automatycznie dostępne w Twojej niestandardowej wersji fabryki, gdy będą używane bezpośrednio za pomocą ViewModelProvider
lub podczas korzystania z rozszerzeń właściwości by viewModels()
i by activityViewModels()
Kotlin. (I79f2b, b/207012584, b/207012585, b/207012490)
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że podana wartość domyślna
do
SavedStateHandle
pojawi się ponownie po tym procesie. śmierć i rekreacja, nawet jeśli Usunięto zSavedStateHandle
. W konsekwencji to,SavedStateHandle
nie będzie już scalać danych domyślnych i przywrócone wartości razem, zamiast użycia tylko i przywrócone wartości. (I53a4b)
Wersja 2.4
Wersja 2.4.1
9 lutego 2022 r.
Usługa androidx.lifecycle:lifecycle-*:2.4.1
została zwolniona. Wersja 2.4.1 zawiera te zatwierdzenia.
Poprawki błędów
- Przywrócono z cyklu życia
2.5.0-alpha01
: naprawiono błąd polegający na podawaniu wartości domyślnej. doSavedStateHandle
pojawi się ponownie po tym procesie. śmierć i rekreacja, nawet jeśli usunięto zSavedStateHandle
. W konsekwencji to,SavedStateHandle
nie będzie już scalać danych domyślnych i przywrócone wartości razem, zamiast użycia tylko i przywrócone wartości. (I53a4b) lifecycle-process
działa teraz w oparciu o funkcję Androidx Startup 1.1.1. Rozwiązało to problemy z regresją, w której użycieProcessLifecycleInitializer
powodowało wyświetlenie wynikuStartupException
. (b/216490724)
Wersja 2.4.0
27 października 2021 roku
Usługa androidx.lifecycle:lifecycle-*:2.4.0
została zwolniona. Wersja 2.4.0 zawiera te zatwierdzenia.
Ważne zmiany wprowadzone od wersji 2.3.0
- Interfejs
@OnLifecycleEvent
został wycofany. Zamiast niego należy użyć właściwościLifecycleEventObserver
lubDefaultLifecycleObserver
. - Dodano bibliotekę
androidx.lifecycle:lifecycle-viewmodel-compose
. Udostępnia funkcjeviewModel()
kompozycyjne iLocalViewModelStoreOwner
.- Zmiana źródłowa: kod
ViewModelProvider
został przepisany w Kotlin. MetodaViewModelProvider.Factory.create
nie zezwala już na wartość domyślną do wartości null.
- Zmiana źródłowa: kod
- Do interfejsu
androidx.lifecycle:lifecycle-runtime-ktx
dodano nowy interfejs API coroutines: Lifecycle.repeatOnLifecycle
, interfejs API, który wykonuje blok kodu w korycie, gdy cykl życia jest w co najmniej określonym stanie. Blokada zostanie anulowana i uruchomiona ponownie w miarę przechodzenia cyklu życia do i ze stanu docelowego.Flow.flowWithLifecycle
– interfejs API, który wysyła wartości z przepływu nadrzędnego, gdy cykl życia jest co najmniej w określonym stanie.- Element
DefaultLifecycleObserver
został przeniesiony z folderulifecycle.lifecycle-common-java8
do folderulifecycle.lifecycle-common
.lifecycle.lifecycle-common-java8
nie ma już żadnych dodatkowych funkcji pozalifecycle.lifecycle-common
, więc zależność od tego interfejsu może zostać zastąpiona przezlifecycle.lifecycle-common
. - Interfejs API inny niż coroutines z interfejsu
lifecycle-viewmodel-ktx
został przeniesiony do modułulifecycle-viewmodel
. lifecycle-process
używa terazandroidx.startup
do inicjowaniaProcessLifecycleOwner
.Wcześniej za tę czynność odpowiadał użytkownik
androidx.lifecycle.ProcessLifecycleOwnerInitializer
.Jeśli użyto funkcji
tools:node="remove"
, do inicjalizacji użyto elementuContentProvider
cykl życia przetwarzania w przeszłości, musisz zamiast tego wykonać te czynności.<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.lifecycle.ProcessLifecycleInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
(lub)
<!-- If you want to disable androidx.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
Wersja 2.4.0-rc01
29 września 2021 r.
Udostępniliśmy wersję androidx.lifecycle:lifecycle-*:2.4.0-rc01
bez zmian w cyklu życia wersji 2.4.0–beta01. Wersja 2.4.0-rc01 zawiera te zatwierdzenia.
Wersja 2.4.0-beta01
15 września 2021 r.
Usługa androidx.lifecycle:lifecycle-*:2.4.0-beta01
została zwolniona. Wersja 2.4.0-beta01 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Interfejs
@OnLifecycleEvent
został wycofany.LifecycleEventObserver
lub Zamiast niego należy użyć parametruDefaultLifecycleObserver
. (I5a8fa) - Przeniesiono zasób DefaultLifecycleObserver z jednostki organizacyjnej
androidx.lifecycle.lifecycle-common-java8
doandroidx.lifecycle.lifecycle-common
Usługaandroidx.lifecycle.lifecycle-common-java8
nie oferuje już żadnych dodatkowych funkcji poza wersjąandroidx.lifecycle.lifecycle-common
, dlatego zależność od niej może zostać zastąpiona przezandroidx.lifecycle.lifecycle-common
. (I021aa) - Interfejs API spoza kooutines z
lifecycle-viewmodel-ktx
został przeniesiony dolifecycle-viewmodel
. (I6d5b2)
Treści tłumaczone przez użytkowników zewnętrznych
Wersja 2.4.0-alpha03
4 sierpnia 2021 r.
Usługa androidx.lifecycle:lifecycle-*:2.4.0-alpha03
została zwolniona. Wersja 2.4.0-alfa03 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Zmiana źródłowa: komponent ViewModelProvider został przepisany w Kotlin.
Metoda
ViewModelProvider.Factory.create
nie zezwala już na wartość null ogólne. (I9B9f6)
Zmiany w działaniu
- Metoda
Lifecycle.repeatOnLifecycle
:block
jest teraz zawsze wywoływana szeregowo podczas ponownego wykonywania. (IBab33),
Treści tłumaczone przez użytkowników zewnętrznych
- Dziękujemy chao2zhang za naprawienie fragmentów kodu w dokumentacji
repeatOnLifecycle
. 205.
Wersja 2.4.0-alpha02
16 czerwca 2021 r.
Usługa androidx.lifecycle:lifecycle-*:2.4.0-alpha02
została zwolniona. Wersja 2.4.0-alfa02 zawiera te zatwierdzenia.
Nowe funkcje
- W aplikacji
lifecycle-runtime-ktx
dodano nowy test lintowaniaRepeatOnLifecycleWrongUsage
, który wykrywa, żerepeateOnLifecycle
jest nieprawidłowo używany wonStart()
lubonResume()
. (706078, b/187887400)
Zmiany interfejsu API
- Interfejs API
LifecycleOwner.addRepeatingJob
został usunięty na korzyśćLifecycle.repeatOnLifecycle
, która uwzględnia ustrukturyzowanie jest równoczesność i łatwiej jest wyciągnąć wnioski. (I4a3a8). - Udostępnij plik
ProcessLifecycleInitializer
publicznie, aby inneandroidx.startup.Initializer
mogły używać go jako zależności. (I94c31)
Poprawki błędów
- Rozwiązaliśmy problem ze sprawdzaniem lintowania
NullSafeMutableLiveData
, gdy pole zawierało modyfikatory. (#147, b/183696616) - Rozwiązaliśmy inny problem ze sprawdzaniem lintowania
NullSafeMutableLiveData
w przypadku używania wyrażeń ogólnych. (nr 161, b/184830263)
Treści tłumaczone przez użytkowników zewnętrznych
- Dziękujemy firmie maxsav za usprawnienie sprawdzania lintowania
NullSafeMutableLiveData
. (#147, b/183696616) - Dziękujemy kozaxinan za poprawę wyniku
NullSafeMutableLiveData
lintowania. (nr 161, b/184830263)
Wersja 2.4.0-alpha01
24 marca 2021 r.
Usługa androidx.lifecycle:lifecycle-*:2.4.0-alpha01
została zwolniona. Wersja 2.4.0-alfa01 zawiera te zatwierdzenia.
Zmiany w działaniu
lifecycle-process
używa terazandroidx.startup
do inicjowaniaProcessLifecycleOwner
.Wcześniej za tę czynność odpowiadał użytkownik
androidx.lifecycle.ProcessLifecycleOwnerInitializer
.Jeśli użyto funkcji
tools:node="remove"
, do inicjalizacji użyto elementuContentProvider
cykl życia przetwarzania w przeszłości, musisz zamiast tego wykonać te czynności.<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.lifecycle.ProcessLifecycleInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
(lub)
<!-- If you want to disable androidx.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
Zmiany interfejsu API
- Dodano interfejs API
Flow.flowWithLifecycle
, który za pomocą interfejsu APILifecycle.repeatOnLifecycle
przesyła wartości z przepływu nadrzędnego, gdy cykl życia jest co najmniej w określonym stanie. Jest to alternatywa dla nowego interfejsu APILifecycleOwner.addRepeatinJob
. (I0f4cd)
Poprawki błędów
- Od cyklu życia 2.3.1: reguła lintowania
NonNullableMutableLiveData
może teraz prawidłowo rozróżnienie zmiennych pól o różnej wartości null. (b/169249668)
Cykl życia Viewmodel Compose w wersji 1.0.0
Wersja 1.0.0-alpha07
16 czerwca 2021 r.
Usługa androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07
została zwolniona. Wersja 1.0.0-alfa07 zawiera te zatwierdzenia.
Zmiana w interfejsie API
viewModel()
zajmuje teraz: opcjonalnyViewModelStoreOwner
, który ułatwia pracę z właścicielami innymi niżLocalViewModelStoreOwner
. Możesz na przykład użyć funkcjiviewModel(navBackStackEntry)
, aby pobrać model widoku danych powiązany z konkretnym wykresem nawigacyjnym. (I2628d, b/188693123)
Wersja 1.0.0-alpha06
2 czerwca 2021 r.
Usługa androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06
została zwolniona. Wersja 1.0.0-alfa06 zawiera te zatwierdzenia.
Zaktualizowano, aby była zgodna z funkcją Compose w wersji 1.0.0-beta08
.
Wersja 1.0.0-alpha05
18 maja 2021 r.
Usługa androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05
została zwolniona. Wersja 1.0.0-alfa05 zawiera te zatwierdzenia.
Nowe funkcje
- Zaktualizowano, aby była zgodna z funkcją Compose w wersji
1.0.0-beta07
.
Poprawki błędów
- pliki AndroidManifest z komponentów ui-test-manifest oraz Narzędzie ui-tooling-data jest teraz zgodne z Androidem 12 (I6f9de, b/184718994)
Wersja 1.0.0-alpha04
7 kwietnia 2021 r.
Usługa androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04
została zwolniona. Wersja 1.0.0-alfa04 zawiera te zatwierdzenia.
Zmiany zależności
- Ta wersja zezwala na
androidx.hilt:hilt-navigation-compose
iandroidx.navigation:navigation-compose
aby zsynchronizować zależności międzyandroidx.compose.compiler:compiler:1.0.0-beta04
iandroidx.compose.runtime:runtime:1.0.0-beta04
. W wersji 1.0.0 kompilator i środowisko wykonawcze muszą być zgodne.
Wersja 1.0.0-alpha03
10 marca 2021 r.
Usługa androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha03
została zwolniona. Wersja 1.0.0-alfa03 zawiera te zatwierdzenia.
Zmiany interfejsu API
LocalViewModelStoreOwner.current
zwraca teraz błądViewModelStoreOwner
z dopuszczaniem wartości null, aby lepiej określić czyViewModelStoreOwner
jest dostępny w bieżącym kompozycji. Interfejsy API, które wymagająViewModelStoreOwner
, takiej jak jakoviewModel()
iNavHost
, nadal zgłaszaj wyjątek jeśliViewModelStoreOwner
nie jest ustawiony. (Idf39a)
Lifecycle-Viewmodel-Compose w wersji 1.0.0-alfa02,
24 lutego 2021 r.
Usługa androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02
została zwolniona. Wersja 1.0.0-alfa02 zawiera te zatwierdzenia.
Zmiany interfejsu API
LocalViewModelStoreOwner
ma teraz funkcjeprovides
, które mogą używane z zasadąCompositionLocalProvider
, zastępującasProvidableCompositionLocal()
API. (I45d24)
Lifecycle-Viewmodel-Compose w wersji 1.0.0-alfa01,
10 lutego 2021 r.
Usługa androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01
została zwolniona. Wersja 1.0.0-alfa01 zawiera te zatwierdzenia.
Nowe funkcje
- Element kompozycyjny
viewModel()
iLocalViewModelStoreOwner
zostały przeniesione zandroidx.compose.ui.viewinterop
do tego artefaktu w pakiecieandroidx.lifecycle.viewmodel.compose
. (I7a374)
Wersja 2.3.1
Wersja 2.3.1 cyklu życia
24 marca 2021 r.
Usługa androidx.lifecycle:lifecycle-*:2.3.1
została zwolniona. Wersja 2.3.1 zawiera te zatwierdzenia.
Poprawki błędów
- Reguła lintowania
NonNullableMutableLiveData
może teraz działać prawidłowo rozróżnienie zmiennych pól o różnej wartości null. (b/169249668)
Wersja 2.3.0
Wersja 2.3.0
10 lutego 2021 r.
Usługa androidx.lifecycle:lifecycle-*:2.3.0
została zwolniona. Wersja 2.3.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 2.2.0
- Obsługa klas nieobjętych papierami wartościowymi w
SavedStateHandle
:SavedStateHandle
obsługuje teraz leniwą serializację, umożliwiając wywołanie funkcjisetSavedStateProvider()
dla danego klucza. Zapewnia to obiektSavedStateProvider
, który otrzyma wywołanie zwrotne dosaveState()
, gdySavedStateHandle
zostanie poproszone o zapisanie stanu. Więcej informacji znajdziesz w artykule Zapisywanie klas niestanowiących się w pakiecie. - Egzekwowanie zachowań w ramach cyklu życia:
- LifecycleRegistry wymusza teraz
DESTROYED
jako stan terminala. LifecycleRegistry
sprawdza teraz, czy jej metody są wywoływane w wątku głównym. Było to wymagane w przypadku cykli życia działań, fragmentów itp. Dodanie obserwatorów w wątkach innych niż główne powodowało trudności w obsłudze awarii w czasie działania. W przypadku obiektówLifecycleRegistry
należących do Twoich komponentów możesz zrezygnować z kontroli przy użyciuLifecycleRegistry.createUnsafe(...)
. Musisz jednak zadbać o prawidłową synchronizację, gdy do obiektuLifecycleRegistry
uzyskiwany jest dostęp z różnych wątków.
- LifecycleRegistry wymusza teraz
- Asystenty stanu cyklu życia i zdarzeń: dodano statyczne metody pomocnicze
downFrom(State)
,downTo(State)
,upFrom(State)
,upTo(State)
doLifecycle.Event
w celu generowania wartościEvent
dla danego parametruState
i kierunku przejścia. Dodano metodęgetTargetState()
zawierającą parametrState
, na który zostanie przeniesiony cykl życia bezpośrednio po metodzieEvent
. withStateAtLeast
: dodano interfejsy APILifecycle.withStateAtLeast
, które oczekują na stan cyklu życia i synchronicznie uruchamiają niezawieszający blok kodu w momencie zmiany stanu, a następnie wznawiają pracę z odpowiednim wynikiem. Te interfejsy API różnią się od istniejących metodwhen*
, ponieważ nie zezwalają na uruchamianie kodu zawieszania ani nie wykorzystują niestandardowego dyspozytora. (Aosp/1326081).- Interfejsy API
ViewTree
: nowe interfejsy APIViewTreeLifecycleOwner.get(View)
iViewTreeViewModelStoreOwner.get(View)
umożliwiają pobranie odpowiednio instancjiLifecycleOwner
iViewModelStoreOwner
w przypadku instancjiView
. Aby to zrobić, musisz uaktualnić wersję Activity1.2.0
i Fragment1.3.0
oraz AppCompat w wersji 1.3.0-alpha01 lub nowszej. Rozszerzenia KotlinfindViewTreeLifecycleOwner
ifindViewTreeViewModelStoreOwner
są dostępne odpowiednio w języku:lifecycle-runtime-ktx
ilifecycle-viewmodel-ktx
. LiveData.observe()
Wycofanie rozszerzenia Kotlin: rozszerzenieLiveData.observe()
Kotlin niezbędne do korzystania ze składni lambda zostało wycofane, ponieważ nie jest konieczne podczas korzystania z narzędzia Kotlin 1.4.
Wersja 2.3.0-rc01
16 grudnia 2020 roku
Usługa androidx.lifecycle:lifecycle-*:2.3.0-rc01
została zwolniona. Wersja 2.3.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Metoda
keys()
SavedStateHandle
jest teraz spójna przed zapisaniem stanu i po nim – teraz uwzględnia klucze używane wcześniej przezsetSavedStateProvider()
, a także klucze używane zset()
igetLiveData()
. (Aosp/1517919, b/174713653)
Treści tłumaczone przez użytkowników zewnętrznych
- Interfejsy API do zawieszania współgrających z cyklem życia lepiej obsługują teraz wywołania
yield()
. Dzięki Nicklas Ansman Giertz! (Aosp/1430830, b/168777346)
Wersja 2.3.0-beta01
1 października 2020 roku
Usługa androidx.lifecycle:lifecycle-*:2.3.0-beta01
została zwolniona. Wersja 2.3.0-beta01 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Rozszerzenie
LiveData.observe()
Kotlin niezbędne do użycia składni lambda zostały wycofane, ponieważ nie jest konieczne w przypadku korzystania z Kotlin 1.4. (I40d3f)
Poprawki błędów
- Uaktualnij Androidax, by używał Kotlin 1.4 (Id6471, b/165307851, b/165300826)
Zmiany w dokumentacji
- Kreator
liveData
i dokumentyasLiveData()
zostały zaktualizowane, aby uwzględnić szczegółowe informacje na temat zmiany określonych wartości limitu czasu. (Aosp/1122324).
Wersja 2.3.0-alpha07
19 sierpnia 2020 r.
Usługa androidx.lifecycle:lifecycle-*:2.3.0-alpha07
została zwolniona. Wersja 2.3.0-alfa07 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował awarię w sprawdzaniu licencji
NullSafeMutableLiveData
. (Aosp/1395367).
Wersja 2.3.0-alfa06
22 lipca 2020 r.
Usługa androidx.lifecycle:lifecycle-*:2.3.0-alpha06
została zwolniona. Wersja 2.3.0-alfa06 zawiera te zatwierdzenia.
Nowe funkcje
- Do
Lifecycle.Event
dodano statyczne metody pomocniczedownFrom(State)
,downTo(State)
,upFrom(State)
,upTo(State)
w celu generowania obiektuEvent
dla danego elementuState
i kierunku przejścia. Dodano metodęgetTargetState()
zawierającą parametrState
, na który zostanie przeniesiony cykl życia bezpośrednio po metodzieEvent
. (I00887). - Dodano interfejsy API
Lifecycle.withStateAtLeast
, które oczekują na stan cyklu życia i synchronicznie uruchamiają niezawieszający blok kodu w punkcie zmiany stanu, a następnie są wznawiane z konkretnym wynikiem. Te interfejsy API różnią się od istniejących metodwhen*
, ponieważ nie zezwalają na uruchamianie kodu zawieszania ani nie wykorzystują niestandardowego dyspozytora. (Aosp/1326081).
Zmiany w działaniu
- LifecycleRegistry wymusza teraz
DESTROYED
jako stan terminala. (I00887). LifecycleRegistry
sprawdza teraz, czy jej metody są wywoływane w wątku głównym. Było to wymagane w przypadku cykli życia działań, fragmentów itp. Dodanie obserwatorów w wątkach innych niż główne powodowało trudności w obsłudze awarii w czasie działania. W przypadku obiektówLifecycleRegistry
należących do Twoich komponentów możesz zrezygnować z kontroli przy użyciuLifecycleRegistry.createUnsafe(...)
. Musisz jednak zadbać o prawidłową synchronizację, gdy dostęp do tego elementuLifecycleRegistry
jest realizowany z różnych wątków (Ie7280, b/137392809)
Poprawki błędów
- Naprawiono awarię w:
NullSafeMutableLiveData
. (b/159987480) - Naprawiono
ObsoleteLintCustomCheck
w przypadku testów Lint połączonych z pakietemlifecycle-livedata-core-ktx
(a konkretnieNullSafeMutableLiveData
). (b/158699265)
Wersja 2.3.0-alpha05
24 czerwca 2020 r.
Usługa androidx.lifecycle:lifecycle-*:2.3.0-alpha05
została zwolniona. Wersja 2.3.0-alfa05 zawiera te zatwierdzenia.
Poprawki błędów
LiveData
lepiej sprawdza się teraz w przypadku powtarzających się zgłoszeń, dzięki czemu unikniesz podwójnych połączeń z numeramionActive()
ionInactive()
. (b/157840298)- Rozwiązaliśmy problem, który powodował, że w Androidzie Studio 4.1 Canary 6 lub nowszym nie były uruchamiane testy Lint. (Aosp/1331903).
Wersja 2.3.0-alfa04
10 czerwca 2020 r.
Usługa androidx.lifecycle:lifecycle-*:2.3.0-alpha04
została zwolniona. Wersja 2.3.0-alfa04 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono awarię w sprawdzaniu licencji
NonNullableMutableLiveData
. (b/157294666) - Kontrola licencji
NonNullableMutableLiveData
obejmuje teraz znacznie więcej przypadków, w których wartośćnull
została ustawiona wMutableLiveData
z parametrem typu niepustego. (B/156002218)
Wersja 2.3.0-alfa03
20 maja 2020 r.
Zwolniono androidx.lifecycle:lifecycle-*:2.3.0-alpha03
. Wersja 2.3.0-alfa03 zawiera te zatwierdzenia.
Nowe funkcje
SavedStateHandle
obsługuje teraz leniwą serializację, umożliwiając wywołanie metodysetSavedStateProvider()
dla danego klucza. Zapewnia to wywołanieSavedStateProvider
, które otrzyma wywołanie zwrotne dosaveState()
, gdySavedStateHandle
poprosi o zapisanie stanu. (B/155106862)- Nowy interfejs API
ViewTreeViewModelStoreOwner.get(View)
umożliwia pobranie konteneraViewModelStoreOwner
zawierającego dane z instancjiView
. Aby to zrobić, musisz uaktualnić do wersji Activity1.2.0-alpha05
, Fragment1.3.0-alpha05
i AppCompat1.3.0-alpha01
. Do aplikacjilifecycle-viewmodel-ktx
dodano rozszerzenie KotlinfindViewModelStoreOwner()
. (Aosp/1295522)
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że testy licencji
MutableLiveData
opublikowane w cyklu życia2.3.0-alpha01
nie były publikowane wraz z artefaktemlifecycle-livedata-core-ktx
. (b/155323109)
Wersja 2.3.0-alfa02
29 kwietnia 2020 roku
Usługa androidx.lifecycle:lifecycle-*:2.3.0-alpha02
została zwolniona. Wersja 2.3.0-alfa02 zawiera te zatwierdzenia.
Zmiany interfejsu API
SavedStateViewModelFactory
umożliwia teraz przekazywanie do konstruktora wartości nullApplication
, co ułatwia obsługę zgłoszeń, w których nie są one łatwo dostępne i nie jest potrzebna obsługaAndroidViewModel
. (Aosp/1285740)
Poprawki błędów
- Zwiększona wydajność uruchamiania „na zimno” dzięki unikaniu niepowodzenia weryfikacji klasy na urządzeniach z interfejsem API w wersji 28 i starszych. (Aosp/1282118).
Wersja 2.3.0-alfa01
Marzec 4, 2020
Usługa androidx.lifecycle:lifecycle-*:2.3.0-alpha01
została zwolniona. Wersja 2.3.0-alfa01 zawiera te zatwierdzenia.
Nowe funkcje
- Nowy interfejs API
ViewTreeLifecycleOwner.get(View)
umożliwia pobranie konteneraLifecycleOwner
zawierającego dane z instancjiView
. Aby to zrobić, musisz uaktualnić Aktywność1.2.0-alpha01
i Fragment1.3.0-alpha01
. Rozszerzenie KotlinfindViewTreeLifecycleOwner
jest dostępne w języku:lifecycle-runtime-ktx
. (aosp/1182361, aosp/1182956) - Dodaliśmy nowe sprawdzanie lint, które ostrzegają przed ustawianiem wartości
null
dla elementuMutableLiveData
, który został zdefiniowany w Kotlin jako niepusty. Jest to dostępne, gdy używasz artefaktówlivedata-core-ktx
lublivedata-ktx
. (aosp/1154723, aosp/1159092) - Dostępny jest nowy artefakt
lifecycle-runtime-testing
, który udostępnia komponentTestLifecycleOwner
, który implementujeLifecycleOwner
i oferuje zmiennąLifecycle
bezpieczną w wątku. (Aosp/1242438).
Poprawki błędów.
- Artefakt
lifecycle-runtime
ma teraz unikalną nazwę pakietu. (Aosp/1187196).
Wersja 2.2.0
ViewModel-Savedstate w wersji 2.2.0
5 lutego 2020 r.
Usługa androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0
została zwolniona. Wersja 2.2.0 zawiera te zatwierdzenia.
Model widoku cyklu życia SavedState korzysta teraz z tej samej wersji co inne artefakty cyklu życia. Działanie funkcji 2.2.0
jest takie samo jak działanie 1.0.0
.
Wersja 2.2.0
Styczeń 22, 2020
Usługa androidx.lifecycle:lifecycle-*:2.2.0
została zwolniona. Wersja 2.2.0 zawiera te zatwierdzenia.
Ważne zmiany wprowadzone od wersji 2.1.0
- Integracja z cyklem życia Coroutine: nowy artefakt
lifecycle-runtime-ktx
dodaje integrację między współrzędnymi cyklu życia i kotlinami Kotlin.lifecycle-livedata-ktx
umożliwia teraz korzystanie z współrzędnych. Więcej informacji znajdziesz w artykule o używaniu współrzędnych Kotlin z komponentami architektury. - Wycofanie
ViewModelProviders.of()
: wersjaViewModelProviders.of()
została wycofana. Możesz przekazaćFragment
lubFragmentActivity
do nowego konstruktoraViewModelProvider(ViewModelStoreOwner)
, aby uzyskać tę samą funkcjonalność przy użyciu fragmentu1.2.0
. lifecycle-extensions
Wycofanie artefaktu: w związku z powyższym wycofaniemViewModelProviders.of()
ta wersja oznacza wycofanie ostatniego interfejsu API wlifecycle-extensions
i ten artefakt należy uznać za wycofany w całości. Zdecydowanie zalecamy, aby dobrać odpowiednie artefakty cyklu życia, których potrzebujesz (np.lifecycle-service
, jeśli używaszLifecycleService
ilifecycle-process
, jeśli używaszProcessLifecycleOwner
), a nielifecycle-extensions
, ponieważ w przyszłości nie ukaże się2.3.0
w wersjilifecycle-extensions
.- Procesor adnotacji przyrostowych Gradle: procesor adnotacji cyklu życia domyślnie działa przyrostowo.
Jeśli Twoja aplikacja jest napisana w języku programowania Java 8, możesz zamiast tego użyć
DefautLifecycleObserver
. a jeśli jest napisany w języku Java 7, więc możesz użyćLifecycleEventObserver
.
Wersja 2.2.0-rc03
4 grudnia 2019
Usługa androidx.lifecycle:lifecycle-*:2.2.0-rc03
została zwolniona. Wersja 2.2.0-rc03 zawiera te zatwierdzenia.
Poprawki błędów.
- Rozwiązaliśmy problem, który powodował, że próbkowana wersja
ViewModel
była zapisana wViewModelStore
i wysyłana później z użyciem domyślnych ustawień fabrycznych. - Popraw użycie funkcji
Dispatchers.Main.immediate
w metodzielaunchWhenCreated
i podobnych metodach, aby była ona wywoływana synchronicznie podczas odpowiedniego zdarzenia cyklu życia. (Aosp/1156203).
Treści publikowane przez użytkowników zewnętrznych
- Dziękujemy Andersowi Järlebergowi za wprowadzenie poprawki. (Aosp/1156203).
- Dziękujemy Wsiewołodowi Tołstopitowowi z firmy Jetbrains za sprawdzenie wdrożenia implementacji wbudowanej.
Zmiany zależności
- Rozszerzenia cyklu życia opierają się teraz na fragmencie
1.2.0-rc03
.
Wersja 2.2.0-rc02
7 listopada 2019 r.
Usługa androidx.lifecycle:lifecycle-*:2.2.0-rc02
została zwolniona. Wersja 2.2.0-rc02 zawiera te zatwierdzenia.
Poprawki błędów.
- Naprawiliśmy błąd w konfiguracji biblioteki ProGuard, który występował na urządzeniach z interfejsem API w wersji 28 lub nowszej, jeśli docelowy interfejs API jest niższy niż 29. (b/142778206)
Wersja 2.2.0-rc01
23 października 2019 r.
Usługa androidx.lifecycle:lifecycle-*:2.2.0-rc01
została zwolniona. Wersja 2.2.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów.
- Rozwiązaliśmy problem, który powodował, że z powodu użycia metody
Dispatchers.Main
zamiastDispatchers.Main.immediate
metodylaunchWhenCreated
i powiązane z nią metody uruchamiały się o jedną klatkę później niż powiązana metoda cyklu życia. (Aosp/1145596)
Treści publikowane przez użytkowników zewnętrznych
- Dziękujemy Nicklasowi Ansmanowi za wprowadzenie poprawki. (Aosp/1145596)
Wersja 2.2.0-beta01
9 października 2019 r.
Usługa androidx.lifecycle:lifecycle-*:2.2.0-beta01
została zwolniona. Wersja 2.2.0-beta01 zawiera te zatwierdzenia.
Poprawki błędów.
- Naprawiliśmy regresję wprowadzoną w cyklu życia 2.2.0-alfa05 w kolejności:
ProcessLifecycleOwner
iLifecycleOwner
aktywności na urządzeniach z Androidem 10. (Aosp/1128132). - Naprawiliśmy regresję wprowadzoną w cyklu życia
2.2.0-alpha05
, która powodowała wyświetlenie błęduNullPointerException
w przypadku używania wersji2.0.0
lub2.1.0
elementulifecycle-process
. (B/141536990)
Wersja 2.2.0-alpha05
18 września 2019 r.
Usługa androidx.lifecycle:lifecycle-*:2.2.0-alpha05
została zwolniona. Wersja 2.2.0-alfa05 zawiera te zatwierdzenia.
Poprawki błędów.
- Naprawiono warunek wyścigu w kreatorze danych aktywnych współrzędnych. b/140249349
Wersja 2.2.0-alfa04
5 września 2019 r.
Usługa androidx.lifecycle:lifecycle-*:2.2.0-alpha04
została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
lifecycleScope
,whenCreated
,whenStarted
,whenResumed
,viewModelScope
i podstawowa implementacjaliveData
używają terazDispatchers.Main.immediate
zamiastDispatchers.Main
. (b/139740492)
Treści publikowane przez użytkowników zewnętrznych
- Dziękujemy Nicklas Ansman za przejście na
Dispatchers.Main.immediate
. (Aosp/1106073).
Wersja 2.2.0-alfa03
7 sierpnia 2019 r.
Usługa androidx.lifecycle:lifecycle-*:2.2.0-alpha03
została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
- Implementacje funkcji
ViewModelStoreOwner
mogą teraz opcjonalnie implementować zasadęHasDefaultViewModelProviderFactory
, aby utworzyć domyślną wartośćViewModelProvider.Factory
. Zrobiliśmy to w przypadku aktywności1.1.0-alpha02
, fragmentu1.2.0-alpha02
i nawigacji2.2.0-alpha01
. (Aosp/1092370, b/135716331)
Zmiany interfejsu API
- Usługa
ViewModelProviders.of()
została wycofana. Aby uzyskać tę samą funkcjonalność, możesz przekazaćFragment
lubFragmentActivity
do nowego konstruktoraViewModelProvider(ViewModelStoreOwner)
. (Aosp/1009889).
Wersja 2.2.0-alfa02
2 lipca 2019 r.
Usługa androidx.lifecycle:*:2.2.0-alpha02
została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Zmiany interfejsu API
- Zastąpiono wartość
LiveDataScope.initialValue
wartościąLiveDataScope.latestValue
, która będzie śledzić aktualnie emitowaną wartość blokuliveData
. - Do konstruktora
liveData
dodano nowe przeciążenie, które otrzymuje parametrtimeout
jako typDuration
Wersja 2.2.0-alpha01
7 maja 2019 r.
Usługa androidx.lifecycle:*:2.2.0-alpha01
została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
- W tej wersji dodaliśmy nowe funkcje, które uwzględniają połączenia Kotlin w cyklu życia i LiveData. Szczegółową dokumentację na ten temat znajdziesz tutaj.
ViewModel-SavedState w wersji 1.0.0
Wersja 1.0.0
Styczeń 22, 2020
Usługa androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0
została zwolniona. Wersja 1.0.0 zawiera te zatwierdzenia.
Ważne funkcje w wersji 1.0.0
- Dodano nową klasę SavedStateHandle. Dzięki niemu Twoje zajęcia w
ViewModel
będą mogły korzystać z zapisanych elementów i w nich współtworzyć. Ten obiekt można odebrać w konstruktorze klasyViewModel
i fabryk domyślnie udostępnianych przez fragmenty kodu. AppCompatActivity wstrzykiujeSavedStateHandle
automatycznie. - Dodano AbstractSavedStateViewModelFactory. Umożliwia tworzenie fabryk niestandardowych na urządzeniu
ViewModel
i przyznawanie im dostępu do usługiSavedStateHandle
.
ViewModel-Savedstate w wersji 1.0.0-rc03
4 grudnia 2019
Usługa androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03
została zwolniona. Wersja 1.0.0-rc03 zawiera te zatwierdzenia.
Zmiany zależności
- Wartość SavedState modelu cyklu życia zależy teraz od cyklu życia
2.2.0-rc03
.
Viewmodel-Savedstate, wersja 1.0.0-rc02
7 listopada 2019 r.
Usługa androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc02
została zwolniona. Wersja 1.0.0-rc02 zawiera te zatwierdzenia.
Zmiany zależności
- Teraz zależy od cyklu życia
2.2.0-rc02
.
ViewModel-SavedState w wersji 1.0.0-rc01
23 października 2019 r.
Pakiet androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01
został zwolniony bez zmian w stosunku do wersji 1.0.0-beta01
. Wersja 1.0.0-rc01 zawiera te zatwierdzenia.
ViewModel-Savedstate, wersja 1.0.0-beta01
9 października 2019 r.
Usługa androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01
została zwolniona. Wersja 1.0.0-beta01 zawiera te zatwierdzenia.
Poprawki błędów.
- Rozwiązaliśmy problem, który powodował, że pierwszy dostęp do modelu widoku SavedState w interfejsie
Activity.onActivityResult()
prowadził doIllegalStateException
. (B/139093676) - Naprawiono błąd
IllegalStateException
w przypadku użycia funkcjiAbstractSavedStateViewModelFactory
. (b/141225984)
ViewModel-SavedState w wersji 1.0.0-alfa05
18 września 2019 r.
Usługa androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha05
została zwolniona. Wersja 1.0.0-alfa05 zawiera te zatwierdzenia.
Zmiany interfejsu API
SavedStateViewModelFactory
nie obejmuje już modeluAbstractSavedStateViewModelFactory
iSavedStateHandle
jest tworzony tylko dla modeli widoków, które go zażądały (aosp/1113593)
ViewModel-SavedState w wersji 1.0.0-alfa03
7 sierpnia 2019 r.
Usługa androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03
została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Zmiany najważniejsze
lifecycle-viewmodel-savedstate
nie jest już zależny odfragment
, a powiązane konstruktorySavedStateViewModelFactory(Fragment)
iSavedStateViewModelFactory(FragmentActivity)
zostały usunięte. Zamiast tego domyślnym ustawieniem fabrycznym dla aktywności1.1.0-alpha02
, fragmentu1.2.0-alpha02
i nawigacji2.2.0-alpha01
jestSavedStateViewModelFactory
. (b/135716331)
ViewModel-SavedState w wersji 1.0.0-alfa02
2 lipca 2019 r.
Usługa androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha02
została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
- Dodano przeciążenie
SavedStateHandle.getLiveData()
, które akceptuje wartość domyślną.
Zmiany interfejsu API
- Nazwa
SavedStateVMFactory
została zmieniona naSavedStateViewModelFactory
. - Nazwa
AbstractSavedStateVMFactory
została zmieniona naAbstractSavedStateViewModelFactory
.
ViewModel-Savedstate, wersja 1.0.0-alfa01
13 marca 2019 r.
Usługa androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01
została zwolniona. Pełny dziennik zatwierdzenia tej pierwszej wersji znajdziesz tutaj.
Nowe funkcje
- Teraz
ViewModels
może współtworzyć zapisać stan. Aby to zrobić, użyj nowo wprowadzonej fabrykiSavedStateVMFactory
modelu widoku, a model ViewModel powinien mieć konstruktor, który odbiera obiektSavedStateHandle
jako parametr.
Wersja 2.1.0
Ważne zmiany wprowadzone od wersji 2.0.0
- Dodano
LifecycleEventObserver
dla przypadków, gdy potrzebny jest strumień zdarzeń cyklu życia. Jest to publiczny interfejs API, a nie ukryta klasaGenericLifecycleObserver
. - Dodano rozszerzenia ktx w przypadku metod
LiveData.observe
iTransformations.*
metod. - Dodano funkcję
Transformations.distinctUntilChanged
, która tworzy nowy obiekt LiveData, który nie emituje wartości, dopóki wartość źródłaLiveData
nie zostanie zmieniona. - Dodano obsługę współrzędnych w modelach ViewModel przez dodanie właściwości rozszerzenia
ViewModel.viewModelScope
.
Wersja 2.1.0
5 września 2019 r.
Usługa androidx.lifecycle:lifecycle-*:2.1.0
została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Wersja 2.1.0-rc01
2 lipca 2019 r.
Pakiet androidx.lifecycle:*:2.1.0-rc01
został zwolniony bez zmian w stosunku do wersji androidx.lifecycle:*:2.1.0-beta01
. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Wersja 2.1.0-beta01
7 maja 2019 r.
Usługa androidx.lifecycle:*:2.1.0-beta01
została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
- Cykle życia są obecnie w wersji beta: interfejs API wprowadzony w poprzednich wersjach alfa, w tym funkcje rozszerzeń
liveData
na potrzeby przekształceń i obserwacji, inicjowanieViewModel
z przekazywaniem usługi i inne, utrzymują się i nie ulegną zmianie.
Wersja 2.1.0-alfa04
3 kwietnia 2019 r.
Usługa androidx.lifecycle:*:2.1.0-alpha04
została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Zmiany interfejsu API
- Ważna zmiana: bazowy interfejs API, z którego korzystają
by viewModels()
iby activityViewModels()
, został zmieniony tak, aby obsługiwał bezpośrednioViewModelStore
, a nie tylkoViewModelStoreOwner
. (Aosp/932932)
Wersja 2.1.0-alfa03
13 marca 2019 r.
Usługa androidx.lifecycle:*:2.1.0-alpha03
została zwolniona. Pełną listę zatwierdzeń zawartych w tej wersji znajdziesz tutaj.
Zmiany interfejsu API
- Pole „
ViewModelProvider.KeyedFactory
” zostało usunięte. Drugi interfejs opróczViewModelProvider.Factory
nie działał dobrze, ponieważ pojawiły się nowe funkcje, takie jak przekazywanie właściwości w Kotlinby viewmodels {}
. (Aosp/914133)
Wersja 2.1.0-alfa02
30 stycznia 2019 r.
Usługa androidx.lifecycle 2.1.0-alpha02
została zwolniona.
Zmiany interfejsu API
LifecycleRegistry
zawiera teraz metodęsetCurrentState()
, która zastępuje wycofaną metodęsetState()
. (Aosp/880715)
Poprawki błędów.
- Rozwiązaliśmy problem, który powodował awarię przykładowych instancji
ViewModel
, gdy zawierałaViewModelStore
. b/122273087
Wersja 2.1.0-alpha01
17 grudnia 2018 r.
Usługa androidx.lifecycle 2.1.0-alpha01
została zwolniona.
Nowe funkcje
- Dodano
LifecycleEventObserver
dla przypadków, gdy potrzebny jest strumień zdarzeń cyklu życia. Jest to publiczny interfejs API zamiast ukrytej klasyGenericLifecycleObserver
. - Dodano rozszerzenia ktx w przypadku metod
LiveData.observe
iTransformations.*
metod. - Dodano metodę
Transformations.distinctUntilChanged
. Tworzy nowy obiektLiveData
, który nie emituje wartości, dopóki źródłowa wartość LiveData nie zostanie zmieniona. - Obsługa Corutyny w modelach ViewModels: dodano właściwość rozszerzenia
ViewModel.viewModelScope
. - Dodano
ViewModelProvider.KeyedFactory
, fabrykę dla modeli ViewModel, która odbierakey
iClass
w metodziecreate
.
Wersja 2.0.0
Wersja 2.0.0
21 września 2018 r.
Udostępniono cykl życia 2.0.0
z 1 poprawką błędu z modelu 2.0.0-rc01
w modelu ViewModel.
Poprawki błędów
- Naprawiono regułę Propagarda ViewModel, która nieprawidłowo usuwała konstruktory b/112230489
Wersja 2.0.0-beta01
2 lipca 2018 r.
Poprawki błędów
- Poprawiono regułę LifecycleObserver ProGuard, aby zachowywać tylko implementacje, a nie podinterfejsy b/71389427
- Poprawiono reguły ProGuard usługi ViewModel umożliwiające zaciemnianie i zmniejszanie
Wersje starsze niż AndroidX
W przypadku wersji cyklu życia starszych niż Android X uwzględnij te zależności:
dependencies {
def lifecycle_version = "1.1.1"
// ViewModel and LiveData
implementation "android.arch.lifecycle:extensions:$lifecycle_version"
// alternatively - just ViewModel
implementation "android.arch.lifecycle:viewmodel:$lifecycle_version" // For Kotlin use viewmodel-ktx
// alternatively - just LiveData
implementation "android.arch.lifecycle:livedata:$lifecycle_version"
// alternatively - Lifecycles only (no ViewModel or LiveData).
// Support library depends on this lightweight import
implementation "android.arch.lifecycle:runtime:$lifecycle_version"
annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version" // For Kotlin use kapt instead of annotationProcessor
// alternately - if using Java8, use the following instead of compiler
implementation "android.arch.lifecycle:common-java8:$lifecycle_version"
// optional - ReactiveStreams support for LiveData
implementation "android.arch.lifecycle:reactivestreams:$lifecycle_version"
// optional - Test helpers for LiveData
testImplementation "android.arch.core:core-testing:$lifecycle_version"
}
Wersja 1.1.1
21 marca 2018 r.
Tylko jedna mała zmiana: element android.arch.core.util.Function
został przeniesiony z arch:runtime
do arch:common
. Dzięki temu nie wymaga żadnego czasu działania, np. w sekcji paging:common
poniżej.
lifecycle:common
to zależność typu lifecycle:runtime
, więc ta zmiana nie wpływa bezpośrednio na lifecycle:runtime
, a tylko na moduły zależne bezpośrednio od lifecycle:common
, podobnie jak ma to miejsce w przypadku stronicowania.
Wersja 1.1.0
22 stycznia 2018 r.
Zmiany opakowania
Dostępne są teraz nowe, znacznie mniejsze zależności:
android.arch.lifecycle:livedata:1.1.0
android.arch.lifecycle:viewmodel:1.1.0
Zmiany interfejsu API
- Wycofane
LifecycleActivity
iLifecycleFragment
zostały usunięte – korzystajFragmentActivity
,AppCompatActivity
lub wspierajFragment
. - Dodano adnotacje (
@NonNull
) do folderówViewModelProviders
iViewModelStores
- Konstruktor
ViewModelProviders
został wycofany – użyj jego metod statycznych bezpośrednio - Usługa
ViewModelProviders.DefaultFactory
została wycofana – używaj wersjiViewModelProvider.AndroidViewModelFactory
- Dodano statyczną metodę
ViewModelProvider.AndroidViewModelFactory.getInstance(Application)
do pobierania statycznyFactory
odpowiedni do tworzenia instancjiViewModel
iAndroidViewModel
.