Lebenszyklus
In dieser Tabelle sind alle Artefakte in der Gruppe androidx.lifecycle
aufgeführt.
Artefakt | Stabile Version | Releasekandidat | Beta-Ausgabe | Alpharelease |
---|---|---|---|---|
Lebenszyklus-* | 2.7.0 | 2.8.0-rc01 | − | − |
Lebenszyklus-Ansichtsmodell-Zusammensetzung | 2.7.0 | 2.8.0-rc01 | − | − |
Abhängigkeiten deklarieren
Zum Hinzufügen einer Abhängigkeit vom Lebenszyklus 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 Anwendung oder Ihr Modul die Abhängigkeiten für die benötigten Artefakte hinzu:
Kotlin
Groovig
dependencies { def lifecycle_version = "2.7.0" 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.7.0" 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
Groovig
dependencies { def lifecycle_version = "2.7.0" 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.7.0" 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
Dein Feedback hilft uns, Jetpack zu verbessern. Lassen Sie uns wissen, wenn Sie neue Probleme entdecken oder Ideen zur Verbesserung dieser Bibliothek haben. Sehen Sie sich die vorhandenen Probleme in dieser Bibliothek an, bevor Sie eine neue erstellen. Durch Klicken auf die Stern-Schaltfläche können Sie zu einem vorhandenen Problem abstimmen.
Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.
Version 2.8
Version 2.8.0-rc01
1. Mai 2024
androidx.lifecycle:lifecycle-*:2.8.0-rc01
wird freigegeben. Version 2.8.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Das Baseline-Profil für
lifecycle-common
-Klassen wurde nicht richtig gepackt. Diese sind jetzt in den automatisch angewendeten Empfehlungen fürlifecycle-runtime
verpackt. (aosp/3038274, b/322382422) - Es wurde eine unbeabsichtigte Änderung der Reihenfolge behoben, bei der
AutoCloseable
-Instanzen, die an ein ViewModel angehängt sind, gelöscht wurden – die vorherige Reihenfolge vonaddCloseable(String, AutoCloseable)
, dannaddClosable(AutoCloseable)
und dannonCleared()
wurde wiederhergestellt. (aosp/3041632) - Verbessertes Standardverhalten bei der Erstellung von
viewModelScope
für native und JVM Desktop-Umgebungen (aosp/3039221)
Externer Beitrag
- Vielen Dank an Victor Kropp, dass Sie die Prüfung des Hauptthreads auf JVM Desktop verbessert haben. (aosp/3037116)
Version 2.8.0-beta01
17. April 2024
androidx.lifecycle:lifecycle-*:2.8.0-beta01
wird freigegeben. Version 2.8.0-beta01 enthält diese Commits.
Neue Funktionen
- Das
lifecycle-runtime-compose
-Artefakt ist jetzt mit Kotlin Multiplatform kompatibel. Es wird sein Code nachcommon
verschoben und ein Android-Artefakt ausgeliefert, das der plattformübergreifenden 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 freigegeben. 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 ausgeliefert, das der plattformübergreifenden Unterstützung vonandroidx.compose
entspricht. Um diese Änderung zu berücksichtigen, akzeptiert die zusammensetzbareviewModel
-Methode jetzt neben einerjava.lang.Class
auch einKClass
. (b/330323282)
Fehlerkorrekturen
NullSafeMutableLiveData
wurde refaktoriert, um viele falsch positive Ergebnisse zu vermeiden. (I2d8c1, Iafb18, I03463, I7ecef)
Abhängigkeitsupdate
- Das Artefakt
lifecycle-viewmodel-compose
hängt jetzt von Compose 1.6.0 ab. - Der Lebenszyklus hängt jetzt von Profile Installer 1.3.1 ab.
Version 2.8.0-alpha03
20. März 2024
androidx.lifecycle:lifecycle-*:2.8.0-alpha03
wird freigegeben. Version 2.8.0-alpha03 enthält diese Commits.
Neue Funktionen
ViewModel.viewModelScope
ist jetzt ein überschreibbarer Konstruktorparameter, mit dem Sie Ihren eigenen Disponenten undSupervisorJob()
einfügen oder den Standardwert überschreiben können, indem Sie den inrunTest
verfügbarenbackgroundScope
verwenden. (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) }
Kotlin-Kompatibilität mit mehreren Plattformen
Das lifecycle-viewmodel
-Artefakt und die APIs wie ViewModel
, ViewModelStore
, ViewModelStoreOwner
und ViewModelProvider
werden jetzt in Artefakten bereitgestellt, die mit der Kotlin-Multiplattform kompatibel sind. (b/214568825)
Um dieser Änderung Rechnung zu tragen, gibt es nun für Methoden wie die für ViewModelProvider
, für die ein java.lang.Class<T>
verwendet wurde, eine entsprechende Methode, für die ein kotlin.reflect.KClass<T>
verwendet wird.
Die Binärkompatibilität unter Android wurde beibehalten, es gibt jedoch einige wichtige Änderungen beim Vergleich der Android-API-Oberfläche mit der allgemeinen API-Oberfläche:
- Das Erstellen einer
ViewModelProvider
-Instanz erfolgt jetzt über dieViewModelProvider.create()
-Methoden, anstatt ihren Konstruktor direkt aufzurufen. ViewModelProvider.NewInstanceFactory
undViewModelProvider.AndroidViewModelFactory
sind nur auf Android-Geräten verfügbar.- Es wird empfohlen, benutzerdefinierte Factorys ab
ViewModelProvider.Factory
zu erweitern und diecreate
-Methode, für dieCreationExtras
erforderlich ist, oder dieviewModelFactory
Kotlin-DSL zu verwenden.
- Es wird empfohlen, benutzerdefinierte Factorys ab
- Die Verwendung von
ViewModelProvider
ohne benutzerdefinierte Factory auf Nicht-JVM-Plattformen führt zu einemUnsupportedOperationException
. Auf JVM-Plattformen wird die Kompatibilität beibehalten, indem der no-args-Konstruktor ViewModel verwendet wird, wenn keine benutzerdefinierte Factory bereitgestellt wird. viewModelScope
wird auf Plattformen, auf denenDispatchers.Main
nicht verfügbar ist (z.B.EmptyCoroutineContext
Linux).
Änderungen des Verhaltens
InitializerViewModelFactory
(einschließlichviewModelFactory
-Builder-Funktion) gibt jetzt einIllegalArgumentException
aus, wenn bereits eininitializer
mit derselbenclazz: KClass<VM : ViewModel>
hinzugefügt wurde. (Ic3a36)
Fehlerkorrekturen
ViewModel.getCloseable
verarbeitet jetzt doppelte Schlüssel: Wenn derkey
bereits eineAutoCloseable
-Ressource zugeordnet ist, wird die alte Ressource ersetzt und sofort geschlossen. (Ibeb67)- Der Zugriff auf
viewModelScope
einesViewModel
ist jetzt Thread-sicher. (If4766, b/322407038)
Externer Beitrag
LocalLifecycleOwner
wurde von der Compose-UI nach „Lifecycle-runtime-compose“ verschoben, damit die auf Compose basierenden Hilfs-APIs außerhalb der Erstellungs-UI verwendet werden können. Vielen Dank, 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 freigegeben. Version 2.8.0-alpha02 enthält diese Commits.
Neue Funktionen
- Die APIs
dropUnlessResumed
unddropUnlessStarted
wurden hinzugefügt, mit denen Sie Klick- oder andere Ereignisse löschen können, die auch dann auftreten, wennLifecycleOwner
unter den angegebenenLifecycle.State
-Wert fällt. Sie kann beispielsweise zusammen mit der Funktion „Navigation schreiben“ verwendet werden, um die Verarbeitung von Klickereignissen zu vermeiden, nachdem der Wechsel 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 Basis-Lebenszyklusmodul verschoben. (Id787b, b/274800183) - Die
lifecycle-runtime-ktx
-Kotlin-Erweiterungen wurden in das Basis-Lebenszyklusmodul verschoben. (Ic3686, b/274800183) - Die
lifecycle-livedata-core-ktx
-Kotlin-Erweiterungen wurden in das Basis-Lebenszyklusmodul verschoben. (I54a3d, b/274800183)
Kotlin-Kompatibilität mit mehreren Plattformen
- Die zentralen Lifecycle 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
- Das Aufrufen von
LifecycleStartEffect
undLifecycleResumeEffect
ohne Schlüssel führt jetzt zu einem Fehler. Es folgt der gleiche Konvention wie dieDisposableEffect
API, die diese APIs spiegeln. (Ib0e0c, b/323518079) ViewModel
verwendet jetztAutoCloseable
anstelle vonCloseable
. Das ist eine abwärtskompatible Änderung. (I27f8e, b/214568825)LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData)
zugunsten vonLiveData.toPublisher(lifecycleOwner)
verworfen. (Iabe29, b/262623005)
Externer Beitrag
- Vielen Dank, Ivan Matkov von Jetbrains hat Lifecycle auf die Kotlin-Multiplattform umgestellt. (aosp/2926690, I0c5ac, If445d)
Version 2.8.0-alpha01
24. Januar 2024
androidx.lifecycle:lifecycle-*:2.8.0-alpha01
wird freigegeben. Version 2.8.0-alpha01 enthält diese Commits.
Neue Funktionen
ViewModel
unterstützt jetzt das Hinzufügen vonCloseable
-Objekten mit einerkey
, die das Abrufen der Objekte übergetCloseable()
ermöglicht. (I3cf63)
Version 2.7
Version 2.7.0
10. Januar 2024
androidx.lifecycle:lifecycle-*:2.7.0
wird freigegeben. Version 2.7.0 enthält diese Commits.
Wichtige Änderungen seit Version 2.6.0
TestLifecycleOwner
enthält jetzt die AussetzenfunktionsetCurrentState()
, die dafür sorgt, dass die Statusänderung und alleLifecycleObserver
-Callbacks vor der Rückkehr abgeschlossen werden. Im Gegensatz zur direkten Festlegung der EigenschaftcurrentState
wird hierrunBlocking
nicht verwendet. Daher kann sie ohne Bedenken innerhalb einer Koroutine, wie z. B. einer vonrunTest
bereitgestellten, verwendet werden.- Die
LiveData
-Erweiterungen vonmap
undswitchMap
spiegeln jetzt das Verhalten vondistinctUntilChanged
wider. Wenn fürLiveData
einevalue
festgelegt ist, wird diemap
/switchMap
-Funktion sofort aufgerufen, um dievalue
der zurückgegebenenLiveData
auszufüllen. Dadurch wird sichergestellt, dass der Anfangswert als Teil der ersten Zusammensetzung (wenn sie mitobserveAsState()
verwendet wird) festgelegt wird, ändert jedoch nicht das Beobachtungsverhalten – aktualisierte Werte aus der QuelleLiveData
gelten weiterhin nur, wenn Sie anfangen, denLiveData
zu beobachten. - In dieser Version wurde ein Problem behoben, bei dem
SavedStateHandle
benutzerdefinierteParcelable
-Klassen nach dem Tod und der Neuerstellung eines Prozesses nicht richtig wiederhergestellt hat. Da durch das Android-Framework Informationen zu Typen verloren gehen, erfordern Arrays benutzerdefinierter Parcelables zusätzlichen Aufwand (manuelles Erstellen eines typisierten Arrays des richtigen Typs). In der Dokumentation zuget
,getLiveData
undgetStateFlow
wird diese Einschränkung jetzt ausdrücklich erwähnt. - Die mit
LifecycleObserver
verknüpften Proguard-Keep-Regeln wurden entfernt. Das bedeutet, dass für geschützten Code, der APIs über Reflexion verwenden möchte (z. B. mit der seit Langem eingestellten Annotation@OnLifecycleEvent
), eigene Aufbewahrungsregeln für den jeweiligen Anwendungsfall erstellen muss.
Beobachtbarkeit von Lebenszyklusereignissen
- Als Alternative zur Verwendung von
LifecycleEventObserver
kannst du jetzt mit der ErweiterungsmethodeLifecycle.asFlow()
einFlow
vonLifecycle.Event
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 – von Anfang bis Ende beendet und wieder pausiert. Diese API spiegelt die API inDisposableEffect
wider. Sie eignet sich für Fälle, in denen die beim Anstieg des Status vorgenommene Änderung beim Zurückkehren 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 für Lebenszyklusereignisse ausführen.
Beobachtbarkeit des Lebenszyklusstatus
- Das aktuelle
Lifecycle.State
kann jetzt über dieLifecycle.currentStateFlow
-Property beobachtet werden. Sie gibt eineStateFlow
zurück, wobeivalue
der aktuelleLifecycle.State
ist. - Jetpack Compose-Nutzer können mit der Erweiterung
Lifecycle.currentStateAsState()
Lifecycle.State
direkt als Compose-State
freigeben. Dies entsprichtlifecycle.currentStateFlow.collectAsState()
und ist eine kürzere Alternative.
Weitere Informationen finden Sie unter Lebenszyklusstatus mit Abläufen erfassen.
Version 2.7.0-rc02
13. Dezember 2023
androidx.lifecycle:lifecycle-*:2.7.0-rc02
wird freigegeben. Version 2.7.0-rc02 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem
SavedStateHandle
benutzerdefinierteParcelable
-Klassen nicht richtig wiederhergestellt hat, nachdem der Prozess beendet und neu erstellt wurde. Da durch das Android-Framework Informationen zu Typen verloren gehen, erfordern Arrays benutzerdefinierter Parcelables zusätzlichen Aufwand (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 freigegeben. Version 2.7.0-rc01 enthält diese Commits.
Fehlerkorrekturen
LifecycleStartEffect
undLifecycleResumeEffect
entfernen den Effektblock nun korrekt und erstellen ihn neu, wennLifecycleOwner
geändert wird. (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.
- Neue Betaversion, keine größeren Änderungen an dieser Release-Version.
Version 2.7.0-alpha03
18. Oktober 2023
androidx.lifecycle:lifecycle-*:2.7.0-alpha03
wird freigegeben. 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 derLifecycle.State
desTestLifecycleOwner
festgelegt wird, indem das FeldcurrentState
in einer Koroutine verwendet wird. Die Lint-Prüfung schlägt jetzt das Anhalten vonsetCurrentState
vor, wodurch das Festlegen vonLifecycle.State
ohne Blockierung ermöglicht wird. (Icf728, b/297880630)
Fehlerkorrekturen
- Es wurde ein Problem mit
LiveData.switchMap
behoben, bei dem die Rückgabe derselbenLiveData
-Instanz sowohl beim ersten als auch bei einem nachfolgenden Aufruf verhindert wurde, 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 freigegeben. Version 2.7.0-alpha02 enthält diese Commits.
Neue Funktionen
TestLifecycleOwner
enthält jetzt die AnhaltenfunktionsetCurrentState()
, damit NutzerTestLifecycleOwner
innerhalb einer Koroutine, z. B. der vonrunTest
, verwenden können. (I329de, b/259344129)
API-Änderungen
- Alle Dateien aus den
lifecycle-livedata-ktx
-Modulen wurden in daslifecycle-livedata
-Hauptmodul verschoben. (I10c6f, b/274800183)
Änderungen des Verhaltens
- Die Erweiterungen
LiveData.map()
undLiveData.switchMap()
legen jetzt dievalue
der zurückgegebenenLiveData
fest, wenn für die vorherigeLiveData
ein Wert festgelegt war. Dadurch wird sichergestellt, dass die Verwendung der resultierenden LiveData in Jetpack Compose den richtigen Status in der ursprünglichen Komposition hat. (I91d2b, b/269479952) - Das Gerät „
addCloseable()
“ vonViewModel
schließt jetzt „Closeable
“ sofort, wennViewModel
bereits einen Anruf anonCleared()
erhalten hat. (I4712e, b/280294730)
Fehlerkorrekturen
- Aus Lebenszyklus
2.6.2
: Ein Problem wurde behoben, bei demSavedStateHandle
nach dem Beenden des Prozesses nicht korrekt wiederhergestellt wurde, wenn der Status wiederhergestellt wurde,save()
wurde aufgerufen, ohne den Status tatsächlich im übergeordnetenSavedStateRegistry
zu speichern, und der Status wurde dann noch einmal wiederhergestellt. 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 freigegeben. Version 2.7.0-alpha01 enthält diese Commits.
API-Änderungen
Lifecycle.State
kann jetzt überLifecycle.currentStateFlow
beobachtet werden, wodurch einStateFlow
zurückgegeben wird, wobeivalue
der aktuelleLifecycle.State
ist. (Ib212d, b/209684871)Lifecycle.Event
s können jetzt alsFlow
mitLifecycle.asFlow().
beobachtet werden (If2c0f, b/176311030)- Die
LifecycleResumeEffect
API wurde hinzugefügt, um „SideEffect
“ zum Schreiben basierend auf den Ereignis-CallbacksLifecycle.Event.ON_RESUME
undLifecycle.Event.ON_PAUSE
auszuführen. (I60386, b/235529345) - Die
LifecycleStartEffect
API wurde hinzugefügt, umSideEffect
s zum Schreiben basierend aufLifecycle.Event.ON_START
- undLifecycle.Event.ON_STOP
-Ereignis-Callbacks auszuführen. (I5a8d1, b/235529345) - Die
LifecycleEventEffect
API wurde zum Ausführen vonSideEffect
s zum Schreiben auf der Grundlage vonLifecycle.Event
hinzugefügt. (Ic9794, b/235529345) - Die Erweiterung „
Lifecycle.collectAsState()
“ wurde hinzugefügt, umLifecycle.State
direkt als „Schreiben“-State
freizugeben. Dies entsprichtlifecycle.currentStateFlow.collectAsState()
und ist eine kürzere Alternative. (I11015, b/235529345)
Fehlerkorrekturen
- Die Erweiterung
LiveData.distinctUntilChanged()
legt nun denvalue
der zurückgegebenenLiveData
fest, wenn für die vorherigeLiveData
ein Wert festgelegt wurde. Dies ändert nichts am Beobachtungsverhalten. Aktualisierte Werte aus der Quelle „LiveData
“ gelten erst dann, wenn Sie beginnen, die vondistinctUntilChanged()
zurückgegebeneLiveData
zu beobachten. (Ib482f) - Die mit
LifecycleObserver
verknüpften Proguard-Keep-Regeln wurden entfernt. Das bedeutet, dass für den geschützten Code, der APIs über Reflexion verwenden möchte, eigene Aufbewahrungsregeln für den jeweiligen Anwendungsfall festgelegt werden muss. (Ia12fd)
Version 2.6
Version 2.6.2
6. September 2023
androidx.lifecycle:lifecycle-*:2.6.2
wird freigegeben. Version 2.6.2 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem
SavedStateHandle
nach dem Beenden des Prozesses nicht korrekt wiederhergestellt wurde, wenn der Status wiederhergestellt wurde,save()
aufgerufen wurde, ohne den Status tatsächlich 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 freigegeben. Version 2.6.1 enthält diese Commits.
Aktualisierungen von Abhängigkeiten
lifecycle-viewmodel-savedstate
hängt jetzt von SavedState1.2.1
ab. (cd7251)- Der Lebenszyklus hängt jetzt vom ProfileInstaller
1.3.0
ab. (f9d30b)
Version 2.6.0
8. März 2023
androidx.lifecycle:lifecycle-*:2.6.0
wird freigegeben. 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 jemals ein expliziter Wert fürLiveData
festgelegt wurde. So können Sie zwischenliveData.value
, dienull
zurückgeben, unterscheiden, da bisher kein Wert oder ein expliziternull
-Wert festgelegt wurde.MediatorLiveData
enthält jetzt einen Konstruktor zum Festlegen eines Anfangswerts.- Für
StateFlow
undFlow
voncollectAsStateWithLifecycle()
wurde eine neue Erweiterung hinzugefügt, die aus Abläufen erfasst und den neuesten Wert als Erstellungsstatus auf Lebenszyklus-orientierte Weise darstellt. - Die Methoden
Lifecycle.launchWhenX
undLifecycle.whenX
werden nicht mehr unterstützt, da die Verwendung eines pausierenden Disponenten in einigen Fällen Ressourcen verschwenden kann. Es wird empfohlen,Lifecycle.repeatOnLifecycle
zu verwenden. Weitere Informationen zum einmaligen Sperren von Arbeitsorten finden Sie in dieser Erläuterung dazu, warum dies natursicher ist. - Kotlin-Konvertierung: Eine große Anzahl von Lebenszyklusklassen wurde in Kotlin konvertiert. Alle konvertierten Klassen behalten ihre Binärkompatibilität mit früheren Versionen. Bei den folgenden Klassen gibt es nicht mit der Quelle nicht kompatible Änderungen für Klassen, die in Kotlin geschrieben wurden:
ViewTreeLifecycleOwner
,LiveDataReactiveStreams
,HasDefaultViewModelProviderFactory
,ViewTreeViewModelStoreOwner
,Transformations
,ViewModelStoreOwner
,LifecycleOwner
.
In der folgenden Tabelle sind die Quell-Conversions für die neue Lebenszyklusversion aufgeführt.
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 Null-Zulässigkeit der
onChanged
-Methode eines in Kotlin erstelltenObserver
-Objekts entspricht jetzt der Null-Zulässigkeit des generischen Typs. WennObserver.onChanged()
einen Typ akzeptieren soll, für den Nullwerte zulässig sind, müssen SieObserver
mit einem Typ instanziieren, in dem Nullwerte zulässig sind. - Diese Klassen wurden ebenfalls in Kotlin konvertiert, bleiben aber quellkompatibel:
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 freigegeben. Version 2.6.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Die Erweiterung
LiveData.distinctUntilChanged()
legt nun denvalue
der zurückgegebenenLiveData
fest, wenn für die vorherigeLiveData
ein Wert festgelegt wurde. Dies ändert nichts am Beobachtungsverhalten. Aktualisierte Werte aus der Quelle „LiveData
“ gelten erst dann, wenn Sie beginnen, die vondistinctUntilChanged()
zurückgegebeneLiveData
zu beobachten. (Ib482f)
Version 2.6.0-beta01
8. Februar 2023
androidx.lifecycle:lifecycle-*:2.6.0-beta01
wird freigegeben. Version 2.6.0-beta01 enthält diese Commits.
Kotlin-Conversions
LifecycleOwner
wird jetzt in Kotlin geschrieben. Dies ist eine mit der Quelle nicht kompatible Änderung für Klassen, die in Kotlin geschrieben wurden. Sie muss jetzt das Attributlifecycle
überschreiben, anstatt die vorherige FunktiongetLifecycle()
zu implementieren. (I75b4b, b/240298691)ViewModelStoreOwner
ist jetzt in Kotlin geschrieben. Dies ist eine mit der Quelle nicht kompatible Änderung für Klassen, die in Kotlin geschrieben wurden. Sie muss jetzt das AttributviewModelStore
überschreiben, anstatt die vorherige FunktiongetViewModelStore()
zu implementieren. (I86409, b/240298691)- Die Kotlin-Erweiterung für
LifecycleOwner
mit dem FeldlifecycleScope
wurde in daslifecycle-common
-Artefakt vonlifecycle-runtime-ktx
verschoben. (I41d78, b/240298691) - Die Kotlin-Erweiterung für
Lifecycle
mit dem FeldcoroutineScope
wurde in daslifecycle-common
-Artefakt vonlifecycle-runtime-ktx
verschoben. (Iabb91, b/240298691)
Version 2.6.0-alpha05
25. Januar 2023
androidx.lifecycle:lifecycle-*:2.6.0-alpha05
wird freigegeben. Version 2.6.0-alpha05 enthält diese Commits.
Kotlin-Conversions
Transformations
wird jetzt in Kotlin geschrieben. Dies ist eine quellinkompatible Änderung für Klassen, die in Kotlin geschrieben wurden und die direkte Syntax wieTransformations.map
verwendet haben. Für Kotlin-Code muss jetzt die Kotlin-Erweiterungsmethode verwendet werden, die zuvor nur bei Verwendung vonlifecycle-livedata-ktx
verfügbar war. Bei Verwendung der Programmiersprache Java werden die Versionen dieser Methoden, für die die Methodeandroidx.arch.core.util.Function
verwendet wird, verworfen und durch Versionen ersetzt, die eine Kotlin-Function1
verwenden. Durch diese Änderung wird die Binärkompatibilität aufrechterhalten. (I8e14f)ViewTreeViewModelStoreOwner
wird jetzt in Kotlin geschrieben. Dies ist eine mit der Quelle nicht kompatible Änderung für Klassen, die in Kotlin geschrieben wurden. Sie müssen jetzt die Kotlin-Erweiterungsmethoden fürView
vonandroidx.lifecycle.setViewTreeViewModelStoreOwner
undandroidx.lifecycle.findViewTreeViewModelStoreOwner
direkt importieren und verwenden, um einen zuvor festgelegten Inhaber festzulegen und zu finden. Dies ist binärkompatibel und bleibt für Implementierungen, die in der Programmiersprache Java geschrieben sind, quellkompatibel. (Ia06d8, Ib22d8, b/240298691)- Die
HasDefaultViewModelProviderFactory
-Schnittstelle ist jetzt in Kotlin geschrieben. Dies ist eine mit der Quelle nicht kompatible Änderung für Klassen, die in Kotlin geschrieben wurden. Sie müssen jetzt die AttributedefaultViewModelProviderFactory
unddefaultViewModelCreationExtras
überschreiben, anstatt die vorherigen entsprechenden Funktionen zu implementieren. (Iaed9c, b/240298691) Observer
wird jetzt in Kotlin geschrieben. Für seineonChanged()
-Methode wird jetzt der Namevalue
als 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 freigegeben. Version 2.6.0-alpha04 enthält diese Commits.
Neue Funktionen
LiveData
enthält jetzt eine neueisInitialized
-Eigenschaft, die angibt, ob jemals ein expliziter Wert fürLiveData
festgelegt wurde. So können Sie zwischenliveData.value
, dienull
zurückgeben, unterscheiden, da bisher kein Wert oder ein expliziternull
-Wert festgelegt wurde. (Ibd018)
API-Änderungen
- Die
collectAsStateWithLifecycle()
APIs vonlifecycle-runtime-compose
befinden sich nicht mehr im Teststatus. (I09d42, b/258835424) - Die Methoden
Lifecycle.launchWhenX
undLifecycle.whenX
werden nicht mehr unterstützt, da die Verwendung eines pausierenden Disponenten in einigen Fällen Ressourcen verschwenden kann. Es wird empfohlen,Lifecycle.repeatOnLifecycle
zu verwenden. (Iafc54, b/248302832)
Kotlin-Conversions
ViewTreeLifecycleOwner
wird jetzt in Kotlin geschrieben. Dies ist eine mit der Quelle nicht kompatible Änderung für Klassen, die in Kotlin geschrieben wurden. Sie müssen jetzt die Kotlin-Erweiterungsmethoden fürView
vonandroidx.lifecycle.setViewTreeLifecycleOwner
undandroidx.lifecycle.findViewTreeLifecycleOwner
direkt importieren und verwenden, um einen zuvor festgelegten Inhaber festzulegen und zu finden. Sie ersetzt die bisherige Kotlin-Erweiterung inlifecycle-runtime-ktx
. Dies ist binärkompatibel und bleibt für Implementierungen, die in der Programmiersprache Java geschrieben sind, quellkompatibel. (I8a77a, I5234e, b/240298691)LiveDataReactiveStreams
wird jetzt in Kotlin geschrieben. Die Kotlin-Erweiterungen, die zuvor inlifecycle-reactivestreams-ktx
enthalten waren, wurden in daslifecycle-reactivestreams
-Modul verschoben und sind nun die primäre Oberfläche für in Kotlin geschriebenen Code. Dies ist eine quell nicht kompatible Änderung für Code, der in Kotlin geschrieben wurde, wenn Sie nicht bereits die APIs der Kotlin-Erweiterung verwendet haben. (I2b1b9, I95d22, b/240298691)DefaultLifecycleObserver
,LifecycleEventObserver
,Lifecycle
,LifecycleRegistry
,LifecycleObserver
undViewModelStore
sind jetzt in Kotlin geschrieben (Iadffd, (I60034, I8c52c, I9593d, I01fe1, I59a23, I59a23)
Fehlerkorrekturen
SavedStateHandle
stürzt nicht mehr mit einemClassCastException
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 freigegeben. Version 2.6.0-alpha03 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem Einschränkungen zwischen verschiedenen Lebenszyklusmodulen nicht wie vorgesehen funktionierten. (I18d0d, b/249686765)
- Von
LifecycleRegistry.moveToState()
ausgegebene Fehler enthalten jetzt eine hilfreichere Fehlermeldung, die Entwickler darüber informiert, welche Komponente den Fehler verursacht. (Idf4b2, b/244910446)
Version 2.6.0-alpha02
7. September 2022
androidx.lifecycle:lifecycle-*:2.6.0-alpha02
wird freigegeben. 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. Bei einem Upgrade werden andere Abhängigkeiten automatisch aktualisiert. b/242871265FlowLiveData.asFlow()
erstellt jetzt einecallbackFlow
, anstatt eine eigeneChannel
-Implementierung zu verwenden, um Threadsicherheit und Kontextaufbewahrung zu gewährleisten. (I4a8b2, b/200596935)- Die Funktion
asLiveData
vonFlowLiveData
behält jetzt den Anfangswert einerStateFlow
bei, wenn das neueLiveData
-Objekt erstellt wird. (I3f530, b/157380488) - Aus Lebenszyklus
2.5.1
: Benutzerdefinierte Implementierungen vonAndroidViewModelFactory
rufen jetzt die Funktioncreate(modelClass)
korrekt auf, wenn der zustandsorientierte Konstruktor mitLifecycle
2.4+ (I5b315, b/238011621) verwendet wird.
Version 2.6.0-alpha01
29. Juni 2022
androidx.lifecycle:lifecycle-*:2.6.0-alpha01
wird freigegeben. Version 2.6.0-alpha01 enthält diese Commits.
Neue Funktionen
- Für
StateFlow
undFlow
voncollectAsStateWithLifecycle
wurde eine neue Erweiterung hinzugefügt, die aus Abläufen erfasst und deren letzter Wert als Erstellungsstatus auf Lebenszyklus-orientierte Weise darstellt. Der Fluss wird erfasst und die neuen Emissionen werden auf den Wert des Bundesstaates gesetzt, wenn der Lebenszyklus mindestens in einem bestimmtenLifecycle.State
liegt. Wenn der Lebenszyklus unter diesenLifecycle.State
fällt, wird die Flusserfassung 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 freigegeben. Version 2.5.1 enthält diese Commits.
Fehlerkorrekturen
- Benutzerdefinierte Implementierungen von
AndroidViewModelFactory
rufen jetzt diecreate(modelClass)
-Funktion korrekt auf, wenn der zustandsorientierteAndroidViewModelFactory
-Konstruktor mitLifecycle
2.4+ verwendet wird. (I5b315, b/238011621)
Version 2.5.0
29. Juni 2022
androidx.lifecycle:lifecycle-*:2.5.0
wird freigegeben. 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
für das Monitoring von Wertänderungen zurückgibt.ViewModel CreationExtras: Beim Schreiben einer benutzerdefinierten
ViewModelProvider.Factory
ist es nicht mehr erforderlich,AndroidViewModelFactory
oderAbstractSavedStateViewModelFactory
zu erweitern, um Zugriff aufApplication
bzw.SavedStateHandle
zu erhalten. Stattdessen werden diese Felder jederViewModelProvider.Factory
-Unterklasse alsCreationExtras
über die neue Überlastung voncreate
bereitgestellt:create(Class<T>, CreationExtras)
. Diese Extras werden automatisch von deiner Aktivität oder deinem Fragment bereitgestellt, wenn du Aktivität1.5.0
bzw. Fragment1.5.0
verwendest.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 du deineViewModelProvider.Factory
in Bezug auf einen oder mehrere Lambda-Initialisierer definieren kannst, einen für jedeViewModel
-Klasse, die deine benutzerdefinierte Factory unterstützt, und verwendeCreationExtras
als primäre Datenquelle.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-Factory zum Erstellen einerViewModel
-Instanz verwendet, ohne eine benutzerdefinierteViewModelProvider.Factory
erstellen zu müssen.// Within a @Composable, you can now skip writing a custom Factory // and instead write a lambda to do the initialization of your ViewModel val detailViewModel = viewModel { // This lambda is only called the first time the ViewModel is created // and all CreationExtras are available inside the lambda val savedStateHandle = createSavedStateHandle() DetailViewModel(savedStateHandle) }
SavedStateHandle Compose Saver-Integration: Das Artefakt
lifecycle-viewmodel-compose
enthält jetzt neue experimentelle APIs inSavedStateHandle.saveable
, die einrememberSaveable
-ähnliches Verhalten ermöglichen, das durch denSavedStateHandle
eines ViewModel-Objekts 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) } }
Eine
addCloseable()
API und eine neue Konstruktorüberlastung wurden hinzugefügt, mit denen Sie ein oder mehrereCloseable
-Objekte zu demViewModel
hinzufügen können, das geschlossen wird, wenn dieViewModel
gelöscht wird, ohne dass manuelle Arbeiten inonCleared()
erforderlich sind.Um beispielsweise einen Koroutinenbereich zu erstellen, den Sie in ein ViewModel einschleusen, aber durch Tests steuern können, können Sie einen
CoroutineScope
erstellen, derCloseable
implementiert:class CloseableCoroutineScope( context: CoroutineContext = SupervisorJob() + Dispatchers.Main.immediate ) : Closeable, CoroutineScope { override val coroutineContext: CoroutineContext = context override fun close() { coroutineContext.cancel() } }
Sie kann dann in Ihrem
ViewModel
-Konstruktor verwendet werden, wobei dieselbe Lebensdauer wie inviewModelScope
beibehalten wird:class TestScopeViewModel( val customScope: CloseableCoroutineScope = CloseableCoroutineScope() ) : ViewModel(customScope) { // You can now use customScope in the same way as viewModelScope }
Änderungen des Verhaltens
- Beim Versuch,
Lifecycle.State
vonINITIALIZED
inDESTROYED
zu verschieben, wird jetzt immer einIllegalStateException
ausgegeben, unabhängig davon, ob derLifecycle
ein Beobachter zugeordnet ist. LifecycleRegistry
löscht jetzt die Beobachter, wenn sie den StatusDESTROYED
erreichen.
Version 2.5.0-rc02
15. Juni 2022
androidx.lifecycle:lifecycle-*:2.5.0-rc02
wird freigegeben. Version 2.5.0-rc02 enthält diese Commits.
Fehlerkorrekturen
ViewModelProvider
stürzt nicht mehr ab, wenn frühere Versionen von CompileOnly Lifecycle-Abhängigkeiten mit Versionen ab 2.5 kombiniert werden (I81a66, b/230454566).
Version 2.5.0-rc01
11. Mai 2022
androidx.lifecycle:lifecycle-*:2.5.0-rc01
wird freigegeben. Version 2.5.0-rc01 enthält diese Commits.
Fehlerkorrekturen
MediatorLiveData.addSource()
gibt jetzt einNullPointerException
aus, wenn einenull
-Quelle übergeben wird, anstatt dienull
-Quelle an Beobachter weiterzugeben.(Ibd0fb, b/123085232)
Version 2.5.0-beta01
20. April 2022
androidx.lifecycle:lifecycle-*:2.5.0-beta01
wird freigegeben. Version 2.5.0-beta01 enthält diese Commits.
API-Änderungen
SavedStateHandle.saveable
-Property-Delegierte wurden hinzugefügt, um Property-Namen als Schlüssel für den beibehaltenen Status in derSavedStateHandle
zu verwenden (I8bb86, b/225014345).
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem das Verschachteln eines
NavHost
innerhalb eines anderenNavHost
in einem nicht primären Navigations-Tab am unteren Rand zu einemIllegalStateException
führte, wenn mehrere Back-Stacks verwendet wurden. (I11bd5, b/228865698)
Version 2.5.0-alpha06
6. April 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha06
wird freigegeben. Version 2.5.0-alpha06 enthält diese Commits.
Neue Funktionen
- Fügen Sie
SavedStateHandle.saveable
die experimentelle ÜberlastungMutableState
hinzu, damit sie mitrememberSaveable
übereinstimmt (I38cfe, b/224565154)
API-Änderungen
CreationExtras
ist jetzt abstrakt statt versiegelt. (Ib8a7a)
Fehlerkorrekturen
- Ein durch
SavedStateHandleController
verursachterIllegalStateException: Already attached to lifecycleOwner
-Fehler wurde behoben. (I7ea47, b/215406268)
Version 2.5.0-alpha05
23. März 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha05
wird freigegeben. Version 2.5.0-alpha05 enthält diese Commits.
Neue Funktionen
- Das Modul
lifecycle-viewmodel-compose
bietet jetztSavedStateHandleSaver
, eine experimentelle API, die dafür sorgt, dass Werte in einerSavedStateHandle
korrekt in denselben gespeicherten Instanzstatus integriert werden, denrememberSaveable
verwendet. (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 einemSavedStateRegistryOwner
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 freigegeben. Version 2.5.0-alpha04 enthält diese Commits.
API-Änderungen
SavedStateHandle
bietet jetzt einegetStateFlow()
API, die als Alternative zur Verwendung vonLiveData
einen Kotlin-StateFlow
für das Monitoring von Wertänderungen zurückgibt. (Iad3ab, b/178037961)
Version 2.5.0-alpha03
23. Februar 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha03
wird freigegeben. Version 2.5.0-alpha03 enthält diese Commits.
Neue Funktionen
- Eine
addCloseable()
API und eine neue Konstruktorüberlastung wurden hinzugefügt, mit denen Sie ein oder mehrereCloseable
-Objekte zu der DateiViewModel
hinzufügen können, die geschlossen wird, wenn dieViewModel
gelöscht wird, ohne dass manuelle Maßnahmen inonCleared()
erforderlich sind. (I55ea0) lifecycle-viewmodel
bietet jetzt eineInitializerViewModelFactory
, mit der Sie Lambda für die Verarbeitung bestimmterViewModel
-Klassen hinzufügen können. Dabei wirdCreationExtras
als primäre Datenquelle verwendet. (If58fc, b/216687549)lifecycle-viewmodel-compose
bietet jetzt eineviewModel()
API, die eine Lambda-Factory zum Erstellen einerViewModel
-Instanz verwendet, ohne eine benutzerdefinierteViewModelProvider.Factory
erstellen zu müssen. (I97fbb, b/216688927)
API-Änderungen
- Sie können jetzt über
lifecycle-viewmodel-compose
einViewModel
mitCreationExtras
erstellen. (I08887, b/216688927)
Änderungen des Verhaltens
- Beim Versuch,
Lifecycle.State
vonINITIALIZED
inDESTROYED
zu verschieben, wird jetzt immer einIllegalStateException
ausgegeben, unabhängig davon, ob derLifecycle
ein Beobachter zugeordnet ist. (I7c390, b/177924329) LifecycleRegistry
löscht jetzt die Beobachter, wenn sie den StatusDESTROYED
erreichen. (I4f8dd, b/142925860)
Version 2.5.0-alpha02
9. Februar 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha02
wird freigegeben. Version 2.5.0-alpha02 enthält diese Commits.
API-Änderungen
SavedStateHandle
undSavedStateViewModelFactory
wurden in Kotlin konvertiert. Dies hat die Null-Zulässigkeit der generischen Elemente in beiden Klassen verbessert. (Ib6ce2, b/216168263, I9647a, b/177667711)- Der Funktionsparameter
LiveData
switchMap
kann jetzt eine Ausgabe haben, für die Nullwerte zulässig sind. (I40396, b/132923666) - Die Erweiterungen
LiveData
-ktx sind jetzt mit@CheckResult
annotiert, um zu erzwingen, dass beim Aufrufen dieser Funktionen das Ergebnis verwendet wird. (Ia0f05, b/207325134)
Änderungen des Verhaltens
- Wenn für den angegebenen Schlüssel kein Wert vorhanden ist, wird der Standardwert in
SavedStateHandle
jetzt korrekt gespeichert. (I1c6ce, b/178510877)
Fehlerkorrekturen
- Aus Lebenszyklus
2.4.1
:lifecycle-process
wurde aktualisiert und hängt von Start 1.1.1 ab, damit Korrekturen, die verhindern, dassProcessLifecycleInitializer
keinenStartupException
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 versuchen, eineViewModel
zu erstellen. (I340f7, b/177667711) - Sie können jetzt mithilfe von
CreationExtras
ein Ansichtsmodell mitAndroidViewModelFactory
erstellen, ohne eine Anwendung festzulegen. (I6ebef, b/217271656)
Version 2.5.0-alpha01
26. Januar 2022
androidx.lifecycle:lifecycle-*:2.5.0-alpha01
wird freigegeben. Version 2.5.0-alpha01 enthält diese Commits.
ViewModel CreationExtras
Mit dieser Version legen wir den Grundstein für die Neustrukturierung der Struktur von ViewModel
. Anstelle eines starren Satzes von Unterklassen von ViewModelProvider.Factory
, die jeweils zusätzliche Funktionen hinzufügen (ein Application
-Konstruktorparameter über AndroidViewModelFactory
, ein SavedStateHandle
-Konstruktorparameter über SavedStateViewModelFactory
und AbstractSavedStateViewModelFactory
usw. möglich), wechseln wir zu einer Welt zustandsloser Fabriken, die auf dem neuen Konzept CreationExtras
beruhen. (Ia7343, b/188691010, b/188541057)
Mit dieser Änderung führt ViewModelProvider
keine direkten Aufrufe mehr an die vorherige create(Class<T>)
-Methode von ViewModelProvider.Factory
aus. Stattdessen wird eine neue Überlastung von create
aufgerufen: create(Class<T>, CreationExtras)
. Das bedeutet, dass jede direkte Implementierung der ViewModelProvider.Factory
-Instanz jetzt auf jede der folgenden neuen CreationExtras
zugreifen kann:
ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY
:String
bietet Zugriff auf den benutzerdefinierten Schlüssel, den Sie anViewModelProvider.get()
übergeben haben.ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY
bietet Zugriff auf die KlasseApplication
.SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY
bietet Zugriff auf dasSavedStateRegistryOwner
, das zum Erstellen dieses ViewModel verwendet wird.SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY
bietet Zugriff auf dasViewModelStoreOwner
, das zum Erstellen dieses ViewModel verwendet wird.SavedStateHandleSupport.DEFAULT_ARGS_KEY
bietet Zugriff auf dieBundle
der Argumente, die zum Erstellen einerSavedStateHandle
verwendet werden sollen.
Diese Extras sind standardmäßig verfügbar, wenn Aktivität 1.5.0-alpha01
, Fragment 1.5.0-alpha01
und Navigation 2.5.0-alpha01
verwendet werden. Wenn Sie eine frühere Version dieser Bibliotheken verwenden, ist CreationExtras
leer – alle vorhandenen Unterklassen von ViewModelProvider.Factory
wurden so umgeschrieben, dass sie sowohl den alten Erstellungspfad von früheren Versionen dieser Bibliotheken als auch den künftig verwendeten CreationExtras
-Pfad unterstützen.
Mit diesen CreationExtras
können Sie eine ViewModelProvider.Factory
konstruieren, die nur die Informationen an jede ViewModel
übergibt, die Sie benötigen, ohne eine strenge Hierarchie von Factory-Unterklassen zu 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
}
}
Wir verwenden die createSavedStateHandle()
-Kotlin-Erweiterungsfunktion für CreationExtras
von SavedStateHandleSupport
, um eine SavedStateHandle
nur für das ViewModel zu erstellen, das sie benötigt. (Ia6654, b/188541057)
Die benutzerdefinierte CreationExtras
kann angegeben werden, indem du getDefaultViewModelCreationExtras()
in deiner ComponentActivity
oder Fragment
überschreibst. So stehen sie deiner benutzerdefinierten ViewModelProvider.Factory
als integrierte Form der unterstützten Injektion zur Verfügung. Diese Extras werden Ihrer benutzerdefinierten Factory automatisch zur Verfügung gestellt, wenn sie direkt mit ViewModelProvider
oder den Kotlin-Attributerweiterungen by viewModels()
und by activityViewModels()
verwendet werden. (I79f2b, b/207012584, b/207012585, b/207012490)
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem der Standardwert für ein
SavedStateHandle
nach dem Tod und der Neuerstellung eines Prozesses wieder angezeigt wurde, selbst wenn er ausdrücklich aus demSavedStateHandle
entfernt wurde. Infolgedessen führtSavedStateHandle
die Standardwerte und die wiederhergestellten Werte nicht mehr zusammen. Stattdessen werden nur die wiederhergestellten Werte als zentrale Datenquelle verwendet. (I53a4b)
Version 2.4
Version 2.4.1
9. Februar 2022
androidx.lifecycle:lifecycle-*:2.4.1
wird freigegeben. Version 2.4.1 enthält diese Commits.
Fehlerkorrekturen
- Aus Lebenszyklus
2.5.0-alpha01
rückportiert: Ein Problem wurde behoben, bei dem der Standardwert für eineSavedStateHandle
nach dem Tod und der Neuerstellung eines Prozesses wieder angezeigt wurde, selbst wenn er explizit aus derSavedStateHandle
entfernt wurde. Infolgedessen führtSavedStateHandle
die Standardwerte und die wiederhergestellten Werte nicht mehr zusammen. Stattdessen werden nur die wiederhergestellten Werte als zentrale Datenquelle verwendet. (I53a4b) lifecycle-process
hängt jetzt von Androidx Startup 1.1.1 ab, die eine Regression behoben hat, bei der die Verwendung vonProcessLifecycleInitializer
zu einemStartupException
führen würde. (b/216490724)
Version 2.4.0
27. Oktober 2021
androidx.lifecycle:lifecycle-*:2.4.0
wird freigegeben. Version 2.4.0 enthält diese Commits.
Wichtige Änderungen seit Version 2.3.0
- „
@OnLifecycleEvent
“ wurde verworfen. Verwenden Sie stattdessenLifecycleEventObserver
oderDefaultLifecycleObserver
. - Bibliothek „
androidx.lifecycle:lifecycle-viewmodel-compose
“ wurde hinzugefügt. Er stellt die zusammensetzbare FunktionviewModel()
undLocalViewModelStoreOwner
bereit.- Wichtige Änderung:
ViewModelProvider
wurde in Kotlin neu geschrieben. Die MethodeViewModelProvider.Factory.create
lässt keine generischen Nullwerte mehr zu.
- Wichtige Änderung:
- Neue Coroutines API wurde zu
androidx.lifecycle:lifecycle-runtime-ktx
hinzugefügt: Lifecycle.repeatOnLifecycle
: API, die einen Codeblock in einer Koroutine ausführt, wenn sich der Lebenszyklus zumindest in einem bestimmten Zustand befindet. Die Blockierung wird abgebrochen und neu gestartet, wenn sich der Lebenszyklus in den Zielstatus hinein- und aus diesem herausbewegt.Flow.flowWithLifecycle
, API, die Werte aus dem Upstream-Ablauf ausgibt, wenn sich der Lebenszyklus mindestens in einem bestimmten Zustand befindet.DefaultLifecycleObserver
wurde vonlifecycle.lifecycle-common-java8
inlifecycle.lifecycle-common
verschoben.lifecycle.lifecycle-common-java8
bietet nebenlifecycle.lifecycle-common
keine zusätzlichen Funktionen mehr. Die Abhängigkeit davon kann also durchlifecycle.lifecycle-common
ersetzt werden.- Die Nicht-Coroutinen-API von
lifecycle-viewmodel-ktx
wurde in daslifecycle-viewmodel
-Modul verschoben. lifecycle-process
verwendet jetztandroidx.startup
, umProcessLifecycleOwner
zu initialisieren.Zuvor wurde diese Änderung von
androidx.lifecycle.ProcessLifecycleOwnerInitializer
vorgenommen.Wenn Sie in der Vergangenheit
tools:node="remove"
ContentProvider
zum Initialisieren des Prozesslebenszyklus verwendet haben, müssen Sie stattdessen so vorgehen.<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 Lebenszyklus 2.4.0-beta01 freigegeben. 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 freigegeben. Version 2.4.0-beta01 enthält diese Commits.
API-Änderungen
- „
@OnLifecycleEvent
“ wurde verworfen. Verwenden Sie stattdessenLifecycleEventObserver
oderDefaultLifecycleObserver
. (I5a8fa) - DefaultLifecycleObserver wurde von
androidx.lifecycle.lifecycle-common-java8
nachandroidx.lifecycle.lifecycle-common
verschoben.androidx.lifecycle.lifecycle-common-java8
bietet nebenandroidx.lifecycle.lifecycle-common
keine zusätzlichen Funktionen mehr. Die Abhängigkeit davon kann also durchandroidx.lifecycle.lifecycle-common
ersetzt werden. (I021aa) - Die Nicht-Coroutinen-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 freigegeben. Version 2.4.0-alpha03 enthält diese Commits.
API-Änderungen
- Wichtige Änderung: ViewModelProvider wurde in Kotlin neu geschrieben.
Die Methode
ViewModelProvider.Factory.create
lässt keine generischen Nullwerte mehr zu. (I9b9f6)
Änderungen des Verhaltens
Lifecycle.repeatOnLifecycle
:block
wird jetzt bei wiederholter Ausführung immer nacheinander aufgerufen. (Ibab33)
Externer Beitrag
- Vielen Dank, 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 freigegeben. Version 2.4.0-alpha02 enthält diese Commits.
Neue Funktionen
lifecycle-runtime-ktx
wurde eine neueRepeatOnLifecycleWrongUsage
-Lint-Prüfung hinzugefügt, die erkennt, wennrepeateOnLifecycle
inonStart()
oderonResume()
falsch verwendet wird. (706078, b/187887400)
API-Änderungen
- Die
LifecycleOwner.addRepeatingJob
API wird zuLifecycle.repeatOnLifecycle
entfernt, die strukturierte Nebenläufigkeit 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 Lint-Prüfung
NullSafeMutableLiveData
, wenn das Feld Modifikatoren enthält, wurde behoben. (#147, b/183696616) - Ein weiteres Problem mit der Lint-Prüfung
NullSafeMutableLiveData
bei Verwendung von generischen Elementen wurde behoben. (#161, b/184830263)
Externer Beitrag
- Vielen Dank, maxsav für die Verbesserung der
NullSafeMutableLiveData
-Lint-Prüfung. (#147, b/183696616) - Vielen Dank, kozaxinan für die Verbesserung der Lint-Prüfung in
NullSafeMutableLiveData
. (#161, b/184830263)
Version 2.4.0-alpha01
24. März 2021
androidx.lifecycle:lifecycle-*:2.4.0-alpha01
wird freigegeben. Version 2.4.0-alpha01 enthält diese Commits.
Änderungen des Verhaltens
lifecycle-process
verwendet jetztandroidx.startup
, umProcessLifecycleOwner
zu initialisieren.Zuvor wurde diese Änderung von
androidx.lifecycle.ProcessLifecycleOwnerInitializer
vorgenommen.Wenn Sie in der Vergangenheit
tools:node="remove"
ContentProvider
zum Initialisieren des Prozesslebenszyklus verwendet haben, müssen Sie stattdessen so vorgehen.<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
- Eine
Flow.flowWithLifecycle
API wurde hinzugefügt, die mit derLifecycle.repeatOnLifecycle
API Werte aus dem Upstream-Ablauf ausgibt, wenn sich der Lebenszyklus zumindest in einem bestimmten Zustand befindet. Dies ist eine Alternative zur ebenfalls neuenLifecycleOwner.addRepeatinJob
API. I0f4cd
Fehlerkorrekturen
- Ab Lebenszyklus 2.3.1: Die Lint-Regel
NonNullableMutableLiveData
kann jetzt korrekt zwischen Feldvariablen mit unterschiedlicher Null-Zulässigkeit unterscheiden. (b/169249668)
Lebenszyklusansichtsmodell-Compose-Version 1.0.0
Version 1.0.0-alpha07
16. Juni 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07
wird freigegeben. Version 1.0.0-alpha07 enthält diese Commits.
Wichtige API-Änderungen
- Für
viewModel()
ist jetzt ein optionalesViewModelStoreOwner
erforderlich. Dies vereinfacht die Zusammenarbeit mit anderen Inhabern als demLocalViewModelStoreOwner
. Du kannst jetzt beispielsweiseviewModel(navBackStackEntry)
verwenden, um ein ViewModel abzurufen, das mit einem bestimmten Navigationsdiagramm verknüpft ist. (I2628d, b/188693123)
Version 1.0.0-alpha06
2. Juni 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06
wird freigegeben. Version 1.0.0-alpha06 enthält diese Commits.
Aktualisiert und mit der Erstellungsfunktion 1.0.0-beta08
kompatibel.
Version 1.0.0-alpha05
18. Mai 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05
wird freigegeben. Version 1.0.0-alpha05 enthält diese Commits.
Neue Funktionen
- Aktualisiert und mit der Erstellungsfunktion
1.0.0-beta07
kompatibel.
Fehlerkorrekturen
- Die AndroidManifest-Dateien aus „ui-test-manifest“ und „ui-tooling-data“ sind jetzt mit Android 12 (I6f9de, b/184718994) kompatibel.
Version 1.0.0-alpha04
7. April 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha04
wird freigegeben. Version 1.0.0-alpha04 enthält diese Commits.
Änderungen bei 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 1.0.0 müssen der Compiler und die Laufzeit übereinstimmen.
Version 1.0.0-alpha03
10. März 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha03
wird freigegeben. Version 1.0.0-alpha03 enthält diese Commits.
API-Änderungen
LocalViewModelStoreOwner.current
gibt jetzt eineViewModelStoreOwner
zurück, bei der Nullwerte zulässig sind, um besser feststellen zu können, ob eineViewModelStoreOwner
in der aktuellen Zusammensetzung verfügbar ist. APIs, die einViewModelStoreOwner
erfordern, z. B.viewModel()
undNavHost
, geben trotzdem eine Ausnahme aus, wennViewModelStoreOwner
nicht festgelegt ist. (Idf39a)
Lifecycle-Viewmodel-Compose Version 1.0.0-alpha02
24. Februar 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02
wird freigegeben. Version 1.0.0-alpha02 enthält diese Commits.
API-Änderungen
LocalViewModelStoreOwner
hat jetzt eineprovides
-Funktion, die mitCompositionLocalProvider
verwendet werden kann und dieasProvidableCompositionLocal()
API ersetzt. (I45d24)
Lifecycle-Viewmodel-Compose Version 1.0.0-alpha01
10. Februar 2021
androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01
wird freigegeben. Version 1.0.0-alpha01 enthält diese Commits.
Neue Funktionen
- Die zusammensetzbare Funktion
viewModel()
und dieLocalViewModelStoreOwner
wurden vonandroidx.compose.ui.viewinterop
in dieses Artefakt im Paketandroidx.lifecycle.viewmodel.compose
verschoben. (I7a374)
Version 2.3.1
Lebenszyklus-Version 2.3.1
24. März 2021
androidx.lifecycle:lifecycle-*:2.3.1
wird freigegeben. Version 2.3.1 enthält diese Commits.
Fehlerkorrekturen
- Die Lint-Regel
NonNullableMutableLiveData
kann jetzt korrekt zwischen Feldvariablen mit unterschiedlicher Null-Zulässigkeit unterscheiden. (b/169249668)
Version 2.3.0
Version 2.3.0
10. Februar 2021
androidx.lifecycle:lifecycle-*:2.3.0
wird freigegeben. Version 2.3.0 enthält diese Commits.
Wichtige Änderungen seit Version 2.2.0
SavedStateHandle
-Unterstützung für nicht parcelable-Klassen:SavedStateHandle
unterstützt jetzt die Lazy-Serialisierung. Sie können damitsetSavedStateProvider()
für einen bestimmten Schlüssel aufrufen und eineSavedStateProvider
bereitstellen, die einen Callback vonsaveState()
erhält, wenn dasSavedStateHandle
-Element aufgefordert wird, seinen Status zu speichern. Weitere Informationen finden Sie unter Nicht Parzellenfähige Klassen speichern.- Durchsetzung des Lebenszyklusverhaltens:
- LifecycleRegistry erzwingt jetzt
DESTROYED
als Terminalstatus. LifecycleRegistry
prüft jetzt, ob die Methoden im Hauptthread aufgerufen werden. Dies war schon immer eine Voraussetzung für Lebenszyklen von Aktivitäten, Fragmenten usw. Durch das Hinzufügen von Beobachtern aus Nicht-Hauptthreads konnten Abstürze während der Laufzeit nur schwer erkannt werden. BeiLifecycleRegistry
-Objekten, die Ihren eigenen Komponenten gehören, können Sie Prüfungen explizit mitLifecycleRegistry.createUnsafe(...)
deaktivieren. Sie müssen dann jedoch dafür sorgen, dass eine ordnungsgemäße Synchronisierung erfolgt, wenn auf diesesLifecycleRegistry
aus verschiedenen Threads zugegriffen wird.
- LifecycleRegistry erzwingt jetzt
- Lebenszyklusstatus und Ereignishelfer: Es wurden statische Hilfsmethoden von
downFrom(State)
,downTo(State)
,upFrom(State)
,upTo(State)
zuLifecycle.Event
hinzugefügt, um dieEvent
mitState
- und Übergangsrichtung zu generieren. Die MethodegetTargetState()
wurde hinzugefügt, die dieState
bereitstellt, zu der der Lebenszyklus direkt nach derEvent
übergeht. withStateAtLeast
: Es wurdenLifecycle.withStateAtLeast
APIs hinzugefügt, die auf einen Lebenszyklusstatus warten und einen Codeblock ohne Sperrung synchron zum Zeitpunkt der Statusänderung ausführen und dann mit dem Ergebnis fortfahren. Diese APIs unterscheiden sich von den vorhandenenwhen*
-Methoden, da sie das Ausführen von Code zum Anhalten nicht erlauben und keinen benutzerdefinierten Dispatcher verwenden. (aosp/1326081)ViewTree
APIs: Mit den neuen APIsViewTreeLifecycleOwner.get(View)
undViewTreeViewModelStoreOwner.get(View)
können Sie bei einerView
-Instanz dieLifecycleOwner
bzw.ViewModelStoreOwner
abrufen, in der sie enthalten sind. Sie müssen ein Upgrade auf Activity1.2.0
und Fragment1.3.0
sowie AppCompat 1.3.0-alpha01 oder höher ausführen, damit die Felder korrekt ausgefüllt werden. Die Kotlin-ErweiterungenfindViewTreeLifecycleOwner
undfindViewTreeViewModelStoreOwner
sind inlifecycle-runtime-ktx
bzw.lifecycle-viewmodel-ktx
verfügbar.- Einstellung der
LiveData.observe()
-Kotlin-Erweiterung: Die für die Lambda-Syntax erforderlicheLiveData.observe()
-Kotlin-Erweiterung wurde eingestellt, da sie bei Kotlin 1.4 nicht mehr erforderlich ist.
Version 2.3.0-rc01
16. Dezember 2020
androidx.lifecycle:lifecycle-*:2.3.0-rc01
wird freigegeben. 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 mitset()
undgetLiveData()
verwendeten Schlüsseln Schlüssel, die zuvor mitsetSavedStateProvider()
verwendet wurden. (aosp/1517919, b/174713653)
Externer Beitrag
- Die APIs zum Sperren Lebenszyklussensitiver Koroutinen können jetzt besser
yield()
-Aufrufe verarbeitet werden. Danke, Nicklas Ansman Giertz! (aosp/1430830, b/168777346)
Version 2.3.0-beta01
1. Oktober 2020
androidx.lifecycle:lifecycle-*:2.3.0-beta01
wird freigegeben. Version 2.3.0-beta01 enthält diese Commits.
API-Änderungen
- Die zur Verwendung der Lambda-Syntax erforderliche Kotlin-Erweiterung
LiveData.observe()
wurde eingestellt, da sie bei 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
- Der
liveData
-Builder und dieasLiveData()
-Dokumentation wurden aktualisiert, um Details zum Ändern der angegebenen Zeitüberschreitungswerte zu enthalten. (aosp/1122324)
Version 2.3.0-alpha07
19. August 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha07
wird freigegeben. 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 freigegeben. Version 2.3.0-alpha06 enthält diese Commits.
Neue Funktionen
- Statische Hilfsmethoden von
downFrom(State)
,downTo(State)
,upFrom(State)
,upTo(State)
Lifecycle.Event
zum Generieren vonEvent
für bestimmteState
- und Übergangsrichtungen wurden hinzugefügt. Die MethodegetTargetState()
wurde hinzugefügt, die dieState
bereitstellt, zu der der Lebenszyklus direkt nach derEvent
übergeht. (I00887) - Es wurden
Lifecycle.withStateAtLeast
APIs hinzugefügt, die auf einen Lebenszyklusstatus warten und einen Codeblock ohne Sperrung synchron zum Zeitpunkt der Statusänderung ausführen und dann mit dem Ergebnis fortfahren. Diese APIs unterscheiden sich von den vorhandenenwhen*
-Methoden, da sie das Ausführen von Code zum Anhalten nicht erlauben und keinen benutzerdefinierten Dispatcher verwenden. (aosp/1326081)
Änderungen des Verhaltens
- LifecycleRegistry erzwingt jetzt
DESTROYED
als Terminalstatus. (I00887) LifecycleRegistry
prüft jetzt, ob die Methoden im Hauptthread aufgerufen werden. Dies war schon immer eine Voraussetzung für Lebenszyklen von Aktivitäten, Fragmenten usw. Durch das Hinzufügen von Beobachtern aus Nicht-Hauptthreads konnten Abstürze während der Laufzeit nur schwer erkannt werden. BeiLifecycleRegistry
-Objekten, die Ihren eigenen Komponenten gehören, können Sie Prüfungen explizit mitLifecycleRegistry.createUnsafe(...)
deaktivieren. Sie müssen jedoch dafür sorgen, dass eine ordnungsgemäße Synchronisierung erfolgt, wenn auf dieseLifecycleRegistry
aus verschiedenen Threads zugegriffen wird (Ie7280, b/137392809).
Fehlerkorrekturen
- Ein Absturz in
NullSafeMutableLiveData
wurde behoben. (b/159987480) - Ein
ObsoleteLintCustomCheck
für Lint-Prüfungen 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 freigegeben. Version 2.3.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
LiveData
ist nun besser für die Bearbeitung von Fällen, die erneut eintreten, und vermeidet doppelte Aufrufe vononActive()
oderonInactive()
. (b/157840298)- Es wurde ein Problem behoben, bei dem Lint-Prüfungen nicht ausgeführt wurden, wenn Android Studio 4.1 Canary 6 oder höher verwendet wurde. (aosp/1331903)
Version 2.3.0-alpha04
10. Juni 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha04
wird freigegeben. Version 2.3.0-alpha04 enthält diese Commits.
Fehlerkorrekturen
- Ein Absturz in 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 Typparameter ungleich null festgelegt wurde. (b/156002218)
Version 2.3.0-alpha03
20. Mai 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha03
werden freigegeben. Version 2.3.0-alpha03 enthält diese Commits.
Neue Funktionen
SavedStateHandle
unterstützt jetzt Lazy Serialisierung, indem es Ihnen ermöglicht,setSavedStateProvider()
für einen bestimmten Schlüssel aufzurufen und einSavedStateProvider
bereitzustellen, das einen Callback vonsaveState()
erhält, wennSavedStateHandle
aufgefordert wird, seinen Status zu speichern. (b/155106862)- Mit einer neuen
ViewTreeViewModelStoreOwner.get(View)
API können Sie die enthalteneViewModelStoreOwner
bei einerView
-Instanz abrufen. Sie müssen ein Upgrade auf Activity1.2.0-alpha05
, Fragment1.3.0-alpha05
und AppCompat1.3.0-alpha01
ausführen, damit dieses Feld korrekt ausgefüllt wird.lifecycle-viewmodel-ktx
wurde die Kotlin-ErweiterungfindViewModelStoreOwner()
hinzugefügt. (aosp/1295522)
Fehlerkorrekturen
- Es wurde ein Problem behoben, bei dem
MutableLiveData
-Lint-Prüfungen, die im Lebenszyklus2.3.0-alpha01
veröffentlicht wurden, nicht zusammen mit dem Artefaktlifecycle-livedata-core-ktx
veröffentlicht wurden. (b/155323109)
Version 2.3.0-alpha02
29. April 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha02
wird freigegeben. Version 2.3.0-alpha02 enthält diese Commits.
API-Änderungen
- Mit
SavedStateViewModelFactory
können Sie jetzt ein Null-Application
an seinen Konstruktor übergeben, um besser Fälle zu berücksichtigen, in denen eine solche nicht verfügbar ist undAndroidViewModel
keine Unterstützung benötigt. (aosp/1285740)
Fehlerkorrekturen
- Verbesserte Kaltstartleistung durch Vermeidung von Fehlern bei der Klassenüberprüfung auf Geräten mit API 28 und niedriger. (aosp/1282118)
Version 2.3.0-alpha01
4. März 2020
androidx.lifecycle:lifecycle-*:2.3.0-alpha01
wird freigegeben. Version 2.3.0-alpha01 enthält diese Commits.
Neue Funktionen
- Mit einer neuen
ViewTreeLifecycleOwner.get(View)
API können Sie die enthalteneLifecycleOwner
bei einerView
-Instanz abrufen. Sie müssen ein Upgrade auf Aktivität1.2.0-alpha01
und Fragment1.3.0-alpha01
durchführen, um dieses Feld korrekt auszufüllen. Inlifecycle-runtime-ktx
ist die Kotlin-ErweiterungfindViewTreeLifecycleOwner
verfügbar. (aosp/1182361, aosp/1182956) - Es wurde eine neue Lint-Prüfung hinzugefügt, die Sie warnt, wenn ein
null
-Wert für eineMutableLiveData
festgelegt wird, die in Kotlin als nicht null definiert wurde. Dies ist verfügbar, wenn die Artefaktelivedata-core-ktx
oderlivedata-ktx
verwendet werden. (aosp/1154723, aosp/1159092) - Es ist ein neues
lifecycle-runtime-testing
-Artefakt verfügbar, das eineTestLifecycleOwner
bereitstellt, dieLifecycleOwner
implementiert und einen Thread-sicheren änderbarenLifecycle
bietet. (aosp/1242438)
Fehlerkorrekturen
- Das Artefakt
lifecycle-runtime
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 freigegeben. Version 2.2.0 enthält diese Commits.
„Lifecycle ViewModel“ hat jetzt dieselbe Version wie andere Lebenszyklusartefakte. Das Verhalten von 2.2.0
entspricht dem von 1.0.0
.
Version 2.2.0
22. Januar 2020
androidx.lifecycle:lifecycle-*:2.2.0
wird freigegeben. Version 2.2.0 enthält diese Commits.
Wichtige Änderungen seit Version 2.1.0
- Lebenszyklus-Koroutinenintegration: Das neue
lifecycle-runtime-ktx
-Artefakt bietet eine Integration zwischen Lebenszyklus- und Kotlin-Coroutinen.lifecycle-livedata-ktx
wurde ebenfalls erweitert, um von Koroutinen zu profitieren. Weitere Informationen finden Sie unter Kotlin-Coroutinen mit Architekturkomponenten verwenden. - Einstellung von
ViewModelProviders.of()
:ViewModelProviders.of()
wurde eingestellt. Sie können einFragment
oderFragmentActivity
an den neuenViewModelProvider(ViewModelStoreOwner)
-Konstruktor übergeben, um dieselbe Funktionalität zu erreichen, wenn Sie Fragment1.2.0
verwenden. - Einstellung von
lifecycle-extensions
-Artefakten: Mit der oben genannten Einstellung vonViewModelProviders.of()
wird in diesem Release auch die letzte API inlifecycle-extensions
eingestellt. Dieses Artefakt sollte jetzt in seiner Gesamtheit als verworfen betrachtet werden. Wir empfehlen dringend, sich an den spezifischen Lebenszyklusartefakten zu orientieren, die Sie benötigen (z. B.lifecycle-service
, wenn SieLifecycleService
verwenden, undlifecycle-process
, wenn SieProcessLifecycleOwner
verwenden) und nichtlifecycle-extensions
, da es keine zukünftige2.3.0
-Version vonlifecycle-extensions
geben wird. - Gradle Partial Annotation Processor: Der Annotationsprozessor von Lifecycle ist standardmäßig inkrementell.
Wenn Ihre Anwendung in der Programmiersprache Java 8 geschrieben ist, können Sie stattdessen
DefautLifecycleObserver
verwenden. Ist sie in der Programmiersprache Java 7 geschrieben, können SieLifecycleEventObserver
verwenden.
Version 2.2.0-rc03
4. Dezember 2019
androidx.lifecycle:lifecycle-*:2.2.0-rc03
wird freigegeben. Version 2.2.0-rc03 enthält diese Commits.
Fehlerkorrekturen
- Ein Fehler wurde behoben, der auftrat, wenn eine mockierte
ViewModel
inViewModelStore
gespeichert und später mit der Standard-Factory abgefragt wurde. - Die Verwendung von
Dispatchers.Main.immediate
inlaunchWhenCreated
und ähnlichen Methoden, die während des entsprechenden Lebenszyklusereignisses synchron aufgerufen werden, wurde korrigiert. (aosp/1156203)
Externe Beiträge
- Vielen Dank an Anders Järleberg für diesen Beitrag! (aosp/1156203)
- Vielen Dank an Vsevolod Tolstopyatov von Jetbrains für die Überprüfung der Implementierung einer Inline-Ausführung.
Abhängigkeitsänderungen
- Lebenszykluserweiterungen hängen jetzt von Fragment
1.2.0-rc03
ab.
Version 2.2.0-rc02
7. November 2019
androidx.lifecycle:lifecycle-*:2.2.0-rc02
wird freigegeben. Version 2.2.0-rc02 enthält diese Commits.
Fehlerkorrekturen
- Bei der Proguard-Einrichtung der Bibliothek wurde ein Fehler behoben, der Geräte mit API 28 oder höher betraf, wenn die Ziel-API unter 29 liegt. (b/142778206)
Version 2.2.0-rc01
23. Oktober 2019
androidx.lifecycle:lifecycle-*:2.2.0-rc01
wird freigegeben. Version 2.2.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem
launchWhenCreated
und ähnliche Methoden einen Frame später als die verknüpfte Lebenszyklusmethode ausgeführt haben, daDispatchers.Main
anstelle vonDispatchers.Main.immediate
verwendet wurde. (aosp/1145596)
Externe Beiträge
- Vielen Dank an Nicklas Ansman für den Beitrag zur Fehlerbehebung! (aosp/1145596)
Version 2.2.0-beta01
9. Oktober 2019
androidx.lifecycle:lifecycle-*:2.2.0-beta01
wird freigegeben. Version 2.2.0-beta01 enthält diese Commits.
Fehlerkorrekturen
- Es wurde eine Regression behoben, die in Lebenszyklus 2.2.0-alpha05 in der Reihenfolge
ProcessLifecycleOwner
eingeführt wurde und dieLifecycleOwner
der Aktivität auf Android 10-Geräten zum Beginn und fortgesetzt wurde. (aosp/1128132) - Eine im Lebenszyklus
2.2.0-alpha05
eingeführte Regression wurde behoben, die bei Verwendung von 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 freigegeben. Version 2.2.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
- Eine Race-Bedingung im Livedata-Builder für Coroutine wurde behoben. b/140249349
Version 2.2.0-alpha04
5. September 2019
androidx.lifecycle:lifecycle-*:2.2.0-alpha04
wird freigegeben. Die in dieser Version enthaltenen Commits finden Sie hier.
Neue Funktionen
lifecycleScope
,whenCreated
,whenStarted
,whenResumed
,viewModelScope
und die zugrunde liegende Implementierung vonliveData
verwenden jetztDispatchers.Main.immediate
anstelle vonDispatchers.Main
. (b/139740492)
Externe Beiträge
- Vielen Dank an Nicklas Ansman für den Wechsel zu
Dispatchers.Main.immediate
! (aosp/1106073)
Version 2.2.0-alpha03
7. August 2019
androidx.lifecycle:lifecycle-*:2.2.0-alpha03
wird freigegeben. Die in dieser Version enthaltenen Commits finden Sie hier.
Neue Funktionen
- Implementierungen von
ViewModelStoreOwner
können jetzt optionalHasDefaultViewModelProviderFactory
implementieren, um eine Standard-ViewModelProvider.Factory
bereitzustellen. Dies gilt für Aktivität1.1.0-alpha02
, Fragment1.2.0-alpha02
und Navigation2.2.0-alpha01
. (aosp/1092370, b/135716331)
API-Änderungen
ViewModelProviders.of()
wurde eingestellt. Sie können einenFragment
oderFragmentActivity
an den neuenViewModelProvider(ViewModelStoreOwner)
-Konstruktor übergeben, um dieselbe Funktionalität zu erreichen. (aosp/1009889)
Version 2.2.0-alpha02
2. Juli 2019
androidx.lifecycle:*:2.2.0-alpha02
wird freigegeben. Die in dieser Version enthaltenen Commits finden Sie hier.
API-Änderungen
LiveDataScope.initialValue
wurde durchLiveDataScope.latestValue
ersetzt, um den aktuell ausgegebenen Wert des BlocksliveData
zu verfolgen.- Dem
liveData
-Builder, der dentimeout
-Parameter als TypDuration
empfängt, wurde eine neue Überlastung hinzugefügt.
Version 2.2.0-alpha01
7. Mai 2019
androidx.lifecycle:*:2.2.0-alpha01
wird freigegeben. Die in dieser Version enthaltenen Commits finden Sie hier.
Neue Funktionen
- Dieser Release enthält neue Funktionen, die Kotlin-Koroutinen für Lifecycle und LiveData unterstützen. Eine ausführliche Dokumentation 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 freigegeben. Version 1.0.0 enthält diese Commits.
Wichtige Funktionen in Version 1.0.0
- Die neue Klasse SavedStateHandle wurde hinzugefügt. Damit können Ihre
ViewModel
-Klassen auf den gespeicherten Status zugreifen und zum gespeicherten Status beitragen. Dieses Objekt kann im Konstruktor derViewModel
-Klasse und Factorys empfangen werden, die standardmäßig von Fragments bereitgestellt werden. AppCompatActivity injiziertSavedStateHandle
automatisch. - ZusammenfassungSavedStateViewModelFactory wurde hinzugefügt. Damit können Sie benutzerdefinierte Factorys für
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 freigegeben. Version 1.0.0-rc03 enthält diese Commits.
Abhängigkeitsänderungen
- Der gespeicherte Status von „ViewModel“ im Lebenszyklus hängt jetzt vom Lebenszyklus
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 freigegeben. Version 1.0.0-rc02 enthält diese Commits.
Abhängigkeitsänderungen
- Ist jetzt vom Lebenszyklus
2.2.0-rc02
abhängig.
ViewModel-SavedState Version 1.0.0-rc01
23. Oktober 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01
wird ohne Änderungen im Vergleich zu 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 freigegeben. Version 1.0.0-beta01 enthält diese Commits.
Fehlerkorrekturen
- Es wurde ein Problem behoben, bei dem der erste Zugriff auf eine SavedState ViewModel in
Activity.onActivityResult()
zu einemIllegalStateException
führte. (b/139093676) - Ein
IllegalStateException
bei der 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 freigegeben. Version 1.0.0-alpha05 enthält diese Commits.
API-Änderungen
SavedStateViewModelFactory
erweitertAbstractSavedStateViewModelFactory
nicht mehr undSavedStateHandle
wird nur für ViewModels erstellt, die sie angefordert haben (aosp/1113593).
ViewModel-SavedState Version 1.0.0-alpha03
7. August 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03
wird freigegeben. Die in dieser Version enthaltenen Commits finden Sie hier.
Wichtige Änderungen
lifecycle-viewmodel-savedstate
hängt nicht mehr vonfragment
ab und die zugehörigen KonstruktorenSavedStateViewModelFactory(Fragment)
undSavedStateViewModelFactory(FragmentActivity)
wurden entfernt. Stattdessen istSavedStateViewModelFactory
jetzt die Standard-Factory 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 freigegeben. Die in dieser Version enthaltenen Commits finden Sie hier.
Neue Funktionen
SavedStateHandle.getLiveData()
-Überlastung hinzugefügt, die einen Standardwert akzeptiert.
API-Änderungen
SavedStateVMFactory
wurde inSavedStateViewModelFactory
umbenannt.AbstractSavedStateVMFactory
wurde inAbstractSavedStateViewModelFactory
umbenannt.
ViewModel-Savedstate Version 1.0.0-alpha01
13. März 2019
androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01
wird freigegeben. Das vollständige Commit-Log für diesen ersten Release finden Sie hier.
Neue Funktionen
ViewModels
kann jetzt zum gespeicherten Zustand beitragen. Dazu verwenden Sie den neu eingeführten Factory-SavedStateVMFactory
von Viewmodel 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 für Fälle hinzugefügt, in denen ein Stream von Lebenszyklusereignissen benötigt wird. Es ist eine öffentliche API und keine ausgeblendeteGenericLifecycleObserver
-Klasse.- ktx-Erweiterungen für
LiveData.observe
-Methoden undTransformations.*
-Methoden hinzugefügt. Transformations.distinctUntilChanged
wurde hinzugefügt, um ein neues LiveData-Objekt zu erstellen, das erst dann einen Wert ausgibt, wenn der QuellwertLiveData
geändert wurde.- Die Unterstützung von Koroutinen wurde in ViewModels durch Hinzufügen der Erweiterungseigenschaft
ViewModel.viewModelScope
hinzugefügt.
Version 2.1.0
5. September 2019
androidx.lifecycle:lifecycle-*:2.1.0
wird freigegeben. 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 im Vergleich zu 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 freigegeben. Die in dieser Version enthaltenen Commits finden Sie hier.
Neue Funktionen
- Die Lebenszyklen sind jetzt in der Betaphase: Die in früheren Alphaversionen eingeführten APIs wie
liveData
-Erweiterungsfunktionen für Transformationen und Beobachtungen, dieViewModel
-Initialisierung mit Attributdelegierung und andere sind stabil und werden sich nicht ändern.
Version 2.1.0-alpha04
3. April 2019
androidx.lifecycle:*:2.1.0-alpha04
wird freigegeben. Die in dieser Version enthaltenen Commits finden Sie hier.
API-Änderungen
- Nicht abwärtskompatible Änderung: Die zugrunde liegende API hinter
by viewModels()
undby activityViewModels()
wurde geändert, sodassViewModelStore
direkt und nicht mehr nurViewModelStoreOwner
unterstützt wird. (aosp/932932)
Version 2.1.0-alpha03
13. März 2019
androidx.lifecycle:*:2.1.0-alpha03
wird freigegeben. Die vollständige Liste der in dieser Version enthaltenen Commits finden Sie hier.
API-Änderungen
- "
ViewModelProvider.KeyedFactory
" wurde entfernt. Die zweite Schnittstelle nebenViewModelProvider.Factory
bot keine guten Ergebnisse für die neuen Funktionen zur Property-Delegierung in Kotlinby viewmodels {}
. (aosp/914133)
Version 2.1.0-alpha02
30. Januar 2019
androidx.lifecycle 2.1.0-alpha02
wird freigegeben.
API-Änderungen
LifecycleRegistry
enthält jetzt einesetCurrentState()
-Methode, die die mittlerweile verworfene MethodesetState()
ersetzt. (aosp/880715)
Fehlerkorrekturen
- Es wurde ein Problem behoben, bei dem simulierte
ViewModel
-Instanzen abstürzten, wenn die enthalteneViewModelStore
gelöscht wurde. b/122273087
Version 2.1.0-alpha01
17. Dezember 2018
androidx.lifecycle 2.1.0-alpha01
wird freigegeben.
Neue Funktionen
LifecycleEventObserver
wurde für Fälle hinzugefügt, in denen ein Stream von Lebenszyklusereignissen benötigt wird. Es ist eine öffentliche API und keine ausgeblendeteGenericLifecycleObserver
-Klasse.- ktx-Erweiterungen für
LiveData.observe
-Methoden undTransformations.*
-Methoden hinzugefügt. - Methode
Transformations.distinctUntilChanged
wurde hinzugefügt. Damit wird ein neuesLiveData
-Objekt erstellt, das erst dann einen Wert ausgibt, wenn der LiveData-Quellwert geändert wurde. - Unterstützung für die Koroutine 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
wurde mit einer Fehlerkorrektur von 2.0.0-rc01
in ViewModel freigegeben.
Fehlerkorrekturen
- Problem mit einer ViewModel-Proguard-Regel behoben, durch die Konstruktoren b/112230489 fälschlicherweise entfernt wurden
Version 2.0.0-beta01
2. Juli 2018
Fehlerkorrekturen
- LifecycleObserver-Proguard-Regel wurde korrigiert, sodass nur Implementierungen und keine Subschnittstellen beibehalten werden b/71389427
- Korrigierte ViewModel-Proguard-Regeln, um Verschleierung und Verkleinerung zu ermöglichen
Vor AndroidX-Versionen
Schließen Sie für die folgenden Vor-AndroidX-Versionen von Lifecycle die folgenden Abhängigkeiten ein:
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
Nur eine kleine Änderung: android.arch.core.util.Function
wird von arch:runtime
nach arch:common
verschoben. Dadurch kann sie ohne die Laufzeitabhängigkeit verwendet werden, z.B. in paging:common
unten.
lifecycle:common
ist eine Abhängigkeit von lifecycle:runtime
. Diese Änderung wirkt sich daher nicht direkt auf lifecycle:runtime
aus, sondern nur auf Module, die wie die Paginierung direkt von lifecycle:common
abhängig sind.
Version 1.1.0
22. Januar 2018
Änderungen bei der Paketerstellung
Jetzt sind neue, viel kleinere Abhängigkeiten verfügbar:
android.arch.lifecycle:livedata:1.1.0
android.arch.lifecycle:viewmodel:1.1.0
API-Änderungen
- Die verworfenen
LifecycleActivity
undLifecycleFragment
wurden jetzt entfernt. VerwendeFragmentActivity
,AppCompatActivity
oder unterstütztFragment
. ViewModelProviders
undViewModelStores
wurden@NonNull
Anmerkungen hinzugefügt- Der
ViewModelProviders
-Konstruktor wurde verworfen – verwende die statischen Methoden direkt ViewModelProviders.DefaultFactory
wurde eingestellt – verwendeViewModelProvider.AndroidViewModelFactory
- Die statische Methode
ViewModelProvider.AndroidViewModelFactory.getInstance(Application)
wurde hinzugefügt, um eine statischeFactory
abzurufen, die zum Erstellen vonViewModel
- undAndroidViewModel
-Instanzen geeignet ist.