Lebenszyklus
In dieser Tabelle sind alle Artefakte in der Gruppe androidx.lifecycle
aufgeführt.
Artefakt | Stabile Version | Release Candidate | Beta-Ausgabe | Alphaversion |
---|---|---|---|---|
lifecycle-* | 2.8.7 | - | - | 2.9.0-alpha08 |
lifecycle-viewmodel-compose | 2.8.7 | - | - | 2.9.0-alpha08 |
Abhängigkeiten deklarieren
Wenn Sie eine Abhängigkeit von Lifecycle hinzufügen möchten, müssen Sie Ihrem Projekt das Google Maven-Repository hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.
Fügen Sie der Datei build.gradle
für Ihre App oder Ihr Modul die Abhängigkeiten für die erforderlichen Artefakte hinzu:
Kotlin
Groovy
dependencies { def lifecycle_version = "2.8.7" def arch_version = "2.2.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" // ViewModel utilities for Compose implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version" // LiveData implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version" // Lifecycles only (without ViewModel or LiveData) implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version" // Lifecycle utilities for Compose implementation "androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version" // Saved state module for ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version" // Annotation processor kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // alternately - if using Java8, use the following instead of lifecycle-compiler implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" // optional - helpers for implementing LifecycleOwner in a Service implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version" // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" // optional - ReactiveStreams support for LiveData implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version" // optional - Test helpers for LiveData testImplementation "androidx.arch.core:core-testing:$arch_version" // optional - Test helpers for Lifecycle runtime testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version" }
Kotlin
dependencies { val lifecycle_version = "2.8.7" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version") // ViewModel utilities for Compose implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version") // Lifecycle utilities for Compose implementation("androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // Annotation processor kapt("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation ("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
Java
Groovy
dependencies { def lifecycle_version = "2.8.7" def arch_version = "2.2.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version" // LiveData implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version" // Lifecycles only (without ViewModel or LiveData) implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version" // Saved state module for ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version" // Annotation processor annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // alternately - if using Java8, use the following instead of lifecycle-compiler implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" // optional - helpers for implementing LifecycleOwner in a Service implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version" // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" // optional - ReactiveStreams support for LiveData implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version" // optional - Test helpers for LiveData testImplementation "androidx.arch.core:core-testing:$arch_version" // optional - Test helpers for Lifecycle runtime testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version" }
Kotlin
dependencies { val lifecycle_version = "2.8.7" val arch_version = "2.2.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // Annotation processor annotationProcessor("androidx.lifecycle:lifecycle-compiler:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:$arch_version") // optional - Test helpers for Lifecycle runtime testImplementation("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") }
Weitere Informationen zu Abhängigkeiten finden Sie unter Build-Abhängigkeiten hinzufügen.
Feedback
Ihr Feedback hilft uns, Jetpack zu verbessern. Bitte teilen Sie uns mit, wenn Sie neue Probleme feststellen oder Ideen zur Verbesserung dieser Bibliothek haben. Sehen Sie sich die vorhandenen Probleme in dieser Bibliothek an, bevor Sie ein neues erstellen. Sie können einem vorhandenen Problem Ihre Stimme geben, indem Sie auf die Schaltfläche mit dem Stern klicken.
Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.
Version 2.9
Version 2.9.0-alpha08
11. Dezember 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha08
wird veröffentlicht. Version 2.9.0-alpha08 enthält diese Commits.
Neue Funktionen
- Fügen Sie
ViewModelScenario.recreate
hinzu, um einen Systemprozessabsturz zu simulieren, bei dem die zu testendeViewModel
und alle zugehörigen Komponenten neu erstellt werden. (Id6a69, b/381063087) LifecycleOwner
- undViewModelStoreOwner
-Instanzen, die über die jeweiligenfindViewTree
APIs abgerufen werden, können jetzt über nicht übereinstimmende übergeordnete Elemente einer Ansicht aufgelöst werden, z. B. über einViewOverlay
. Weitere Informationen zu überlappenden Ansichtsübergeordneten finden Sie in den Releasehinweisen von Core oder in der Dokumentation unterViewTree.setViewTreeDisjointParent
. (I800f4)
API-Änderungen
- Namen und Paketorganisation an
SavedStateRegistryOwnerDelegate
(I8c135, b/376026744) anpassen
Fehlerkorrekturen
- Diese Bibliothek verwendet jetzt JSpecify-Null-Anmerkungen, die sich auf den Typ beziehen. Kotlin-Entwickler sollten die folgenden Compilerargumente verwenden, um die korrekte Verwendung zu erzwingen:
-Xjspecify-annotations=strict, -Xtype-enhancement-improvements-strict-mode
(Ie4340, b/326456246) - Dokumentieren Sie die
ViewModel.onCleared
-Löschsequenz. (I586c7, b/363984116)
Version 2.9.0-alpha07
13. November 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha07
wird veröffentlicht. Version 2.9.0-alpha07 enthält diese Commits.
Kompatibilität von Kotlin Multiplatform
- Der Lebenszyklus
ViewModel SavedState
ist jetzt KMP-kompatibel. So können SieSavedStateHandle
in gemeinsamen Code verwenden. (Ib6394, b/334076622)
Unterstützung für KotlinX-Serialisierung
Mit der Unterstützung der KotlinX-Serialisierung, die in SavedState
1.3.0-alpha05
hinzugefügt wurde, haben wirsaved
eingeführt, einen Lazy-Property-Delegierten, mit dem sich@Serializable
-Klassen ganz einfach in einerSavedStateHandle
speichern und diese Klassen nach dem Beenden und Neustarten des Prozesses automatisch wiederherstellen lassen. Hinweis: Dersaved
-Delegierte ist lausig und ruft dieinit
-Lambda-Funktion nicht auf und speichert nichts in derSavedStateHandle
, bis darauf zugegriffen wird. (I47a88, b/376026744)@Serializable data class Person(val firstName: String, val lastName: String) class MyViewModel(handle: SavedStateHandle) : ViewModel() { var person by handle.saved { Person("John", "Doe") } fun onPersonChanged(person: Person) { this.person = person } }
API-Änderungen
- Fügen Sie
getMutableStateFlow
zuSavedStateHandle
hinzu, umMutableStateFlow
zu erhalten. Diese neue Funktion ist exklusiv für Schlüssel und kann nicht mitgetLiveData
verwendet werden. Wenn Sie versuchen, beide zu verwenden, um auf denselben Status zuzugreifen, wird eine Ausnahme ausgelöst. (I04a4f, b/375408415)
Version 2.9.0-alpha06
30. Oktober 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha06
wird veröffentlicht. Version 2.9.0-alpha06 enthält diese Commits.
Verhaltensänderungen
- Der Status
Lifecycle.DESTROYED
ist ein Endstatus. Jeder Versuch, eineLifecycle
von diesem Status in einen anderen Status zu verschieben, führt jetzt zu einerIllegalStateException
. (I116c4, b/370577987) SavedStateHandle
enthält keineSavedStateProvider.saveState()
mehr, bei denen die zurückgegebeneBundle
leer ist. (I910b5, b/370577987)
Fehlerkorrekturen
Lifecycle.eventFlow
wird jetzt korrekt abgeschlossen, wennLifecycle
=DESTROYED
ist (I293b2, b/374043130)
Version 2.9.0-alpha05
16. Oktober 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha05
wird ohne nennenswerte Änderungen veröffentlicht. Version 2.9.0-alpha05 enthält diese Commits.
Version 2.9.0-alpha04
2. Oktober 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha04
wird veröffentlicht. Version 2.9.0-alpha04 enthält diese Commits.
Kotlin Multiplatform
- Das
lifecycle-viewmodel-savedstate
-Modul ist jetzt KMP-kompatibel, damit APIs wieSavedStateHandle
in einem zukünftigen Release im Common Source Set verfügbar gemacht werden können. (I503ed, I48764, b/334076622)
Version 2.9.0-alpha03
18. September 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha03
wird veröffentlicht. Version 2.9.0-alpha03 enthält diese Commits.
Fehlerkorrekturen
- Lifecycle
2.8.6
: Der Lint-FehlerNullSafeMutableLiveData
wurde verbessert, um die Unterstützung für Smartcasts zu optimieren und Fehlalarme zu vermeiden. (85fed6, b/181042665)
Abhängigkeitsupdates
- Von Lifecycle
2.8.6
: Lifecycle Runtime Compose hängt jetzt von Compose Runtime1.7.1
ab - Die Lebenszykluslaufzeit hängt jetzt von ProfileInstaller
1.4.0
ab.
Version 2.9.0-alpha02
4. September 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha02
wird veröffentlicht. Version 2.9.0-alpha02 enthält diese Commits.
Fehlerkorrekturen
- Unter Lebenszyklus
2.8.5
: Aktualisieren Sie dieandroidx.lifecycle.ReportFragment
ProGuard-Regeln, um die Verschleierung zuzulassen . (ff898e1)
Externer Beitrag
- Verschieben Sie
androidx.compose.ui.platform.LocalLifecycleOwner
in den gemeinsamen Quellsatz (KMP). Vielen Dank an Ivan Matkov von JetBrains für den Beitrag. (8cd5d03) - Lebenszyklus
2.8.5
: Der Erweiterungsdelegat „SavedStateHandle.saveable“ unterstützt jetzt Nullwerte. Vielen Dank an Roman Kalukiewicz für den Beitrag. (0d78ea6)
Version 2.9.0-alpha01
7. August 2024
androidx.lifecycle:lifecycle-*:2.9.0-alpha01
wird veröffentlicht. Version 2.9.0-alpha01 enthält diese Commits.
Kotlin Multiplatform
lifecycle-testing
ist jetzt KMP-kompatibel. (Iea41e)- Unterstützung für
linuxArm64
-Kotlin-Multiplatform-Ziel hinzugefügt (I139d3, b/338268719)
Neue Funktionen
- Es ist ein neues
androidx.lifecycle:lifecycle-viewmodel-testing
-KMP-Artefakt verfügbar, das eineViewModelScenario
-Klasse zum Testen von ViewModels im Isolationsmodus bietet. Es wirdonCleared
(alle Plattformen) undSavedStateHandle
(nur Android) unterstützt. (337f68d, c9b3409, 9799a95c, b/264602919) - Das Erstellen einer
ViewModel
mitViewModelProvider
ist jetzt threadsicher.@MainThread
-Anmerkungen wurden entfernt. (Ifd978, b/237006831)
API-Änderungen
- Fügen Sie die Factory-Funktion
CreationExtras.Key()
hinzu, um das Erstellen anonymerCreationExtras.Key
-Objekte zu vereinfachen. (I970ee) CreationExtras
enthält jetzt map-ähnliche Operatorüberladungen, die eine idiomatische Manipulation von Inhalten in Kotlin ermöglichen. Sie ermöglicht die Verwendung vonin
,+=
und+
mitCreationExtras
. (Ib4353)CreationExtras
implementiert jetzt die Methodenequals
,hashCode
undtoString
. (Ib4353)NewInstanceFactory
ist jetzt für JVM-Desktop- und Android-Ziele verfügbar. (d3d0892)- Inline-Erweiterungseigenschaft, um die zugrunde liegende Anwendung in der Kotlin-Version 2.0 (I39df2) sicher freizugeben
Fehlerkorrekturen
- Die manuelle Kennzeichnung des Zugriffs auf neue Plattform-APIs wurde entfernt, da dies bei Verwendung von R8 mit AGP 7.3 oder höher (z.B. R8 Version 3.3) und für alle Builds bei Verwendung von AGP 8.1 oder höher (z.B. D8 Version 8.1) automatisch über die API-Modellierung erfolgt. Kunden, die AGP nicht verwenden, wird empfohlen, auf D8 Version 8.1 oder höher zu aktualisieren. Weitere Details findest du in diesem Artikel. (If6b4c, b/345472586)
Version 2.8
Version 2.8.7
30. Oktober 2024
androidx.lifecycle:lifecycle-*:2.8.7
wird veröffentlicht. Version 2.8.7 enthält diese Commits.
API-Änderungen
androidx.compose.ui.platform.LocalLifecycleOwner
ist jetzt im Common Source Set (KMP) verfügbar. (6a3f5b3)lifecycle-runtime-compose
:desktop
-Artefakte wurden entfernt und-jvmStubs
- und-linuxx64Stubs
-Artefakte hinzugefügt. Keines dieser Ziele ist zur Verwendung vorgesehen. Sie dienen als Platzhalter für die Arbeit mit Jetbrains Compose. (6a3f5b3)
Version 2.8.6
18. September 2024
androidx.lifecycle:lifecycle-*:2.8.6
wird veröffentlicht. Version 2.8.6 enthält diese Commits.
Fehlerkorrekturen
- Der Lint-Fehler
NullSafeMutableLiveData
wurde verbessert, um die Unterstützung für intelligente Übergaben zu verbessern und Fehlalarme zu vermeiden. (85fed6, b/181042665)
Abhängigkeitsupdates
- Lifecycle Runtime Compose ist jetzt von Compose Runtime
1.7.1
abhängig
Version 2.8.5
4. September 2024
androidx.lifecycle:lifecycle-*:2.8.5
wird veröffentlicht. Version 2.8.5 enthält diese Commits.
Fehlerkorrekturen
- Aktualisieren Sie die
androidx.lifecycle.ReportFragment
ProGuard-Regeln, um die Verschleierung zuzulassen . (ff898e1)
Externer Beitrag
- Der
SavedStateHandle.saveable
-Erweiterungsdelegat unterstützt jetzt nullwertige Werte. Vielen Dank an Roman Kalukiewicz für den Beitrag. (0d78ea6)
Version 2.8.4
24. Juli 2024
androidx.lifecycle:lifecycle-*:2.8.4
wird veröffentlicht. Version 2.8.4 enthält diese Commits.
Fehlerkorrekturen
LiveData.asFlow()
verarbeitet jetzt korrekt Fälle, in denen der zurückgegebene Ablauf sofort abgeschlossen wird, nachdem ein Wert empfangen wurde, der bereits auf derLiveData
festgelegt wurde (z. B. bei Verwendung vontake(1)
). (I9c566)- Der Abschluss von
Lifecycle*Effect
ist jetzt idempotent. WennonStopOrDispose
aufgrund eines Lifecycle-Stopps aufgerufen wurde, wird er bei der Entsorgung nicht noch einmal aufgerufen, es sei denn, der Lifecycle kehrt wieder zuSTARTED
zurück. (I5f607, b/352364595)
Version 2.8.3
1. Juli 2024
androidx.lifecycle:lifecycle-*:2.8.3
wird veröffentlicht. Version 2.8.3 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem mit der Abwärtskompatibilität von Lifecycle 2.8 mit Compose 1.6.0 und niedriger bei der Verwendung von Code-Shrinking wurde behoben. (aosp/3133056, b/346808608)
Version 2.8.2
12. Juni 2024
androidx.lifecycle:lifecycle-*:2.8.2
wird veröffentlicht. Version 2.8.2 enthält diese Commits.
Fehlerkorrekturen
CompositionLocal LocalLifecycleOwner not present
Fehler bei der Verwendung von Lifecycle 2.8.X mit Compose 1.6.X oder niedriger behoben. Sie können Lifecycle 2.8.2 jetzt mit jeder Version von Compose verwenden, ohne dass Sie Umwege gehen müssen. (aosp/3105647, b/336842920)ViewModelProvider
stürzt nicht mehr ab, wenn frühere Versionen voncompileOnly
-Lebenszyklusabhängigkeiten mit Versionen 2.8 und höher kombiniert werden. Dadurch werden Probleme mit Bibliotheken wie LeakCanary behoben. (I80383, b/341792251)
Version 2.8.1
29. Mai 2024
androidx.lifecycle:lifecycle-*:2.8.1
wird veröffentlicht. Version 2.8.1 enthält diese Commits.
Fehlerkorrekturen
lifecycle-viewmodel-compose
hat jetzt nur noch eine gemeinsame Abhängigkeit voncompose-runtime
. Die gemeinsame Abhängigkeit voncompose-ui
wurde entfernt. Das Android-Artefakt behält aus Gründen der Kompatibilität seinecompose-ui
bei. (aosp/3079334, b/339562627)- Bei der
saveable
-Integration vonViewModel
mithilfe von Property-Delegierten wird jetzt der Klassenname als Teil des automatisch generierten Schlüssels verwendet. So werden Konflikte vermieden, wenn mehrere Klassen dieselbeSavedStateHandle
verwenden. (aosp/3063463)
Version 2.8.0
14. Mai 2024
androidx.lifecycle:lifecycle-*:2.8.0
wird veröffentlicht. Version 2.8.0 enthält diese Commits.
Wichtige Änderungen seit Version 2.7.0
LocalLifecycleOwner
wurde von der Compose-Benutzeroberfläche zulifecycle-runtime-compose
verschoben, damit die Compose-basierten Hilfs-APIs auch außerhalb der Compose-Benutzeroberfläche verwendet werden können.- Das
lifecycle-runtime-compose
-Artefakt enthält jetzt diedropUnlessResumed
- unddropUnlessStarted
-APIs, mit denen Sie Klicks oder andere Ereignisse aufzeichnen können, die auch nach dem Absinken desLifecycleOwner
unter den angegebenenLifecycle.State
auftreten. Dies kann beispielsweise mit Navigation Compose verwendet werden, um Klickereignisse zu vermeiden, nachdem der Übergang zu einem anderen Bildschirm bereits begonnen hat:onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
ViewModel.viewModelScope
ist jetzt ein überschreibbarer Konstruktorparameter, mit dem Sie Ihren eigenen Dispatcher undSupervisorJob()
einschleusen oder den Standardwert mithilfe der inrunTest
verfügbarenbackgroundScope
überschreiben können. (I2817c, b/264598574)class MyViewModel( // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob() ) : ViewModel(viewModelScope) { // Use viewModelScope as before, without any code changes } // Allows overriding the viewModelScope in a test fun Test() = runTest { val viewModel = MyViewModel(backgroundScope) }
ViewModel
wurde in Kotlin neu geschrieben und verwendet jetztAutoClosable
anstelle vonCloseable
. Es wird jetzt unterstützt,AutoCloseable
-Objekte mit einerkey
hinzuzufügen, über die sie übergetCloseable()
abgerufen werden können.Der Aufruf von
LifecycleStartEffect
undLifecycleResumeEffect
ohne Schlüssel führt jetzt zu einem Fehler. Dabei wird dieselbe Konvention wie bei derDisposableEffect
API angewendet, die diese APIs spiegeln.LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
wurde zugunsten vonLiveData.toPublisher(lifecycleOwner)
verworfen.Die
lifecycle-livedata-core-ktx
-Kotlin-Erweiterungen wurden in daslifecycle-livedata-core
-Modul verschoben.Der
NullSafeMutableLiveData
wurde überarbeitet, um viele falsch positive Ergebnisse zu vermeiden.
Lebenszyklus der Kotlin Multiplatform-Kompatibilität
Die wichtigsten Lebenszyklus-APIs in Lifecycle
, LifecycleOwner
, LifecycleObserver
, Lifecycle.State
, Lifecycle.Event
und LifecycleRegistry
werden jetzt in Artefakten ausgeliefert, die mit Kotlin Multiplatform kompatibel sind.
Betroffene Artefakte:
lifecycle-common
verlagert die meisten APIs zucommon
und unterstützt neben Android auch jvm und iOS.lifecycle-runtime
verlagert die meisten APIs zucommon
und unterstützt neben Android auch jvm und iOS.lifecycle-runtime-ktx
ist jetzt leer, da alle APIs inlifecycle-runtime
verschoben wurden.lifecycle-runtime-compose
verlagert alle APIs zucommon
und stellt ein Android-Artefakt bereit, das der Multiplattformunterstützung vonandroidx.compose
entspricht.
ViewModel Kotlin Multiplatform Compatibility
Das lifecycle-viewmodel
-Artefakt und APIs wie ViewModel
, ViewModelStore
, ViewModelStoreOwner
und ViewModelProvider
werden jetzt in Artefakten ausgeliefert, die mit Kotlin Multiplatform kompatibel sind.
Aufgrund dieser Änderung gibt es für Methoden wie die auf ViewModelProvider
, die eine java.lang.Class<T>
als Argument erwarteten, jetzt eine entsprechende Methode, die eine kotlin.reflect.KClass<T>
als Argument erwartet.
Die Binärkompatibilität unter Android wurde beibehalten. Es gibt jedoch einige bemerkenswerte Änderungen, wenn die Android API-Oberfläche mit der gemeinsamen API-Oberfläche verglichen wird:
- Das Erstellen einer
ViewModelProvider
-Instanz erfolgt jetzt über dieViewModelProvider.create()
-Methoden, anstatt den Konstruktor direkt aufzurufen. ViewModelProvider.NewInstanceFactory
undViewModelProvider.AndroidViewModelFactory
sind nur auf Android-Geräten verfügbar.- Bei benutzerdefinierten Fabriken wird empfohlen,
ViewModelProvider.Factory
zu erweitern und diecreate
-Methode zu verwenden, die eineCreationExtras
annimmt, oder dieviewModelFactory
Kotlin DSL.
- Bei benutzerdefinierten Fabriken wird empfohlen,
- Die Verwendung von
ViewModelProvider
ohne benutzerdefinierte Fabrik auf Nicht-JVM-Plattformen führt zu einerUnsupportedOperationException
. Auf JVM-Plattformen wird die Kompatibilität durch Verwendung des ViewModel-Konstruktors ohne Argumente beibehalten, wenn keine benutzerdefinierte Factory angegeben wird. viewModelScope
wird auf Plattformen, auf denenDispatchers.Main
nicht verfügbar ist, aufEmptyCoroutineContext
zurückgesetzt (z.B. Linux).
Betroffene Artefakte:
lifecycle-viewmodel
verlagert die meisten APIs zucommon
und unterstützt neben Android auch jvm und iOS.lifecycle-viewmodel-ktx
ist jetzt leer, da alle APIs inlifecycle-viewmodel
verschoben wurden.lifecycle-viewmodel-compose
verlagert alle APIs zucommon
und stellt ein Android-Artefakt bereit, das der Multiplattformunterstützung vonandroidx.compose
entspricht.
Verhaltensänderungen
- Bei
InitializerViewModelFactory
(einschließlich derviewModelFactory
-Builderfunktion) wird jetzt eineIllegalArgumentException
geworfen, wenn bereits eineinitializer
mit derselbenclazz: KClass<VM : ViewModel>
hinzugefügt wurde. (Ic3a36)
Bekannte Probleme
- Für
lifecycle-*:2.8.0
ist mindestens Compose-Version 1.7.0-alpha05 (b/336842920) erforderlich.
Version 2.8.0-rc01
1. Mai 2024
androidx.lifecycle:lifecycle-*:2.8.0-rc01
wird veröffentlicht. Version 2.8.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem das Baseline-Profil für
lifecycle-common
-Kurse nicht richtig verpackt wurde. Diese werden jetzt im AAR-Filelifecycle-runtime
verpackt. (aosp/3038274, b/322382422) - Eine unbeabsichtigte Änderung der Reihenfolge, in der
AutoCloseable
-Instanzen, die an ein ViewModel angehängt sind, gelöscht werden, wurde behoben. Die vorherige ReihenfolgeaddCloseable(String, AutoCloseable)
, dannaddClosable(AutoCloseable)
, dannonCleared()
wurde wiederhergestellt. (aosp/3041632) - Das Standardverhalten beim Erstellen von
viewModelScope
für native und JVM-Desktopumgebungen wurde verbessert. (aosp/3039221)
Externer Beitrag
- Vielen Dank an Victor Kropp für die Verbesserung der Prüfung des Hauptthreads auf JVM Desktop. (aosp/3037116)
Version 2.8.0-beta01
17. April 2024
androidx.lifecycle:lifecycle-*:2.8.0-beta01
wird veröffentlicht. Version 2.8.0-beta01 enthält diese Commits.
Neue Funktionen
- Das
lifecycle-runtime-compose
-Artefakt ist jetzt mit Kotlin Multiplatform kompatibel. Der Code wird incommon
verschoben und es wird ein Android-Artefakt bereitgestellt, das der Multiplattform-Unterstützung fürandroidx.compose
entspricht. (If7a71, I4f4a0, b/331769623)
Version 2.8.0-alpha04
3. April 2024
androidx.lifecycle:lifecycle-*:2.8.0-alpha04
wird veröffentlicht. Version 2.8.0-alpha04 enthält diese Commits.
Neue Funktionen
- Das
lifecycle-viewmodel-compose
-Artefakt ist jetzt mit Kotlin Multiplatform kompatibel. Der Code wird incommon
verschoben und es wird ein Android-Artefakt bereitgestellt, das der plattformübergreifenden Unterstützung vonandroidx.compose
entspricht. Um dieser Änderung Rechnung zu tragen, akzeptiert die composableviewModel
-Methode jetzt zusätzlich zu einerjava.lang.Class
auch eineKClass
. (b/330323282)
Fehlerkorrekturen
- Der
NullSafeMutableLiveData
wurde überarbeitet, um viele falsch positive Ergebnisse zu vermeiden. (I2d8c1, Iafb18, I03463, I7ecef)
Update der Abhängigkeiten
- Das
lifecycle-viewmodel-compose
-Artefakt hängt jetzt von Compose 1.6.0 ab. - Der Lebenszyklus hängt jetzt vom Profile Installer 1.3.1 ab.
Version 2.8.0-alpha03
20. März 2024
androidx.lifecycle:lifecycle-*:2.8.0-alpha03
wird veröffentlicht. Version 2.8.0-alpha03 enthält diese Commits.
Neue Funktionen
ViewModel.viewModelScope
ist jetzt ein überschreibbarer Konstruktorparameter, mit dem Sie Ihren eigenen Dispatcher undSupervisorJob()
einschleusen oder den Standardwert mithilfe der inrunTest
verfügbarenbackgroundScope
überschreiben können. (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) }
Kompatibilität von Kotlin Multiplatform
Das lifecycle-viewmodel
-Artefakt und APIs wie ViewModel
, ViewModelStore
, ViewModelStoreOwner
und ViewModelProvider
werden jetzt in Artefakten ausgeliefert, die mit Kotlin Multiplatform kompatibel sind. (b/214568825)
Um dieser Änderung Rechnung zu tragen, gibt es für Methoden wie die auf ViewModelProvider
, die eine java.lang.Class<T>
als Argument erwarteten, jetzt eine entsprechende Methode, die eine kotlin.reflect.KClass<T>
erwartet.
Die Binärkompatibilität unter Android wurde beibehalten. Es gibt jedoch einige bemerkenswerte Änderungen, wenn die Android API-Oberfläche mit der gemeinsamen API-Oberfläche verglichen wird:
- Das Erstellen einer
ViewModelProvider
-Instanz erfolgt jetzt über dieViewModelProvider.create()
-Methoden, anstatt den Konstruktor direkt aufzurufen. ViewModelProvider.NewInstanceFactory
undViewModelProvider.AndroidViewModelFactory
sind nur auf Android-Geräten verfügbar.- Bei benutzerdefinierten Fabriken wird empfohlen,
ViewModelProvider.Factory
zu erweitern und diecreate
-Methode zu verwenden, die eineCreationExtras
annimmt, oder dieviewModelFactory
Kotlin DSL.
- Bei benutzerdefinierten Fabriken wird empfohlen,
- Die Verwendung von
ViewModelProvider
ohne benutzerdefinierte Fabrik auf Nicht-JVM-Plattformen führt zu einerUnsupportedOperationException
. Auf JVM-Plattformen wird die Kompatibilität durch Verwendung des ViewModel-Konstruktors ohne Argumente beibehalten, wenn keine benutzerdefinierte Factory angegeben wird. viewModelScope
wird auf Plattformen, auf denenDispatchers.Main
nicht verfügbar ist, aufEmptyCoroutineContext
zurückgesetzt (z.B. Linux).
Verhaltensänderungen
- Bei
InitializerViewModelFactory
(einschließlich derviewModelFactory
-Builderfunktion) wird jetzt eineIllegalArgumentException
geworfen, wenn bereits eineinitializer
mit derselbenclazz: KClass<VM : ViewModel>
hinzugefügt wurde. (Ic3a36)
Fehlerkorrekturen
ViewModel.getCloseable
verarbeitet jetzt doppelte Schlüssel: Wenn derkey
bereits eineAutoCloseable
-Ressource zugewiesen ist, wird die alte Ressource sofort ersetzt und geschlossen. (Ibeb67)- Der Zugriff auf die
viewModelScope
einesViewModel
ist jetzt threadsicher. (If4766, b/322407038)
Externer Beitrag
LocalLifecycleOwner
wurde von der Compose-Benutzeroberfläche zu lifecycle-runtime-compose verschoben, damit die Compose-basierten Hilfs-APIs außerhalb der Compose-Benutzeroberfläche verwendet werden können. Vielen Dank an Jake Wharton für den Beitrag. (I6c41b, b/328263448)
Version 2.8.0-alpha02
21. Februar 2024
androidx.lifecycle:lifecycle-*:2.8.0-alpha02
wird veröffentlicht. Version 2.8.0-alpha02 enthält diese Commits.
Neue Funktionen
- Die APIs
dropUnlessResumed
unddropUnlessStarted
wurden hinzugefügt. Mit diesen APIs können Sie Klicks oder andere Ereignisse erfassen, die auch dann auftreten, wenn dieLifecycleOwner
unter den angegebenenLifecycle.State
gefallen ist. Dies kann beispielsweise mit Navigation Compose verwendet werden, um Klickereignisse zu vermeiden, nachdem der Übergang zu einem anderen Bildschirm bereits begonnen hat:onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
(Icba83, b/317230685)
Kotlin-Conversions
ViewModel
ist jetzt in Kotlin geschrieben (I16f26, b/214568825)- Die
lifecycle-viewmodel-ktx
-Kotlin-Erweiterungen wurden in das Basismodul für den Lebenszyklus verschoben. (Id787b, b/274800183) - Die
lifecycle-runtime-ktx
-Kotlin-Erweiterungen wurden in das Basismodul für den Lebenszyklus verschoben. (Ic3686, b/274800183) - Die
lifecycle-livedata-core-ktx
-Kotlin-Erweiterungen wurden in das Basismodul für den Lebenszyklus verschoben. (I54a3d, b/274800183)
Kompatibilität von Kotlin Multiplatform
- Die wichtigsten Lebenszyklus-APIs in
Lifecycle
,LifecycleOwner
,LifecycleObserver
,Lifecycle.State
,Lifecycle.Event
undLifecycleRegistry
werden jetzt in Artefakten ausgeliefert, die mit Kotlin Multiplatform kompatibel sind. (b/317249252)
API-Änderungen
- Der Aufruf von
LifecycleStartEffect
undLifecycleResumeEffect
ohne Schlüssel führt jetzt zu einem Fehler. Dabei wird dieselbe Konvention wie bei derDisposableEffect
API angewendet, die diese APIs spiegeln. (Ib0e0c, b/323518079) - Für
ViewModel
wird jetztAutoCloseable
anstelle vonCloseable
verwendet. Das ist eine abwärtskompatible Änderung. (I27f8e, b/214568825) LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
wurde zugunsten vonLiveData.toPublisher(lifecycleOwner)
verworfen. (Iabe29, b/262623005)
Externer Beitrag
- Vielen Dank an Ivan Matkov von Jetbrains, der uns bei der Umstellung von Lifecycle auf Kotlin Multiplatform unterstützt hat. (aosp/2926690, I0c5ac, If445d)
Version 2.8.0-alpha01
24. Januar 2024
androidx.lifecycle:lifecycle-*:2.8.0-alpha01
wird veröffentlicht. Version 2.8.0-alpha01 enthält diese Commits.
Neue Funktionen
ViewModel
unterstützt jetzt das Hinzufügen vonCloseable
-Objekten mit einerkey
, über die sie übergetCloseable()
abgerufen werden können. (I3cf63)
Version 2.7
Version 2.7.0
10. Januar 2024
androidx.lifecycle:lifecycle-*:2.7.0
wird veröffentlicht. Version 2.7.0 enthält diese Commits.
Wichtige Änderungen seit Version 2.6.0
TestLifecycleOwner
enthält jetzt eine PausierungsfunktionsetCurrentState()
, die dafür sorgt, dass die Statusänderung und alleLifecycleObserver
-Callbacks abgeschlossen sind, bevor die Funktion zurückkehrt. Anders als beim direkten Festlegen dercurrentState
-Property wird hierrunBlocking
nicht verwendet. Daher kann die Funktion auch in einer Coroutine wie der vonrunTest
verwendet werden.- Die
LiveData
-Erweiterungen vonmap
undswitchMap
spiegeln jetzt das Verhalten vondistinctUntilChanged
wider: Wenn fürLiveData
einvalue
festgelegt ist, wird diemap
-/switchMap
-Funktion sofort aufgerufen, um denvalue
des zurückgegebenenLiveData
zu füllen. So wird sichergestellt, dass der Anfangswert im Rahmen der ersten Zusammensetzung festgelegt wird (bei Verwendung mitobserveAsState()
). Das Beobachtungsverhalten ändert sich dadurch jedoch nicht. Aktualisierte Werte aus der QuelleLiveData
werden weiterhin erst angewendet, wenn Sie mit der Beobachtung derLiveData
beginnen. - In dieser Version wurde ein Problem behoben, bei dem benutzerdefinierte
Parcelable
-Klassen nach dem Beenden und Neustarten des Prozesses nicht richtig wiederhergestellt wurden.SavedStateHandle
Da die Typinformationen vom Android-Framework verloren gehen, erfordern Arrays von benutzerdefinierten Parcelables zusätzliche Arbeit (manuelles Erstellen eines typisierten Arrays des richtigen Typs). In der Dokumentation zuget
,getLiveData
undgetStateFlow
wird diese Einschränkung jetzt ausdrücklich erwähnt. - Die ProGuard-Aufbewahrungsregeln, die mit
LifecycleObserver
verknüpft sind, wurden entfernt. Das bedeutet, dass für proguardierten Code, in dem APIs über Reflection verwendet werden sollen (z. B. mit der seit langem veralteten@OnLifecycleEvent
-Anmerkung), eigene Regeln für die Beibehaltung für den jeweiligen Anwendungsfall angegeben werden müssen.
Beobachtbarkeit von Lebenszyklusereignissen
- Alternativ zur Verwendung einer
LifecycleEventObserver
können Sie jetzt eineFlow
vonLifecycle.Event
über die ErweiterungsmethodeLifecycle.asFlow()
beobachten. - Jetpack Compose-Nutzer können jetzt
LifecycleEventEffect
verwenden, um Compose-Nebeneffekte basierend aufLifecycle.Event
auszuführen.
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
viewModel.refreshData()
}
// …
}
- Jetpack Compose-Nutzer können
LifecycleStartEffect
undLifecycleResumeEffect
verwenden, um Ereignispaare zu verarbeiten – gestartet zu gestoppt bzw. fortgesetzt zu pausiert. Diese API entspricht der inDisposableEffect
und eignet sich für Fälle, in denen die Änderung, die beim Steigen des Status vorgenommen wird, beim Sinken des Status rückgängig gemacht werden muss.
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
LifecycleStartEffect(viewModel) {
val timeTracking = viewModel.startTrackingTimeOnScreen()
onStopOrDispose {
timeTracking.stopTrackingTimeOnScreen()
}
}
// …
}
Weitere Informationen finden Sie unter Code bei Lebenszyklusereignissen ausführen.
Beobachtbarkeit des Lebenszyklusstatus
- Der aktuelle
Lifecycle.State
kann jetzt über dasLifecycle.currentStateFlow
-Attribut beobachtet werden. Dieses gibt einenStateFlow
zurück, dessenvalue
der aktuelleLifecycle.State
ist. - Jetpack Compose-Nutzer können die
Lifecycle.currentStateAsState()
-Erweiterung verwenden, umLifecycle.State
direkt als ComposeState
bereitzustellen. Dies entsprichtlifecycle.currentStateFlow.collectAsState()
und ist eine kürzere Alternative.
Weitere Informationen finden Sie unter Lebenszyklusereignisse mithilfe von Abläufen erfassen.
Version 2.7.0-rc02
13. Dezember 2023
androidx.lifecycle:lifecycle-*:2.7.0-rc02
wird veröffentlicht. Version 2.7.0-rc02 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, durch das benutzerdefinierte
Parcelable
-Klassen nach dem Beenden und Neustarten des Prozesses nicht richtig wiederhergestellt wurden.SavedStateHandle
Da die Typinformationen vom Android-Framework verloren gehen, erfordern Arrays von benutzerdefinierten Parcelables zusätzliche Arbeit (manuelles Erstellen eines typisierten Arrays des richtigen Typs). In der Dokumentation zuget
,getLiveData
undgetStateFlow
wird diese Einschränkung jetzt ausdrücklich erwähnt. (I0b55a)
Version 2.7.0-rc01
15. November 2023
androidx.lifecycle:lifecycle-*:2.7.0-rc01
wird veröffentlicht. Version 2.7.0-rc01 enthält diese Commits.
Fehlerkorrekturen
LifecycleStartEffect
undLifecycleResumeEffect
löschen und erstellen den Effektblock jetzt richtig, wenn sich dieLifecycleOwner
ändert. (Ia25c6)
Version 2.7.0-beta01
1. November 2023
androidx.lifecycle:lifecycle-*:2.7.0-beta01
wird ohne Änderungen veröffentlicht. Version 2.7.0-beta01 enthält diese Commits.
- Eine Betaversion wurde aktualisiert. Es gibt keine größeren Änderungen an dieser Releaseversion.
Version 2.7.0-alpha03
18. Oktober 2023
androidx.lifecycle:lifecycle-*:2.7.0-alpha03
wird veröffentlicht. Version 2.7.0-alpha03 enthält diese Commits.
Neue Funktionen
lifecycle-runtime-testing
enthält jetzt eine neue Lint-Prüfung, um zu verhindern, dass dieLifecycle.State
derTestLifecycleOwner
über das FeldcurrentState
festgelegt wird, wenn sich der Code in einer Coroutine befindet. Die Lint-Prüfung schlägt jetzt die Aussetzung vonsetCurrentState
vor, wodurchLifecycle.State
ohne Blockierung festgelegt werden kann. (Icf728, b/297880630)
Fehlerkorrekturen
- Es wurde ein Problem mit
LiveData.switchMap
behoben, bei dem die Rückgabe derselbenLiveData
-Instanz sowohl beim ersten als auch beim nachfolgenden Aufruf verhinderte, dass dieLiveData
-Instanz als Quelle hinzugefügt wurde. (Ibedcba7)
Version 2.7.0-alpha02
6. September 2023
androidx.lifecycle:lifecycle-*:2.7.0-alpha02
wird veröffentlicht. Version 2.7.0-alpha02 enthält diese Commits.
Neue Funktionen
TestLifecycleOwner
enthält jetzt die PausierungsfunktionsetCurrentState()
, mit der NutzerTestLifecycleOwner
innerhalb einer Coroutine wie der vonrunTest
verwenden können. (I329de, b/259344129)
API-Änderungen
- Alle Dateien aus den
lifecycle-livedata-ktx
-Modulen wurden in das Hauptmodullifecycle-livedata
verschoben. (I10c6f, b/274800183)
Verhaltensänderungen
- Mit den Erweiterungen
LiveData.map()
undLiveData.switchMap()
wird jetzt dievalue
der zurückgegebenenLiveData
festgelegt, wenn für die vorherigeLiveData
ein Wert festgelegt wurde. So wird sichergestellt, dass die Verwendung der resultierenden LiveData in Jetpack Compose in der ursprünglichen Zusammensetzung den richtigen Status hat. (I91d2b, b/269479952) - Die
addCloseable()
vonViewModel
schließt jetzt sofort dieCloseable
, wenn dieViewModel
bereits einen Anruf anonCleared()
erhalten hat. (I4712e, b/280294730)
Fehlerkorrekturen
- Lifecycle
2.6.2
: Ein Problem wurde behoben, durch dasSavedStateHandle
nach dem Beenden des Prozesses nicht korrekt wiederhergestellt wurde, wenn der Status wiederhergestellt,save()
aufgerufen wurde, ohne den Status im übergeordnetenSavedStateRegistry
zu speichern, und der Status dann noch einmal wiederhergestellt wurde. Dadurch wird die Interaktion zwischenrememberSaveable
undNavHost
von Navigation Compose korrigiert. (aosp/2729289)
Version 2.7.0-alpha01
26. Juli 2023
androidx.lifecycle:lifecycle-*:2.7.0-alpha01
wird veröffentlicht. Version 2.7.0-alpha01 enthält diese Commits.
API-Änderungen
Lifecycle.State
ist jetzt überLifecycle.currentStateFlow
über Compose-beobachtbar.Lifecycle.currentStateFlow
gibt eineStateFlow
zurück, wobeivalue
die aktuelleLifecycle.State
ist. (Ib212d, b/209684871)Lifecycle.Event
können jetzt alsFlow
mitLifecycle.asFlow().
beobachtet werden (If2c0f, b/176311030)- Die
LifecycleResumeEffect
API wurde hinzugefügt, um ComposeSideEffect
s auf der Grundlage vonLifecycle.Event.ON_RESUME
- undLifecycle.Event.ON_PAUSE
-Ereignis-Callbacks auszuführen. (I60386, b/235529345) - Die
LifecycleStartEffect
API wurde hinzugefügt, um Compose-SideEffect
s basierend aufLifecycle.Event.ON_START
- undLifecycle.Event.ON_STOP
-Ereignis-Callbacks auszuführen. (I5a8d1, b/235529345) - Die
LifecycleEventEffect
API wurde hinzugefügt, umSideEffect
-Kompositionen auf der Grundlage vonLifecycle.Event
auszuführen. (Ic9794, b/235529345) - Die
Lifecycle.collectAsState()
-Erweiterung wurde hinzugefügt, umLifecycle.State
direkt als „Schreiben“State
anzuzeigen. Dies entsprichtlifecycle.currentStateFlow.collectAsState()
und ist eine kürzere Alternative. (I11015, b/235529345)
Fehlerkorrekturen
- Die
LiveData.distinctUntilChanged()
-Erweiterung setzt jetzt denvalue
der zurückgegebenenLiveData
, wenn für die vorherigeLiveData
ein Wert festgelegt wurde. Das Beobachtungsverhalten ändert sich dadurch nicht. Aktualisierte Werte aus der QuelleLiveData
werden erst dann angewendet, wenn Sie mit der Beobachtung des vondistinctUntilChanged()
zurückgegebenenLiveData
beginnen. (Ib482f) - Die ProGuard-Aufbewahrungsregeln, die mit
LifecycleObserver
verknüpft sind, wurden entfernt. Das bedeutet, dass für proguardierten Code, der APIs über Reflection verwenden soll, eigene Regeln für den jeweiligen Anwendungsfall festgelegt werden müssen. (Ia12fd)
Version 2.6
Version 2.6.2
6. September 2023
androidx.lifecycle:lifecycle-*:2.6.2
wird veröffentlicht. Version 2.6.2 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem
SavedStateHandle
nach dem Prozesstod nicht korrekt wiederhergestellt wurde, wenn der Status wiederhergestellt,save()
aufgerufen wurde, ohne den Status im übergeordnetenSavedStateRegistry
zu speichern, und der Status dann noch einmal wiederhergestellt wurde. Dadurch wird die Interaktion zwischenrememberSaveable
undNavHost
von Navigation Compose korrigiert. (aosp/2729289)
Version 2.6.1
22. März 2023
androidx.lifecycle:lifecycle-*:2.6.1
wird veröffentlicht. Version 2.6.1 enthält diese Commits.
Abhängigkeitsupdates
lifecycle-viewmodel-savedstate
hängt jetzt von SavedState1.2.1
ab. (cd7251)- Der Lebenszyklus hängt jetzt von ProfileInstaller
1.3.0
ab. (f9d30b)
Version 2.6.0
8. März 2023
androidx.lifecycle:lifecycle-*:2.6.0
wird veröffentlicht. Version 2.6.0 enthält diese Commits.
Wichtige Änderungen seit Version 2.5.0
LiveData
enthält jetzt eine neueisInitialized
-Eigenschaft, die angibt, ob fürLiveData
jemals ein expliziter Wert festgelegt wurde. So können Sie unterscheiden, obliveData.value
null
zurückgibt, weil noch kein Wert festgelegt wurde, oder ob ein expliziternull
-Wert festgelegt wurde.MediatorLiveData
enthält jetzt einen Konstruktor zum Festlegen eines Anfangswerts.- Es wurde eine neue Erweiterung für
StateFlow
undFlow
voncollectAsStateWithLifecycle()
hinzugefügt, die Daten aus Abläufen erfasst und den aktuellen Wert auf Lifecycle-konforme Weise als „Compose State“ darstellt. Lifecycle.launchWhenX
- undLifecycle.whenX
-Methoden wurden eingestellt, da die Verwendung eines Pausierungs-Dispatchers in einigen Fällen zu verschwendetem Ressourcenverbrauch führen kann. Wir empfehlen,Lifecycle.repeatOnLifecycle
zu verwenden. Weitere Informationen dazu, warum das Aufheben der Sperrung für eine einzelne Aufgabe prinzipiell unsicher ist, finden Sie hier.- Kotlin-Umstellung: Eine große Anzahl von Lebenszyklusklassen wurde in Kotlin konvertiert. Alle konvertierten Klassen behalten ihre binäre Kompatibilität mit früheren Versionen bei. Bei den folgenden Klassen wurden nicht mit der Quelle kompatible Änderungen an Klassen vorgenommen, die in Kotlin geschrieben wurden:
ViewTreeLifecycleOwner
,LiveDataReactiveStreams
,HasDefaultViewModelProviderFactory
,ViewTreeViewModelStoreOwner
,Transformations
,ViewModelStoreOwner
,LifecycleOwner
In der folgenden Tabelle finden Sie die Quell-Conversions für die neue Version des Lebenszyklus.
Lebenszyklus 2.5 | Lebenszyklus 2.5 (KTX) | Lebenszyklus 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 |
- Die Nullbarkeit der
onChanged
-Methode einer in Kotlin erstelltenObserver
stimmt jetzt mit der Nullbarkeit des generischen Typs überein. WennObserver.onChanged()
einen typlosen Wert akzeptieren soll, müssen SieObserver
mit einem typlosen Wert instanziieren. - Diese Klassen wurden ebenfalls in Kotlin konvertiert, sind aber weiterhin mit der Quelle kompatibel:
DefaultLifecycleObserver
,LifecycleEventObserver
,Lifecycle
,LifecycleRegistry
,LifecycleObserver
,ViewModelStore
,AndroidViewModel
,AbstractSavedStateViewModelFactory
,LifecycleService
,ServiceLifecycleDispatcher
undProcessLifecycleOwner
Version 2.6.0-rc01
22. Februar 2023
androidx.lifecycle:lifecycle-*:2.6.0-rc01
wird veröffentlicht. Version 2.6.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Die
LiveData.distinctUntilChanged()
-Erweiterung setzt jetzt denvalue
der zurückgegebenenLiveData
, wenn für die vorherigeLiveData
ein Wert festgelegt wurde. Das ändert nichts am Beobachtungsverhalten. Aktualisierte Werte aus der QuelleLiveData
werden erst dann angewendet, wenn Sie mit der Beobachtung des vondistinctUntilChanged()
zurückgegebenenLiveData
beginnen. (Ib482f)
Version 2.6.0-beta01
8. Februar 2023
androidx.lifecycle:lifecycle-*:2.6.0-beta01
wird veröffentlicht. Version 2.6.0-beta01 enthält diese Commits.
Kotlin-Conversions
LifecycleOwner
ist jetzt in Kotlin geschrieben. Das ist eine nicht mit der Quelle kompatible Änderung für in Kotlin geschriebene Klassen. Sie müssen jetzt dielifecycle
-Eigenschaft überschreiben, anstatt die vorherigegetLifecycle()
-Funktion zu implementieren. (I75b4b, b/240298691)ViewModelStoreOwner
ist jetzt in Kotlin. Dies ist eine nicht mit der Quelle kompatible Änderung für in Kotlin geschriebene Klassen. Sie müssen jetzt dieviewModelStore
-Eigenschaft überschreiben, anstatt die vorherigegetViewModelStore()
-Funktion zu implementieren. (I86409, b/240298691)- Die Kotlin-Erweiterung für
LifecycleOwner
, die das FeldlifecycleScope
bereitstellt, wurde vonlifecycle-runtime-ktx
in daslifecycle-common
-Artefakt verschoben. (I41d78, b/240298691) - Die Kotlin-Erweiterung für
Lifecycle
, die das FeldcoroutineScope
bereitstellt, wurde vonlifecycle-runtime-ktx
in daslifecycle-common
-Artefakt verschoben. (Iabb91, b/240298691)
Version 2.6.0-alpha05
25. Januar 2023
androidx.lifecycle:lifecycle-*:2.6.0-alpha05
wird veröffentlicht. Version 2.6.0-alpha05 enthält diese Commits.
Kotlin-Conversions
Transformations
ist jetzt in Kotlin geschrieben. Dies ist eine nicht kompatible Quellcodeänderung für Kotlin-Klassen, in denen direkt Syntax wieTransformations.map
verwendet wurde. Kotlin-Code muss jetzt die Syntax der Kotlin-Erweiterungsmethode verwenden, die zuvor nur bei Verwendung vonlifecycle-livedata-ktx
verfügbar war. Bei der Verwendung der Programmiersprache Java werden die Versionen dieser Methoden, die eineandroidx.arch.core.util.Function
-Methode annehmen, eingestellt und durch Versionen ersetzt, die eine Kotlin-Function1
annehmen. Durch diese Änderung bleibt die Binärkompatibilität erhalten. (I8e14f)ViewTreeViewModelStoreOwner
ist jetzt in Kotlin geschrieben. Das ist eine nicht mit der Quelle kompatible Änderung für Klassen, die in Kotlin geschrieben sind. Sie müssen jetzt die Kotlin-Erweiterungsmethoden fürView
vonandroidx.lifecycle.setViewTreeViewModelStoreOwner
undandroidx.lifecycle.findViewTreeViewModelStoreOwner
direkt importieren und verwenden, um einen zuvor festgelegten Eigentümer festzulegen und zu finden. Dies ist binärkompatibel und bleibt für Implementierungen, die in der Programmiersprache Java geschrieben sind, auch weiterhin quellkompatibel. (Ia06d8, Ib22d8, b/240298691)- Die
HasDefaultViewModelProviderFactory
-Schnittstelle ist jetzt in Kotlin geschrieben. Dies ist eine nicht mit der Quelle kompatible Änderung für in Kotlin geschriebene Klassen. Sie müssen jetzt die EigenschaftendefaultViewModelProviderFactory
unddefaultViewModelCreationExtras
überschreiben, anstatt die vorherigen entsprechenden Funktionen zu implementieren. (Iaed9c, b/240298691) Observer
ist jetzt in Kotlin geschrieben. Für dieonChanged()
-Methode wird jetzt der Namevalue
für den Parameter verwendet. (Iffef2, I4995e, b/240298691)AndroidViewModel
,AbstractSavedStateViewModelFactory
,LifecycleService
,ServiceLifecycleDispatcher
undProcessLifecycleOwner
sind jetzt in Kotlin geschrieben (I2e771, Ibae40, I160d7, I08884, I1cda7, b/240298691)
Version 2.6.0-alpha04
11. Januar 2023
androidx.lifecycle:lifecycle-*:2.6.0-alpha04
wird veröffentlicht. Version 2.6.0-alpha04 enthält diese Commits.
Neue Funktionen
LiveData
enthält jetzt eine neueisInitialized
-Eigenschaft, die angibt, ob fürLiveData
jemals ein expliziter Wert festgelegt wurde. So können Sie unterscheiden, obliveData.value
null
zurückgibt, weil noch kein Wert festgelegt wurde, oder ob ein expliziternull
-Wert festgelegt wurde. (Ibd018)
API-Änderungen
- Die
collectAsStateWithLifecycle()
APIs vonlifecycle-runtime-compose
sind nicht mehr experimentell. (I09d42, b/258835424) Lifecycle.launchWhenX
-Methoden undLifecycle.whenX
-Methoden wurden eingestellt, da die Verwendung eines Pausierungs-Dispatchers in einigen Fällen zu verschwendetem Ressourcenverbrauch führen kann. Wir empfehlen,Lifecycle.repeatOnLifecycle
zu verwenden. (Iafc54, b/248302832)
Kotlin-Conversions
ViewTreeLifecycleOwner
ist jetzt in Kotlin geschrieben. Das ist eine nicht mit der Quelle kompatible Änderung für Klassen, die in Kotlin geschrieben sind. Sie müssen jetzt die Kotlin-Erweiterungsmethoden fürView
vonandroidx.lifecycle.setViewTreeLifecycleOwner
undandroidx.lifecycle.findViewTreeLifecycleOwner
direkt importieren und verwenden, um einen zuvor festgelegten Eigentümer festzulegen und zu finden. Dadurch wird die vorherige Kotlin-Erweiterung inlifecycle-runtime-ktx
ersetzt. Dies ist binärkompatibel und bleibt für Implementierungen, die in der Programmiersprache Java geschrieben sind, auch weiterhin quellkompatibel. (I8a77a, I5234e, b/240298691)LiveDataReactiveStreams
ist jetzt in Kotlin geschrieben. Die Kotlin-Erweiterungen, die zuvor inlifecycle-reactivestreams-ktx
enthalten waren, wurden in das Modullifecycle-reactivestreams
verschoben und sind jetzt die primäre Oberfläche für in Kotlin geschriebenen Code. Dies ist eine nicht mit der Quelle kompatible Änderung für in Kotlin geschriebenen Code, wenn Sie die Kotlin-Erweiterungsmethoden-APIs noch nicht verwendet haben. (I2b1b9, I95d22, b/240298691)DefaultLifecycleObserver
,LifecycleEventObserver
,Lifecycle
,LifecycleRegistry
,LifecycleObserver
undViewModelStore
werden jetzt in Kotlin geschrieben (Iadffd, (I60034, I8c52c, I9593d, I01fe1, I59a23, b/240298691)
Fehlerkorrekturen
SavedStateHandle
stürzt nicht mehr mit einerClassCastException
ab, wennget()
mit dem falschen Klassentyp aufgerufen wird. (I6ae7c)
Version 2.6.0-alpha03
24. Oktober 2022
androidx.lifecycle:lifecycle-*:2.6.0-alpha03
wird veröffentlicht. Version 2.6.0-alpha03 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, durch das Einschränkungen zwischen verschiedenen Lebenszyklusmodulen nicht wie vorgesehen funktionierten. (I18d0d, b/249686765)
- Von
LifecycleRegistry.moveToState()
ausgelöste Fehler enthalten jetzt hilfreichere Fehlermeldungen, die Entwickler über die Komponente informieren, die den Fehler verursacht. (Idf4b2, b/244910446)
Version 2.6.0-alpha02
7. September 2022
androidx.lifecycle:lifecycle-*:2.6.0-alpha02
wird veröffentlicht. Version 2.6.0-alpha02 enthält diese Commits.
API-Änderungen
MediatorLiveData
enthält jetzt einen Konstruktor zum Festlegen eines Anfangswerts. (Ib6cc5, b/151244085)
Fehlerkorrekturen
Lifecycle
-Artefakte enthalten jetzt Einschränkungen, die dafür sorgen, dass alle voneinander abhängigen Lebenszyklus-Artefakte dieselbe Version verwenden. Andere Abhängigkeiten werden automatisch aktualisiert, wenn eine aktualisiert wird. b/242871265FlowLiveData.asFlow()
erstellt jetzt einecallbackFlow
, anstatt seine eigeneChannel
-Implementierung zu verwenden, um für Threadsicherheit und Kontexterhaltung zu sorgen. (I4a8b2, b/200596935)- Die
asLiveData
-Funktion vonFlowLiveData
behält jetzt den ursprünglichen Wert einerStateFlow
bei, wenn das neueLiveData
-Objekt erstellt wird. (I3f530, b/157380488) - Lebenszyklus
2.5.1
: Bei benutzerdefinierten Implementierungen vonAndroidViewModelFactory
wird die Funktioncreate(modelClass)
jetzt korrekt aufgerufen, wenn der zustandsorientierte Konstruktor mitLifecycle
2.4 oder höher verwendet wird (I5b315, b/238011621)
Version 2.6.0-alpha01
29. Juni 2022
androidx.lifecycle:lifecycle-*:2.6.0-alpha01
wird veröffentlicht. Version 2.6.0-alpha01 enthält diese Commits.
Neue Funktionen
- Es wurde eine neue Erweiterung für
StateFlow
undFlow
voncollectAsStateWithLifecycle
hinzugefügt, die Daten aus Abläufen erfasst und den aktuellen Wert auf Lifecycle-konforme Weise als „Compose State“ darstellt. Der Datenstrom wird erfasst und die neue Emission wird auf den Wert des Status festgelegt, wenn sich der Lebenszyklus mindestens in einer bestimmtenLifecycle.State
befindet. Wenn der Lebenszyklus unter diesenLifecycle.State
fällt, wird die Erfassung des Flusses beendet und der Wert des Status wird nicht aktualisiert. (I1856e, b/230557927)
Version 2.5
Version 2.5.1
27. Juli 2022
androidx.lifecycle:lifecycle-*:2.5.1
wird veröffentlicht. Version 2.5.1 enthält diese Commits.
Fehlerkorrekturen
- Bei benutzerdefinierten Implementierungen von
AndroidViewModelFactory
wird diecreate(modelClass)
-Funktion jetzt korrekt aufgerufen, wenn der zustandsorientierteAndroidViewModelFactory
-Konstruktor mitLifecycle
2.4 oder höher verwendet wird. (I5b315, b/238011621)
Version 2.5.0
29. Juni 2022
androidx.lifecycle:lifecycle-*:2.5.0
wird veröffentlicht. Version 2.5.0 enthält diese Commits.
Wichtige Änderungen seit Version 2.4.0
SavedStateHandle
bietet jetzt einegetStateFlow()
API, die als Alternative zur Verwendung vonLiveData
einen Kotlin-StateFlow
zum Überwachen von Wertänderungen zurückgibt.ViewModel CreationExtras: Beim Erstellen einer benutzerdefinierten
ViewModelProvider.Factory
mussAndroidViewModelFactory
oderAbstractSavedStateViewModelFactory
nicht mehr erweitert werden, um Zugriff auf eineApplication
oderSavedStateHandle
zu erhalten. Stattdessen werden diese Felder allenViewModelProvider.Factory
-Unterklassen alsCreationExtras
über die neue Überladung voncreate
zur Verfügung gestellt:create(Class<T>, CreationExtras)
. Diese Extras werden automatisch von Ihrer Aktivität oder Ihrem Fragment bereitgestellt, wenn Sie Aktivität1.5.0
bzw. Fragment1.5.0
verwenden.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
bietet jetzt eineviewModelFactory
Kotlin-DSL, mit der Sie IhreViewModelProvider.Factory
anhand eines oder mehrerer Lambda-Initialisierer definieren können, jeweils einer für jedeViewModel
-Klasse, die Ihre benutzerdefinierte Fabrik unterstützt, wobeiCreationExtras
als primäre Datenquelle verwendet wird.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
bietet jetzt eineviewModel()
API, die eine Lambda-Fabrik zum Erstellen einerViewModel
-Instanz verwendet, ohne dass eine benutzerdefinierteViewModelProvider.Factory
erstellt werden muss.// 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) }
Integration von SavedStateHandle Compose Saver: Das
lifecycle-viewmodel-compose
-Artefakt enthält jetzt neue experimentelle APIs inSavedStateHandle.saveable
, die einrememberSaveable
-ähnliches Verhalten ermöglichen, das vomSavedStateHandle
eines ViewModels unterstützt wird.class ListScreenViewModel(handle: SavedStateHandle): ViewModel() { // This value survives both configuration changes and process death and recreation val editMode by handle.saveable { mutableStateOf(false) } }
Es wurde eine
addCloseable()
API und eine neue Konstruktorüberladung hinzugefügt, mit denen Sie derViewModel
ein oder mehrereCloseable
-Objekte hinzufügen können, die geschlossen werden, wenn dieViewModel
gelöscht wird, ohne dass inonCleared()
manuelle Arbeit erforderlich ist.Wenn Sie beispielsweise einen coroutine-Scope erstellen möchten, den Sie in ein ViewModel einschleusen, aber über Tests steuern können, können Sie eine
CoroutineScope
erstellen, dieCloseable
implementiert:class CloseableCoroutineScope( context: CoroutineContext = SupervisorJob() + Dispatchers.Main.immediate ) : Closeable, CoroutineScope { override val coroutineContext: CoroutineContext = context override fun close() { coroutineContext.cancel() } }
Diese kann dann im Konstruktor von
ViewModel
verwendet werden, wobei die Lebensdauer vonviewModelScope
beibehalten wird:class TestScopeViewModel( val customScope: CloseableCoroutineScope = CloseableCoroutineScope() ) : ViewModel(customScope) { // You can now use customScope in the same way as viewModelScope }
Geändertes Verhalten
- Wenn Sie versuchen, die
Lifecycle.State
vonINITIALIZED
nachDESTROYED
zu verschieben, wird jetzt immer eineIllegalStateException
geworfen, unabhängig davon, ob dieLifecycle
einen angehängten Beobachter hat. LifecycleRegistry
löscht jetzt seine Beobachter, wenn der StatusDESTROYED
erreicht wird.
Version 2.5.0-rc02
15. Juni 2022
androidx.lifecycle:lifecycle-*:2.5.0-rc02
wird veröffentlicht. Version 2.5.0-rc02 enthält diese Commits.
Fehlerkorrekturen
ViewModelProvider
stürzt nicht mehr ab, wenn frühere Versionen von „compileOnly“-Lebenszykluseinträgen mit Versionen 2.5 und höher kombiniert werden. (I81a66, b/230454566)
Version 2.5.0-rc01
11. Mai 2022
androidx.lifecycle:lifecycle-*:2.5.0-rc01
wird veröffentlicht. Version 2.5.0-rc01 enthält diese Commits.
Fehlerkorrekturen
MediatorLiveData.addSource()
wirft jetzt eineNullPointerException
aus, wenn einenull
-Quelle übergeben wird, anstatt dienull
-Quelle an Beobachter weiterzuleiten.(Ibd0fb, b/123085232)
Version 2.5.0-beta01
20. April 2022
androidx.lifecycle:lifecycle-*:2.5.0-beta01
wird veröffentlicht. Version 2.5.0-beta01 enthält diese Commits.
API-Änderungen
- Es wurden
SavedStateHandle.saveable
-Attributdelegierte hinzugefügt, um Attributnamen als Schlüssel zum Speichern des Status in derSavedStateHandle
zu verwenden (I8bb86, b/225014345)
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem das Verschachteln einer
NavHost
in einer anderenNavHost
auf einem nicht primären Tab der unteren Navigationsleiste bei Verwendung mehrerer Backstacks zu einerIllegalStateException
führte. (I11bd5, b/228865698)
Version 2.5.0-alpha06
6. April 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha06
wird veröffentlicht. Version 2.5.0-alpha06 enthält diese Commits.
Neue Funktionen
SavedStateHandle.saveable
eine experimentelleMutableState
-Überladung hinzufügen, um mitrememberSaveable
übereinzustimmen (I38cfe, b/224565154)
API-Änderungen
CreationExtras
ist jetzt abstrakt statt versiegelt. (Ib8a7a)
Fehlerkorrekturen
- Ein
IllegalStateException: Already attached to lifecycleOwner
-Fehler, der durchSavedStateHandleController
verursacht wurde, wurde behoben. (I7ea47, b/215406268)
Version 2.5.0-alpha05
23. März 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha05
wird veröffentlicht. Version 2.5.0-alpha05 enthält diese Commits.
Neue Funktionen
- Das
lifecycle-viewmodel-compose
-Modul bietet jetztSavedStateHandleSaver
, eine experimentelle API, die dafür sorgt, dass Werte in einerSavedStateHandle
korrekt in denselben gespeicherten Instanzstatus integriert werden, der auch vonrememberSaveable
verwendet wird. (Ia88b7, b/195689777)
API-Änderungen
- Ein Kompatibilitätsproblem mit Lifecycle 2.3 und neueren Lifecycle-Versionen in Java wurde behoben. (I52c8a, b/219545060)
Fehlerkorrekturen
SavedStateViewFactory
unterstützt jetzt die Verwendung vonCreationExtras
, auch wenn es mit einerSavedStateRegistryOwner
initialisiert wurde. Wenn Extras angegeben werden, werden die initialisierten Argumente ignoriert. (I6c43b, b/224844583)
Version 2.5.0-alpha04
9. März 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha04
wird veröffentlicht. Version 2.5.0-alpha04 enthält diese Commits.
API-Änderungen
SavedStateHandle
bietet jetzt einegetStateFlow()
API, die einen Kotlin-StateFlow
zum Überwachen von Wertänderungen zurückgibt, als Alternative zur Verwendung vonLiveData
. (Iad3ab, b/178037961)
Version 2.5.0-alpha03
23. Februar 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha03
wird veröffentlicht. Version 2.5.0-alpha03 enthält diese Commits.
Neue Funktionen
- Es wurde eine
addCloseable()
API und eine neue Konstruktorüberladung hinzugefügt, mit der Sie derViewModel
ein oder mehrereCloseable
-Objekte hinzufügen können, die geschlossen werden, wenn dieViewModel
gelöscht wird, ohne dass inonCleared()
manuelle Arbeiten erforderlich sind. (I55ea0) lifecycle-viewmodel
bietet jetzt eineInitializerViewModelFactory
, mit der Sie Lambda für die Verarbeitung bestimmterViewModel
-Klassen hinzufügen können, wobeiCreationExtras
als primäre Datenquelle verwendet wird. (If58fc, b/216687549)lifecycle-viewmodel-compose
bietet jetzt eineviewModel()
API, die eine Lambda-Fabrik zum Erstellen einerViewModel
-Instanz verwendet, ohne dass eine benutzerdefinierteViewModelProvider.Factory
erstellt werden muss. (I97fbb, b/216688927)
API-Änderungen
- Sie können jetzt über
lifecycle-viewmodel-compose
einViewModel
mitCreationExtras
erstellen. (I08887, b/216688927)
Geändertes Verhalten
- Wenn Sie versuchen, die
Lifecycle.State
vonINITIALIZED
nachDESTROYED
zu verschieben, wird jetzt immer eineIllegalStateException
geworfen, unabhängig davon, ob dieLifecycle
einen angehängten Beobachter hat. (I7c390, b/177924329) LifecycleRegistry
löscht jetzt seine Beobachter, wenn der StatusDESTROYED
erreicht wird. (I4f8dd, b/142925860)
Version 2.5.0-alpha02
9. Februar 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha02
wird veröffentlicht. Version 2.5.0-alpha02 enthält diese Commits.
API-Änderungen
SavedStateHandle
undSavedStateViewModelFactory
wurden in Kotlin konvertiert. Dadurch wurde die Nullbarkeit der Generics in beiden Klassen verbessert. (Ib6ce2, b/216168263, I9647a, b/177667711)- Der Funktionsparameter
LiveData
switchMap
kann jetzt eine nullwertige Ausgabe haben. (I40396, b/132923666) - Die
LiveData
-ktx-Erweiterungen sind jetzt mit@CheckResult
gekennzeichnet, um sicherzustellen, dass das Ergebnis beim Aufrufen dieser Funktionen verwendet wird. (Ia0f05, b/207325134)
Geändertes Verhalten
- In
SavedStateHandle
wird jetzt der Standardwert korrekt gespeichert, wenn kein Wert für den angegebenen Schlüssel vorhanden ist. (I1c6ce, b/178510877)
Fehlerkorrekturen
- Seit Lebenszyklus
2.4.1
:lifecycle-process
wurde so aktualisiert, dass es von Startup 1.1.1 abhängt, damit die Fehlerkorrekturen, die verhindern, dassProcessLifecycleInitializer
eineStartupException
auslöst, standardmäßig verfügbar sind. (Ib01df, b/216490724) - Es gibt jetzt eine verbesserte Fehlermeldung, wenn benutzerdefinierte
AndroidViewModel
-Klassen Parameter in der falschen Reihenfolge haben und versucht wird, eineViewModel
zu erstellen. (I340f7, b/177667711) - Sie können jetzt ein Ansichtsmodell über
CreationExtras
mithilfe derAndroidViewModelFactory
erstellen, ohne eine Anwendung festzulegen. (I6ebef, b/217271656)
Version 2.5.0-alpha01
26. Januar 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha01
wird veröffentlicht. Version 2.5.0-alpha01 enthält diese Commits.
ViewModel CreationExtras
Mit dieser Version legen wir den Grundstein für die Umstrukturierung der Erstellung von ViewModel
. Anstatt einer starren Reihe von ViewModelProvider.Factory
-Unterklassen, die jeweils zusätzliche Funktionen hinzufügen (z. B. einen Application
-Konstruktorparameter über AndroidViewModelFactory
oder einen SavedStateHandle
-Konstruktorparameter über SavedStateViewModelFactory
und AbstractSavedStateViewModelFactory
), bewegen wir uns in eine Welt zustandsloser Fabriken, die auf einem neuen Konzept basieren: CreationExtras
. (Ia7343, b/188691010, b/188541057)
Durch diese Änderung werden von ViewModelProvider
keine direkten Aufrufe der vorherigen create(Class<T>)
-Methode von ViewModelProvider.Factory
mehr ausgeführt. Stattdessen wird eine neue Überladung von create
aufgerufen: create(Class<T>, CreationExtras)
. Das bedeutet, dass jede direkte Implementierung der ViewModelProvider.Factory
-Instanz jetzt Zugriff auf alle diese neuen CreationExtras
hat:
ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY
: DieserString
bietet Zugriff auf den benutzerdefinierten Schlüssel, den du anViewModelProvider.get()
übergeben hast.ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY
gewährt Zugriff auf die KlasseApplication
.SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY
bietet Zugriff auf dieSavedStateRegistryOwner
, die zum Erstellen dieses ViewModels verwendet wird.SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY
bietet Zugriff auf dieViewModelStoreOwner
, die zum Erstellen dieses ViewModels verwendet wird.SavedStateHandleSupport.DEFAULT_ARGS_KEY
bietet Zugriff auf dieBundle
der Argumente, die zum Erstellen einerSavedStateHandle
verwendet werden sollen.
Diese Extras werden standardmäßig bei Verwendung von Aktivität 1.5.0-alpha01
, Fragment 1.5.0-alpha01
und Navigation 2.5.0-alpha01
bereitgestellt. Wenn Sie eine ältere Version dieser Bibliotheken verwenden, ist CreationExtras
leer. Alle vorhandenen Unterklassen von ViewModelProvider.Factory
wurden neu geschrieben, um sowohl den bisherigen Erstellungspfad zu unterstützen, der von älteren Versionen dieser Bibliotheken verwendet wird, als auch den CreationExtras
-Pfad, der künftig verwendet wird.
Mit diesen CreationExtras
können Sie eine ViewModelProvider.Factory
erstellen, die nur die Informationen an jede ViewModel
weitergibt, die Sie benötigen, ohne auf eine strenge Hierarchie von Factory-Unterklassen angewiesen zu sein:
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
}
}
Wir verwenden die Kotlin-Erweiterungsfunktion createSavedStateHandle()
für CreationExtras
aus SavedStateHandleSupport
, um eine SavedStateHandle
nur für das ViewModel zu erstellen, das sie benötigt. (Ia6654, b/188541057)
Benutzerdefinierte CreationExtras
können bereitgestellt werden, indem getDefaultViewModelCreationExtras()
in ComponentActivity
oder Fragment
überschrieben wird. So stehen sie Ihrer benutzerdefinierten ViewModelProvider.Factory
als integrierte Form der unterstützten Insertion zur Verfügung. Diese Extras werden Ihrer benutzerdefinierten Factory automatisch zur Verfügung gestellt, wenn Sie sie direkt mit ViewModelProvider
oder mit den Kotlin-Property-Erweiterungen by viewModels()
und by activityViewModels()
verwenden. (I79f2b, b/207012584, b/207012585, b/207012490)
Fehlerkorrekturen
- Ein Problem wurde behoben, durch das der für ein
SavedStateHandle
angegebene Standardwert nach dem Beenden und Neustarten des Prozesses wieder angezeigt wurde, auch wenn er ausdrücklich aus demSavedStateHandle
entfernt wurde. Daher werden Standardwerte und wiederhergestellte Werte inSavedStateHandle
nicht mehr zusammengeführt. Stattdessen werden nur die wiederhergestellten Werte als vertrauenswürdige Quelle verwendet. (I53a4b)
Version 2.4
Version 2.4.1
9. Februar 2022
androidx.lifecycle:lifecycle-*:2.4.1
wird veröffentlicht. Version 2.4.1 enthält diese Commits.
Fehlerkorrekturen
- Backport aus Lifecycle
2.5.0-alpha01
: Es wurde ein Problem behoben, durch das der für eineSavedStateHandle
angegebene Standardwert nach dem Beenden und Neustarten des Prozesses wieder angezeigt wurde, auch wenn er ausdrücklich aus derSavedStateHandle
entfernt wurde. Daher werden Standardwerte und wiederhergestellte Werte inSavedStateHandle
nicht mehr zusammengeführt. Stattdessen werden nur die wiederhergestellten Werte als vertrauenswürdige Quelle verwendet. (I53a4b) lifecycle-process
hängt jetzt von Androidx Startup 1.1.1 ab, wodurch eine Regression behoben wurde, bei der die Verwendung vonProcessLifecycleInitializer
zu einemStartupException
führte. (b/216490724)
Version 2.4.0
27. Oktober 2021
androidx.lifecycle:lifecycle-*:2.4.0
wird veröffentlicht. Version 2.4.0 enthält diese Commits.
Wichtige Änderungen seit Version 2.3.0
@OnLifecycleEvent
wurde eingestellt. Stattdessen solltenLifecycleEventObserver
oderDefaultLifecycleObserver
verwendet werden.- Die Mediathek
androidx.lifecycle:lifecycle-viewmodel-compose
wurde hinzugefügt. Es bietetviewModel()
undLocalViewModelStoreOwner
.- Funktionsgefährdende Änderung:
ViewModelProvider
wurde in Kotlin neu geschrieben. Bei derViewModelProvider.Factory.create
-Methode sind keine typlosen Elemente mehr zulässig.
- Funktionsgefährdende Änderung:
androidx.lifecycle:lifecycle-runtime-ktx
wurde eine neue Coroutines API hinzugefügt:Lifecycle.repeatOnLifecycle
, API, die einen Codeblock in einer Coroutine ausführt, wenn sich der Lebenszyklus mindestens in einem bestimmten Zustand befindet. Der Block wird abgebrochen und neu gestartet, wenn der Lebenszyklus den Zielstatus erreicht und wieder verlässt.Flow.flowWithLifecycle
: API, die Werte aus dem vorgelagerten Fluss ausgibt, wenn sich der Lebenszyklus mindestens in einem bestimmten Status befindet.DefaultLifecycleObserver
wurde vonlifecycle.lifecycle-common-java8
nachlifecycle.lifecycle-common
verschoben.lifecycle.lifecycle-common-java8
bietet keine zusätzlichen Funktionen mehr im Vergleich zulifecycle.lifecycle-common
. Daher kann die Abhängigkeit vonlifecycle.lifecycle-common-java8
durchlifecycle.lifecycle-common
ersetzt werden.- Die nicht coroutines API von
lifecycle-viewmodel-ktx
wurde in das Modullifecycle-viewmodel
verschoben. lifecycle-process
verwendet jetztandroidx.startup
, um dieProcessLifecycleOwner
zu initialisieren.Bisher wurde dies von
androidx.lifecycle.ProcessLifecycleOwnerInitializer
durchgeführt.Wenn Sie
tools:node="remove"
verwendet haben, um den Prozesslebenszyklus in der Vergangenheit zu initialisieren, gehen Sie stattdessen so vor:ContentProvider
<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.lifecycle.ProcessLifecycleInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
(oder)
<!-- If you want to disable androidx.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
Version 2.4.0-rc01
29. September 2021
androidx.lifecycle:lifecycle-*:2.4.0-rc01
wird ohne Änderungen gegenüber Lifecycle 2.4.0-beta01 veröffentlicht. Version 2.4.0-rc01 enthält diese Commits.
Version 2.4.0-beta01
15. September 2021
androidx.lifecycle:lifecycle-*:2.4.0-beta01
wird veröffentlicht. Version 2.4.0-beta01 enthält diese Commits.
API-Änderungen
@OnLifecycleEvent
wurde eingestellt. Stattdessen solltenLifecycleEventObserver
oderDefaultLifecycleObserver
verwendet werden. (I5a8fa)- DefaultLifecycleObserver wurde von
androidx.lifecycle.lifecycle-common-java8
nachandroidx.lifecycle.lifecycle-common
verschoben.androidx.lifecycle.lifecycle-common-java8
bietet keine zusätzlichen Funktionen mehr im Vergleich zuandroidx.lifecycle.lifecycle-common
. Daher kann die Abhängigkeit vonandroidx.lifecycle.lifecycle-common-java8
durchandroidx.lifecycle.lifecycle-common
ersetzt werden. (I021aa) - Die Nicht-Coroutines-API von
lifecycle-viewmodel-ktx
wurde in das Modullifecycle-viewmodel
verschoben. (I6d5b2)
Externer Beitrag
Version 2.4.0-alpha03
4. August 2021
androidx.lifecycle:lifecycle-*:2.4.0-alpha03
wird veröffentlicht. Version 2.4.0-alpha03 enthält diese Commits.
API-Änderungen
- Unterbrechung der Codebasis: ViewModelProvider wurde in Kotlin neu geschrieben.
Bei der
ViewModelProvider.Factory.create
-Methode ist „nullable“ nicht mehr als generischer Typ zulässig. (I9b9f6)
Verhaltensänderungen
Lifecycle.repeatOnLifecycle
:block
wird jetzt bei wiederholter Ausführung immer seriell aufgerufen. (Ibab33)
Externer Beitrag
- Vielen Dank an chao2zhang für die Korrektur der Code-Snippets in der
repeatOnLifecycle
-Dokumentation. #205.
Version 2.4.0-alpha02
16. Juni 2021
androidx.lifecycle:lifecycle-*:2.4.0-alpha02
wird veröffentlicht. Version 2.4.0-alpha02 enthält diese Commits.
Neue Funktionen
lifecycle-runtime-ktx
enthält jetzt eine neueRepeatOnLifecycleWrongUsage
-Lint-Prüfung, die erkennt, wennrepeateOnLifecycle
inonStart()
oderonResume()
falsch verwendet wird. (706078, b/187887400)
API-Änderungen
- Die
LifecycleOwner.addRepeatingJob
API wird zugunsten vonLifecycle.repeatOnLifecycle
entfernt, die strukturierte Parallelität berücksichtigt und einfacher zu verstehen ist. (I4a3a8) - Machen Sie
ProcessLifecycleInitializer
öffentlich, damit andereandroidx.startup.Initializer
s diese als Abhängigkeiten verwenden können. (I94c31)
Fehlerkorrekturen
- Ein Problem mit der
NullSafeMutableLiveData
-Lint-Prüfung, wenn das Feld Modifikatoren hat, wurde behoben. (#147, b/183696616) - Ein weiteres Problem mit der
NullSafeMutableLiveData
-Lint-Prüfung bei der Verwendung von Gattungen wurde behoben. (#161, b/184830263)
Externer Beitrag
- Vielen Dank an maxsav für die Verbesserung der
NullSafeMutableLiveData
-Lint-Prüfung. (#147, b/183696616) - Vielen Dank an kozaxinan für die Verbesserung der
NullSafeMutableLiveData
-Lint-Prüfung. (#161, b/184830263)
Version 2.4.0-alpha01
24. März 2021
androidx.lifecycle:lifecycle-*:2.4.0-alpha01
wird veröffentlicht. Version 2.4.0-alpha01 enthält diese Commits.
Verhaltensänderungen
lifecycle-process
verwendet jetztandroidx.startup
, um dieProcessLifecycleOwner
zu initialisieren.Bisher wurde dies von
androidx.lifecycle.ProcessLifecycleOwnerInitializer
durchgeführt.Wenn Sie
tools:node="remove"
verwendet haben, um den Prozesslebenszyklus in der Vergangenheit zu initialisieren, gehen Sie stattdessen so vor:ContentProvider
<provider android:name="androidx.startup.InitializationProvider" android:authorities=\"${applicationId}.androidx-startup" android:exported="false" tools:node=\"merge"> <!-- If you are using androidx.startup to initialize other components --> <meta-data android:name="androidx.lifecycle.ProcessLifecycleInitializer" android:value="androidx.startup" tools:node="remove" /> </provider>
(oder)
<!-- If you want to disable androidx.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
API-Änderungen
- Es wurde eine
Flow.flowWithLifecycle
API hinzugefügt, die Werte aus dem vorgelagerten Fluss ausgibt, wenn der Lebenszyklus mithilfe derLifecycle.repeatOnLifecycle
API mindestens in einem bestimmten Status ist. Dies ist eine Alternative zur ebenfalls neuenLifecycleOwner.addRepeatinJob
API. (I0f4cd)
Fehlerkorrekturen
- Ab Lifecycle 2.3.1: Mit der
NonNullableMutableLiveData
-Lint-Regel kann jetzt richtig zwischen Feldvariablen mit unterschiedlicher Nullbarkeit unterschieden werden. (b/169249668)
Lifecycle Viewmodel Compose Version 1.0.0
Version 1.0.0-alpha07
16. Juni 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07
wird veröffentlicht. Version 1.0.0-alpha07 enthält diese Commits.
Bruchstellenfreie API-Änderungen
- Für
viewModel()
kann jetzt optional einViewModelStoreOwner
angegeben werden. So können Sie einfacher mit anderen Inhabern als demLocalViewModelStoreOwner
zusammenarbeiten. So können Sie beispielsweise jetzt mitviewModel(navBackStackEntry)
ein ViewModel abrufen, das mit einem bestimmten Navigationsgraphen verknüpft ist. (I2628d, b/188693123)
Version 1.0.0-alpha06
2. Juni 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06
wird veröffentlicht. Version 1.0.0-alpha06 enthält diese Commits.
Aktualisiert, um mit Compose-Version 1.0.0-beta08
kompatibel zu sein.
Version 1.0.0-alpha05
18. Mai 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05
wird veröffentlicht. Version 1.0.0-alpha05 enthält diese Commits.
Neue Funktionen
- Aktualisiert, um mit Compose-Version
1.0.0-beta07
kompatibel zu sein.
Fehlerkorrekturen
- Die AndroidManifest-Dateien aus „ui-test-manifest“ und „ui-tooling-data“ sind jetzt mit Android 12 kompatibel (I6f9de, b/184718994)
Version 1.0.0-alpha04
7. April 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04
wird veröffentlicht. Version 1.0.0-alpha04 enthält diese Commits.
Änderungen an Abhängigkeiten
- Mit dieser Version können
androidx.hilt:hilt-navigation-compose
undandroidx.navigation:navigation-compose
Abhängigkeiten vonandroidx.compose.compiler:compiler:1.0.0-beta04
undandroidx.compose.runtime:runtime:1.0.0-beta04
synchronisieren. Für Version 1.0.0 müssen Compiler und Laufzeit übereinstimmen.
Version 1.0.0-alpha03
10. März 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha03
wird veröffentlicht. Version 1.0.0-alpha03 enthält diese Commits.
API-Änderungen
LocalViewModelStoreOwner.current
gibt jetzt eine optionaleViewModelStoreOwner
zurück, um besser zu bestimmen, ob eineViewModelStoreOwner
in der aktuellen Komposition verfügbar ist. Bei APIs, für die eineViewModelStoreOwner
erforderlich ist, z. B.viewModel()
undNavHost
, wird weiterhin eine Ausnahme ausgelöst, wenn keineViewModelStoreOwner
festgelegt ist. (Idf39a)
Lifecycle-Viewmodel-Compose Version 1.0.0-alpha02
24. Februar 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02
wird veröffentlicht. Version 1.0.0-alpha02 enthält diese Commits.
API-Änderungen
LocalViewModelStoreOwner
hat jetztprovides
-Funktionen, die mitCompositionLocalProvider
verwendet werden können und dieasProvidableCompositionLocal()
API ersetzen. (I45d24)
Lifecycle-Viewmodel-Compose Version 1.0.0-alpha01
10. Februar 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01
wird veröffentlicht. Version 1.0.0-alpha01 enthält diese Commits.
Neue Funktionen
- Das
viewModel()
-Komposit undLocalViewModelStoreOwner
wurden ausandroidx.compose.ui.viewinterop
in dieses Artefakt imandroidx.lifecycle.viewmodel.compose
-Paket verschoben. (I7a374)
Version 2.3.1
Lebenszyklusversion 2.3.1
24. März 2021
androidx.lifecycle:lifecycle-*:2.3.1
wird veröffentlicht. Version 2.3.1 enthält diese Commits.
Fehlerkorrekturen
- Die
NonNullableMutableLiveData
-Lint-Regel kann jetzt richtig zwischen Feldvariablen mit unterschiedlicher Nullbarkeit unterscheiden. (b/169249668)
Version 2.3.0
Version 2.3.0
10. Februar 2021
androidx.lifecycle:lifecycle-*:2.3.0
wird veröffentlicht. Version 2.3.0 enthält diese Commits.
Wichtige Änderungen seit Version 2.2.0
SavedStateHandle
-Unterstützung für nicht paketbare Klassen:SavedStateHandle
unterstützt jetzt die Lazy-Serialisierung. Sie könnensetSavedStateProvider()
für einen bestimmten Schlüssel aufrufen und einenSavedStateProvider
angeben, der einen Rückruf ansaveState()
erhält, wennSavedStateHandle
aufgefordert wird, seinen Status zu speichern. Weitere Informationen finden Sie unter Nicht parzellierbare Klassen speichern.- Durchsetzung des Lebenszyklusverhaltens:
- LifecycleRegistry erzwingt jetzt
DESTROYED
als Endstatus. LifecycleRegistry
prüft jetzt, ob seine Methoden im Hauptthread aufgerufen werden. Das war immer eine Anforderung für die Lebenszyklen von Aktivitäten, Fragmenten usw. Das Hinzufügen von Beobachtern aus nicht primären Threads führte zu schwer zu erkennenden Abstürzen bei der Laufzeit. BeiLifecycleRegistry
-Objekten, die zu Ihren eigenen Komponenten gehören, können Sie die Prüfungen mithilfe vonLifecycleRegistry.createUnsafe(...)
explizit deaktivieren. Sie müssen dann jedoch dafür sorgen, dass eine ordnungsgemäße Synchronisierung vorhanden ist, wenn auf diesesLifecycleRegistry
aus verschiedenen Threads zugegriffen wird.
- LifecycleRegistry erzwingt jetzt
- Lebenszyklusstatus- und Ereignis-Hilfsmethoden:
Lifecycle.Event
wurde statische Hilfsmethoden vondownFrom(State)
,downTo(State)
,upFrom(State)
undupTo(State)
hinzugefügt, umEvent
anhand vonState
und Übergangsrichtung zu generieren. Die MethodegetTargetState()
wurde hinzugefügt. Sie gibt denState
an, zu dem der Lebenszyklus direkt nach demEvent
übergeht. withStateAtLeast
: Es wurdenLifecycle.withStateAtLeast
APIs hinzugefügt, die auf einen Lebenszyklusstatus warten und einen nicht angehaltenen Codeblock synchron zum Zeitpunkt des Statuswechsels ausführen und dann mit dem Ergebnis fortfahren. Diese APIs unterscheiden sich von den vorhandenenwhen*
-Methoden, da sie keinen aussetzenden Code ausführen und keinen benutzerdefinierten Dispatcher verwenden. (aosp/1326081)ViewTree
APIs: Mit einer neuenViewTreeLifecycleOwner.get(View)
- undViewTreeViewModelStoreOwner.get(View)
API können Sie die enthaltenenLifecycleOwner
- bzw.ViewModelStoreOwner
-Elemente anhand einerView
-Instanz abrufen. Sie müssen auf Activity1.2.0
, Fragment1.3.0
und AppCompat 1.3.0-alpha01 oder höher umstellen, um diese Informationen korrekt einzugeben. Die Kotlin-ErweiterungenfindViewTreeLifecycleOwner
undfindViewTreeViewModelStoreOwner
sind inlifecycle-runtime-ktx
bzw.lifecycle-viewmodel-ktx
verfügbar.- Einstellung der Kotlin-Erweiterung
LiveData.observe()
: Die Kotlin-ErweiterungLiveData.observe()
, die für die Verwendung der Lambda-Syntax erforderlich ist, wird eingestellt, da sie bei der Verwendung von Kotlin 1.4 nicht mehr erforderlich ist.
Version 2.3.0-rc01
16. Dezember 2020
androidx.lifecycle:lifecycle-*:2.3.0-rc01
wird veröffentlicht. Version 2.3.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Die
keys()
-Methode vonSavedStateHandle
ist jetzt vor und nach dem Speichern des Status konsistent. Sie enthält jetzt zusätzlich zu den Schlüsseln, die mitset()
undgetLiveData()
verwendet werden, auch Schlüssel, die zuvor mitsetSavedStateProvider()
verwendet wurden. (aosp/1517919, b/174713653)
Externer Beitrag
- Die APIs zum Pausieren lebenszyklusbewusster Tasks verarbeiten jetzt Anrufe an
yield()
besser. Viele Grüße Nicklas Ansman Giertz (aosp/1430830, b/168777346)
Version 2.3.0-beta01
1. Oktober 2020
androidx.lifecycle:lifecycle-*:2.3.0-beta01
wird veröffentlicht. Version 2.3.0-beta01 enthält diese Commits.
API-Änderungen
- Die Kotlin-Erweiterung
LiveData.observe()
, die für die Verwendung der Lambda-Syntax erforderlich ist, wird jetzt eingestellt, da sie bei der Verwendung von Kotlin 1.4 nicht mehr erforderlich ist. (I40d3f)
Fehlerkorrekturen
- Upgrade von androidx auf Kotlin 1.4 (Id6471, b/165307851, b/165300826)
Änderungen an der Dokumentation
- Die Dokumentation für den
liveData
-Builder undasLiveData()
wurde aktualisiert und enthält jetzt Details zum Ändern der angegebenen Zeitüberschreitungswerte. (aosp/1122324)
Version 2.3.0-alpha07
19. August 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha07
wird veröffentlicht. Version 2.3.0-alpha07 enthält diese Commits.
Fehlerkorrekturen
- Ein Absturzproblem bei der
NullSafeMutableLiveData
-Lint-Prüfung wurde behoben. (aosp/1395367)
Version 2.3.0-alpha06
22. Juli 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha06
wird veröffentlicht. Version 2.3.0-alpha06 enthält diese Commits.
Neue Funktionen
- Statische Hilfsmethoden von
downFrom(State)
,downTo(State)
,upFrom(State)
undupTo(State)
wurden zuLifecycle.Event
hinzugefügt, umEvent
anhand vonState
und der Übergangsrichtung zu generieren. Die MethodegetTargetState()
wurde hinzugefügt. Sie gibt denState
an, zu dem der Lebenszyklus direkt nach demEvent
übergeht. (I00887) - Es wurden
Lifecycle.withStateAtLeast
APIs hinzugefügt, die auf einen Lebenszyklusstatus warten und einen nicht angehaltenen Codeblock synchron zum Zeitpunkt des Statuswechsels ausführen und dann mit dem Ergebnis fortfahren. Diese APIs unterscheiden sich von den vorhandenenwhen*
-Methoden, da sie keinen aussetzenden Code ausführen und keinen benutzerdefinierten Dispatcher verwenden. (aosp/1326081)
Verhaltensänderungen
- LifecycleRegistry erzwingt jetzt
DESTROYED
als Endstatus. (I00887) LifecycleRegistry
prüft jetzt, ob seine Methoden im Hauptthread aufgerufen werden. Das war immer eine Anforderung für die Lebenszyklen von Aktivitäten, Fragmenten usw. Das Hinzufügen von Beobachtern aus nicht primären Threads führte zu schwer zu erkennenden Abstürzen bei der Laufzeit. BeiLifecycleRegistry
-Objekten, die zu Ihren eigenen Komponenten gehören, können Sie die Prüfungen mithilfe vonLifecycleRegistry.createUnsafe(...)
explizit deaktivieren. Sie müssen dann jedoch dafür sorgen, dass eine ordnungsgemäße Synchronisierung vorhanden ist, wenn auf diesesLifecycleRegistry
aus verschiedenen Threads zugegriffen wird (Ie7280, b/137392809)
Fehlerkorrekturen
- Ein Absturz in
NullSafeMutableLiveData
wurde behoben. (b/159987480) - Ein
ObsoleteLintCustomCheck
für Lint-Prüfungen wurde behoben, die mitlifecycle-livedata-core-ktx
(und insbesondereNullSafeMutableLiveData
) gebündelt sind. (b/158699265)
Version 2.3.0-alpha05
24. Juni 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha05
wird veröffentlicht. Version 2.3.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
LiveData
kann jetzt wiedereintretende Fälle besser verarbeiten und doppelte Aufrufe vononActive()
oderonInactive()
vermeiden. (b/157840298)- Ein Problem wurde behoben, bei dem Lint-Prüfungen bei Verwendung von Android Studio 4.1 Canary 6 oder höher nicht ausgeführt wurden. (aosp/1331903)
Version 2.3.0-alpha04
10. Juni 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha04
wird veröffentlicht. Version 2.3.0-alpha04 enthält diese Commits.
Fehlerkorrekturen
- Ein Absturz bei der
NonNullableMutableLiveData
-Lint-Prüfung wurde behoben. (b/157294666) - Die
NonNullableMutableLiveData
-Lint-Prüfung deckt jetzt deutlich mehr Fälle ab, in denen einnull
-Wert für eineMutableLiveData
mit einem nicht nullwertigen Typparameter festgelegt wurde. (b/156002218)
Version 2.3.0-alpha03
20. Mai 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha03
werden veröffentlicht. Version 2.3.0-alpha03 enthält diese Commits.
Neue Funktionen
SavedStateHandle
unterstützt jetzt die Lazy-Serialisierung. Sie könnensetSavedStateProvider()
für einen bestimmten Schlüssel aufrufen und dabei einenSavedStateProvider
angeben, der einen Callback ansaveState()
erhält, wenn derSavedStateHandle
aufgefordert wird, seinen Status zu speichern. (b/155106862)- Mit einer neuen
ViewTreeViewModelStoreOwner.get(View)
API können Sie die enthalteneViewModelStoreOwner
anhand einerView
-Instanz abrufen. Sie müssen auf Activity1.2.0-alpha05
, Fragment1.3.0-alpha05
und AppCompat1.3.0-alpha01
umstellen, um diese Informationen korrekt einfügen zu können.lifecycle-viewmodel-ktx
wurde einefindViewModelStoreOwner()
-Kotlin-Erweiterung hinzugefügt. (aosp/1295522)
Fehlerkorrekturen
- Ein Problem wurde behoben, durch das die
MutableLiveData
-Lint-Prüfungen, die im Lifecycle2.3.0-alpha01
veröffentlicht wurden, nicht zusammen mit demlifecycle-livedata-core-ktx
-Artefakt veröffentlicht wurden. (b/155323109)
Version 2.3.0-alpha02
29. April 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha02
wird veröffentlicht. Version 2.3.0-alpha02 enthält diese Commits.
API-Änderungen
- Bei
SavedStateViewModelFactory
können Sie dem Konstruktor jetzt eine Null-Application
übergeben, um Fälle besser zu unterstützen, in denen keineApplication
verfügbar ist und keine Unterstützung fürAndroidViewModel
erforderlich ist. (aosp/1285740)
Fehlerkorrekturen
- Die Leistung beim Kaltstart wurde verbessert, da Fehler bei der Klassenüberprüfung auf Geräten mit API 28 und niedrigerer Version vermieden werden. (aosp/1282118)
Version 2.3.0-alpha01
4. März 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha01
wird veröffentlicht. Version 2.3.0-alpha01 enthält diese Commits.
Neue Funktionen
- Mit einer neuen
ViewTreeLifecycleOwner.get(View)
API können Sie die enthalteneLifecycleOwner
anhand einerView
-Instanz abrufen. Sie müssen ein Upgrade auf Aktivität1.2.0-alpha01
und Fragment1.3.0-alpha01
ausführen, um diese Informationen korrekt einfügen zu können. EinefindViewTreeLifecycleOwner
-Kotlin-Erweiterung ist inlifecycle-runtime-ktx
verfügbar. (aosp/1182361, aosp/1182956) - Es wurde eine neue Lint-Prüfung hinzugefügt, die Sie warnt, wenn Sie einen
null
-Wert für eineMutableLiveData
festlegen, die in Kotlin als nicht null definiert wurde. Diese Funktion ist verfügbar, wenn Sielivedata-core-ktx
- oderlivedata-ktx
-Artefakte verwenden. (aosp/1154723, aosp/1159092) - Es ist ein neues
lifecycle-runtime-testing
-Artefakt verfügbar, das eineTestLifecycleOwner
bereitstellt, dieLifecycleOwner
implementiert und eine threadsichere, veränderlicheLifecycle
bietet. (aosp/1242438)
Fehlerkorrekturen
- Das
lifecycle-runtime
-Artefakt hat jetzt einen eindeutigen Paketnamen. (aosp/1187196)
Version 2.2.0
ViewModel-Savedstate Version 2.2.0
5. Februar 2020
androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0
wird veröffentlicht. Version 2.2.0 enthält diese Commits.
Der SavedState des Lifecycle ViewModel hat jetzt dieselbe Version wie andere Lifecycle-Artefakte. Das Verhalten von 2.2.0
ist mit dem von 1.0.0
identisch.
Version 2.2.0
22. Januar 2020
androidx.lifecycle:lifecycle-*:2.2.0
wird veröffentlicht. Version 2.2.0 enthält diese Commits.
Wichtige Änderungen seit Version 2.1.0
- Integration von Lifecycle-Coroutinen: Das neue
lifecycle-runtime-ktx
-Artefakt ermöglicht die Integration von Lifecycle und Kotlin-Coroutinen. Dielifecycle-livedata-ktx
wurde außerdem um coroutines erweitert. Weitere Informationen finden Sie unter Kotlin-Coroutinen mit Architekturkomponenten verwenden. - Einstellung von
ViewModelProviders.of()
:ViewModelProviders.of()
wurde eingestellt. Sie können dem neuenViewModelProvider(ViewModelStoreOwner)
-Konstruktor einFragment
oderFragmentActivity
übergeben, um dieselbe Funktionalität zu erzielen, wenn Sie Fragment1.2.0
verwenden. - Einstellung des
lifecycle-extensions
-Artefakts: Durch die oben genannte Einstellung vonViewModelProviders.of()
wird mit diesem Release auch die letzte API inlifecycle-extensions
eingestellt. Dieses Artefakt sollte jetzt vollständig als eingestellt betrachtet werden. Wir empfehlen Ihnen dringend, je nach den erforderlichen Lebenszyklusartefaktenlifecycle-service
(wenn SieLifecycleService
verwenden) oderlifecycle-process
(wenn SieProcessLifecycleOwner
verwenden) anstelle vonlifecycle-extensions
zu verwenden, da es keine zukünftige2.3.0
-Version vonlifecycle-extensions
geben wird. - Gradle Incremental Annotation Processor: Der Lifecycle-Anmerkungs-Prozessor ist standardmäßig inkrementell.
Wenn Ihre App in der Programmiersprache Java 8 geschrieben ist, können Sie stattdessen
DefautLifecycleObserver
verwenden. Wenn sie in der Programmiersprache Java 7 geschrieben ist, können SieLifecycleEventObserver
verwenden.
Version 2.2.0-rc03
4. Dezember 2019
androidx.lifecycle:lifecycle-*:2.2.0-rc03
wird veröffentlicht. Version 2.2.0-rc03 enthält diese Commits.
Fehlerkorrekturen
- Ein Fehler wurde behoben, der auftrat, wenn eine gemockte
ViewModel
inViewModelStore
gespeichert und später mit der Standardfabrik abgefragt wurde. - Fehler bei der Verwendung von
Dispatchers.Main.immediate
inlaunchWhenCreated
und ähnlichen Methoden behoben, die während des entsprechenden Lebenszyklusereignisses synchron aufgerufen werden sollen. (aosp/1156203)
Externe Beiträge
- Vielen Dank an Anders Järleberg für die Behebung dieses Problems. (aosp/1156203)
- Vielen Dank an Vsevolod Tolstopyatov von Jetbrains für die Überprüfung einer Implementierung der Inline-Ausführung.
Änderungen an Abhängigkeiten
- Lebenszykluserweiterungen hängen jetzt vom Fragment
1.2.0-rc03
ab.
Version 2.2.0-rc02
7. November 2019
androidx.lifecycle:lifecycle-*:2.2.0-rc02
wird veröffentlicht. Version 2.2.0-rc02 enthält diese Commits.
Fehlerkorrekturen
- Ein Fehler in der ProGuard-Einrichtung der Bibliothek wurde behoben, der Geräte mit API 28 und höher betraf, wenn die Ziel-API unter 29 lag. (b/142778206)
Version 2.2.0-rc01
23. Oktober 2019
androidx.lifecycle:lifecycle-*:2.2.0-rc01
wird veröffentlicht. Version 2.2.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, aufgrund dessen
launchWhenCreated
und zugehörige Methoden einen Frame später als die zugehörige Lebenszyklusmethode ausgeführt wurden, daDispatchers.Main
anstelle vonDispatchers.Main.immediate
verwendet wurde. (aosp/1145596)
Externe Beiträge
- Vielen Dank an Nicklas Ansman für die Behebung! (aosp/1145596)
Version 2.2.0-beta01
9. Oktober 2019
androidx.lifecycle:lifecycle-*:2.2.0-beta01
wird veröffentlicht. Version 2.2.0-beta01 enthält diese Commits.
Fehlerkorrekturen
- Behebung einer Regression, die in Lifecycle 2.2.0-alpha05 bei der Sortierung von
ProcessLifecycleOwner
und dem Wechsel vonLifecycleOwner
der Aktivität zu „gestartet“ und „fortgesetzt“ auf Android 10-Geräten aufgetreten ist. (aosp/1128132) - Eine Regression wurde behoben, die in Lifecycle
2.2.0-alpha05
eingeführt wurde und bei Verwendung der Version2.0.0
oder2.1.0
vonlifecycle-process
zu einemNullPointerException
führte. (b/141536990)
Version 2.2.0-alpha05
18. September 2019
androidx.lifecycle:lifecycle-*:2.2.0-alpha05
wird veröffentlicht. Version 2.2.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
- Es wurde eine Race-Bedingung im LiveData-Builder für Tasks behoben. b/140249349
Version 2.2.0-alpha04
5. September 2019
androidx.lifecycle:lifecycle-*:2.2.0-alpha04
wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Neue Funktionen
- Für
lifecycleScope
,whenCreated
,whenStarted
,whenResumed
,viewModelScope
und die zugrunde liegende Implementierung vonliveData
wird jetztDispatchers.Main.immediate
anstelle vonDispatchers.Main
verwendet. (b/139740492)
Externe Beiträge
- Vielen Dank an Nicklas Ansman für die Umstellung auf
Dispatchers.Main.immediate
. (aosp/1106073)
Version 2.2.0-alpha03
7. August 2019
androidx.lifecycle:lifecycle-*:2.2.0-alpha03
wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Neue Funktionen
- Implementierungen von
ViewModelStoreOwner
können jetzt optionalHasDefaultViewModelProviderFactory
implementieren, um eine Standard-ViewModelProvider.Factory
anzugeben. Dies gilt für Aktivitäten1.1.0-alpha02
, Fragmente1.2.0-alpha02
und Navigation2.2.0-alpha01
. (aosp/1092370, b/135716331)
API-Änderungen
ViewModelProviders.of()
wurde eingestellt. Sie können dem neuen KonstruktorViewModelProvider(ViewModelStoreOwner)
eineFragment
oderFragmentActivity
übergeben, um dieselbe Funktionalität zu erzielen. (aosp/1009889)
Version 2.2.0-alpha02
2. Juli 2019
androidx.lifecycle:*:2.2.0-alpha02
wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
API-Änderungen
LiveDataScope.initialValue
wurde durchLiveDataScope.latestValue
ersetzt, mit dem der aktuelle ausgestrahlte Wert des BlocksliveData
erfasst wird.- Dem
liveData
-Builder wurde eine neue Überladung hinzugefügt, die dentimeout
-Parameter vom TypDuration
empfängt.
Version 2.2.0-alpha01
7. Mai 2019
androidx.lifecycle:*:2.2.0-alpha01
wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Neue Funktionen
- Diese Version enthält neue Funktionen, die die Unterstützung von Kotlin-Coroutinen für Lifecycle und LiveData bieten. Eine ausführliche Dokumentation dazu finden Sie hier.
ViewModel-SavedState Version 1.0.0
Version 1.0.0
22. Januar 2020
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0
wird veröffentlicht. Version 1.0.0 enthält diese Commits.
Wichtige Funktionen in 1.0.0
- Die neue Klasse SavedStateHandle wurde hinzugefügt. So können Ihre
ViewModel
-Klassen auf den gespeicherten Status zugreifen und zu diesem beitragen. Dieses Objekt kann im Konstruktor der KlasseViewModel
empfangen werden. Die von Fragmenten standardmäßig bereitgestellten Fabriken und AppCompatActivity fügenSavedStateHandle
automatisch ein. - AbstractSavedStateViewModelFactory wurde hinzugefügt. Sie können damit benutzerdefinierte Fabriken für Ihre
ViewModel
erstellen und ihnen Zugriff aufSavedStateHandle
gewähren.
ViewModel-Savedstate Version 1.0.0-rc03
4. Dezember 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03
wird veröffentlicht. Version 1.0.0-rc03 enthält diese Commits.
Änderungen an Abhängigkeiten
- Der SavedState des Lifecycle ViewModel hängt jetzt vom Lifecycle
2.2.0-rc03
ab.
Viewmodel-Savedstate Version 1.0.0-rc02
7. November 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc02
wird veröffentlicht. Version 1.0.0-rc02 enthält diese Commits.
Änderungen an Abhängigkeiten
- Jetzt hängt es vom Lebenszyklus
2.2.0-rc02
ab.
ViewModel-SavedState Version 1.0.0-rc01
23. Oktober 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01
wird ohne Änderungen gegenüber 1.0.0-beta01
veröffentlicht. Version 1.0.0-rc01 enthält diese Commits.
ViewModel-Savedstate Version 1.0.0-beta01
9. Oktober 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-beta01
wird veröffentlicht. Version 1.0.0-beta01 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, durch das beim ersten Zugriff auf ein SavedState ViewModel in
Activity.onActivityResult()
eineIllegalStateException
zurückgegeben wurde. (b/139093676) - Ein Problem mit
IllegalStateException
bei Verwendung vonAbstractSavedStateViewModelFactory
wurde behoben. (b/141225984)
ViewModel-SavedState Version 1.0.0-alpha05
18. September 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha05
wird veröffentlicht. Version 1.0.0-alpha05 enthält diese Commits.
API-Änderungen
SavedStateViewModelFactory
erweitertAbstractSavedStateViewModelFactory
nicht mehr undSavedStateHandle
wird nur für ViewModels erstellt, für die es angefordert wurde (aosp/1113593)
ViewModel-SavedState Version 1.0.0-alpha03
7. August 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03
wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Wichtige Änderungen
lifecycle-viewmodel-savedstate
ist nicht mehr vonfragment
abhängig und die zugehörigen KonstruktorenSavedStateViewModelFactory(Fragment)
undSavedStateViewModelFactory(FragmentActivity)
wurden entfernt. Stattdessen istSavedStateViewModelFactory
jetzt die Standard-Fabrik für Aktivität1.1.0-alpha02
, Fragment1.2.0-alpha02
und Navigation2.2.0-alpha01
. (b/135716331)
ViewModel-SavedState Version 1.0.0-alpha02
2. Juli 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha02
wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Neue Funktionen
- Überladung von
SavedStateHandle.getLiveData()
hinzugefügt, die einen Standardwert akzeptiert.
API-Änderungen
SavedStateVMFactory
wird inSavedStateViewModelFactory
umbenannt.AbstractSavedStateVMFactory
wird inAbstractSavedStateViewModelFactory
umbenannt.
ViewModel-Savedstate Version 1.0.0-alpha01
13. März 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01
wird veröffentlicht. Das vollständige Commit-Log für diese erste Version finden Sie hier.
Neue Funktionen
- Jetzt kann
ViewModels
zu „savedstate“ beitragen. Dazu verwenden Sie die neu eingeführte ViewModel-FactorySavedStateVMFactory
und Ihr ViewModel sollte einen Konstruktor haben, der dasSavedStateHandle
-Objekt als Parameter empfängt.
Version 2.1.0
Wichtige Änderungen seit Version 2.0.0
LifecycleEventObserver
wurde hinzugefügt, wenn ein Stream von Lebenszyklusereignissen erforderlich ist. Es handelt sich um eine öffentliche API und nicht um eine ausgeblendeteGenericLifecycleObserver
-Klasse.- KTX-Erweiterungen für
LiveData.observe
- undTransformations.*
-Methoden wurden hinzugefügt. Transformations.distinctUntilChanged
wurde hinzugefügt. Damit wird ein neues LiveData-Objekt erstellt, das erst dann einen Wert ausgibt, wenn sich der QuellwertLiveData
geändert hat.- Unterstützung für Tasks in ViewModels hinzugefügt, indem die Erweiterungseigenschaft
ViewModel.viewModelScope
hinzugefügt wurde.
Version 2.1.0
5. September 2019
androidx.lifecycle:lifecycle-*:2.1.0
wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Version 2.1.0-rc01
2. Juli 2019
androidx.lifecycle:*:2.1.0-rc01
wird ohne Änderungen gegenüber androidx.lifecycle:*:2.1.0-beta01
veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Version 2.1.0-beta01
7. Mai 2019
androidx.lifecycle:*:2.1.0-beta01
wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Neue Funktionen
- Lebenszyklen werden in die Betaphase überführt: In früheren Alphaversionen eingeführte APIs wie
liveData
Erweiterungsfunktionen für Transformationen und Beobachtungen,ViewModel
Initialisierung mit Property-Delegierung und andere sind stabil und werden sich nicht ändern.
Version 2.1.0-alpha04
3. April 2019
androidx.lifecycle:*:2.1.0-alpha04
wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
API-Änderungen
- Wichtige Änderung: Die zugrunde liegende API von
by viewModels()
undby activityViewModels()
wurde geändert, um nicht nurViewModelStoreOwner
, sondern auchViewModelStore
direkt zu unterstützen. (aosp/932932)
Version 2.1.0-alpha03
13. März 2019
androidx.lifecycle:*:2.1.0-alpha03
wird veröffentlicht. Eine vollständige Liste der Commits in dieser Version finden Sie hier.
API-Änderungen
- "
ViewModelProvider.KeyedFactory
" wurde entfernt. Die zweite Benutzeroberfläche zusätzlich zuViewModelProvider.Factory
konnte nicht gut mit neuen Funktionen wie der Property-Delegierung in Kotlinby viewmodels {}
kombiniert werden. (aosp/914133)
Version 2.1.0-alpha02
30. Januar 2019
androidx.lifecycle 2.1.0-alpha02
wird veröffentlicht.
API-Änderungen
LifecycleRegistry
enthält jetzt einesetCurrentState()
-Methode, die die jetzt verworfenesetState()
-Methode ersetzt. (aosp/880715)
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem Mock-
ViewModel
-Instanzen abstürzten, wenn der enthalteneViewModelStore
gelöscht wurde. b/122273087
Version 2.1.0-alpha01
17. Dezember 2018
androidx.lifecycle 2.1.0-alpha01
wird veröffentlicht.
Neue Funktionen
LifecycleEventObserver
wurde hinzugefügt, wenn ein Stream von Lebenszyklusereignissen erforderlich ist. Es ist eine öffentliche API und keine ausgeblendeteGenericLifecycleObserver
-Klasse.- KTX-Erweiterungen für
LiveData.observe
- undTransformations.*
-Methoden wurden hinzugefügt. - Die Methode
Transformations.distinctUntilChanged
wurde hinzugefügt. Es wird ein neuesLiveData
-Objekt erstellt, das erst dann einen Wert ausgibt, wenn sich der Quell-LiveData-Wert geändert hat. - Unterstützung für Tasks in ViewModels: Die Erweiterungseigenschaft
ViewModel.viewModelScope
wurde hinzugefügt. ViewModelProvider.KeyedFactory
wurde hinzugefügt, eine Factory für ViewModels, diekey
undClass
in dercreate
-Methode empfängt.
Version 2.0.0
Version 2.0.0
21. September 2018
Lebenszyklus 2.0.0
wird mit einer Fehlerkorrektur aus 2.0.0-rc01
in ViewModel veröffentlicht.
Fehlerkorrekturen
- Behobene ProGuard-Regel für ViewModel, durch die Konstruktoren fälschlicherweise entfernt wurden b/112230489
Version 2.0.0-beta01
2. Juli 2018
Fehlerkorrekturen
- Proguard-Regel für LifecycleObserver korrigiert, sodass nur Implementierungen, nicht Unterschnittstellen beibehalten werden b/71389427
- Proguard-Regeln für ViewModels korrigiert, um Verschleierung und Verkleinerung zu ermöglichen
Versionen vor Android X
Fügen Sie für die folgenden Versionen von Lifecycle vor Android X die folgenden Abhängigkeiten hinzu:
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"
}
Version 1.1.1
21. März 2018
Es gibt nur eine kleine Änderung: android.arch.core.util.Function
wird von arch:runtime
nach arch:common
verschoben. So kann es ohne Laufzeitabhängigkeit verwendet werden, z.B. in paging:common
unten.
lifecycle:common
ist eine Abhängigkeit von lifecycle:runtime
. Diese Änderung wirkt sich also nicht direkt auf lifecycle:runtime
aus, sondern nur auf Module, die direkt von lifecycle:common
abhängen, wie z. B. die Paging-Funktion.
Version 1.1.0
22. Januar 2018
Änderungen an der Verpackung
Es sind jetzt neue, viel kleinere Abhängigkeiten verfügbar:
android.arch.lifecycle:livedata:1.1.0
android.arch.lifecycle:viewmodel:1.1.0
API-Änderungen
- Die veralteten
LifecycleActivity
undLifecycleFragment
wurden jetzt entfernt. Verwenden Sie stattdessenFragmentActivity
,AppCompatActivity
oderFragment
. @NonNull
Anmerkungen wurdenViewModelProviders
undViewModelStores
hinzugefügt- Der Konstruktor von
ViewModelProviders
wurde eingestellt. Verwenden Sie stattdessen die statischen Methoden. ViewModelProviders.DefaultFactory
wurde eingestellt. Verwenden Sie stattdessenViewModelProvider.AndroidViewModelFactory
.- Die statische
ViewModelProvider.AndroidViewModelFactory.getInstance(Application)
-Methode wurde hinzugefügt, um eine statischeFactory
abzurufen, die zum Erstellen vonViewModel
- undAndroidViewModel
-Instanzen geeignet ist.