Lebenszyklus

Lebenszyklusbewusste Komponenten führen Aktionen als Reaktion auf eine Änderung des Lebenszyklusstatus einer anderen Komponente aus, z. B. Aktivitäten und Fragmenten. Diese Komponenten helfen Ihnen, besser organisierten und oft leichteren Code zu erstellen, der einfacher zu warten ist.

In dieser Tabelle sind alle Artefakte in der Gruppe androidx.lifecycle aufgeführt.

Artefakt Stabile Version Releasekandidat Beta-Ausgabe Alpharelease
lifecycle-* 2.9.1 - -
lifecycle-viewmodel-navigation3 - - 1.0.0-alpha03
Diese Bibliothek wurde zuletzt am 2. Juli 2025 aktualisiert.

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 benötigten Artefakte hinzu:

Kotlin

Groovy

    dependencies {
        def lifecycle_version = "2.9.1"
        def arch_version = "2.2.0"

        // ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
        // ViewModel utilities for Compose
        implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version"
        // LiveData
        implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
        // Lifecycles only (without ViewModel or LiveData)
        implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"
        // Lifecycle utilities for Compose
        implementation "androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version"

        // Saved state module for ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version"

        // ViewModel integration with Navigation3
        implementation "androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha03"

        // Annotation processor
        kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version"

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version"

        // optional - ReactiveStreams support for LiveData
        implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version"

        // optional - Test helpers for LiveData
        testImplementation "androidx.arch.core:core-testing:$arch_version"

        // optional - Test helpers for Lifecycle runtime
        testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version"
    }
    

Kotlin

    dependencies {
        val lifecycle_version = "2.9.1"
        val arch_version = "2.2.0"

        // ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version")
        // ViewModel utilities for Compose
        implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version")
        // LiveData
        implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version")
        // Lifecycles only (without ViewModel or LiveData)
        implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version")
        // Lifecycle utilities for Compose
        implementation("androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version")

        // Saved state module for ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version")

        // ViewModel integration with Navigation3
        implementation("androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha03")

        // Annotation processor
        kapt("androidx.lifecycle:lifecycle-compiler:$lifecycle_version")
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version")

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version")

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version")

        // optional - ReactiveStreams support for LiveData
        implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version")

        // optional - Test helpers for LiveData
        testImplementation("androidx.arch.core:core-testing:$arch_version")

        // optional - Test helpers for Lifecycle runtime
        testImplementation ("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version")
    }
    

Java

Groovy

    dependencies {
        def lifecycle_version = "2.9.1"
        def arch_version = "2.2.0"

        // ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
        // LiveData
        implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
        // Lifecycles only (without ViewModel or LiveData)
        implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version"

        // Saved state module for ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version"

        // Annotation processor
        annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version"

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version"

        // optional - ReactiveStreams support for LiveData
        implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version"

        // optional - Test helpers for LiveData
        testImplementation "androidx.arch.core:core-testing:$arch_version"

        // optional - Test helpers for Lifecycle runtime
        testImplementation "androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version"
    }
    

Kotlin

    dependencies {
        val lifecycle_version = "2.9.1"
        val arch_version = "2.2.0"

        // ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version")
        // LiveData
        implementation("androidx.lifecycle:lifecycle-livedata:$lifecycle_version")
        // Lifecycles only (without ViewModel or LiveData)
        implementation("androidx.lifecycle:lifecycle-runtime:$lifecycle_version")

        // Saved state module for ViewModel
        implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version")

        // Annotation processor
        annotationProcessor("androidx.lifecycle:lifecycle-compiler:$lifecycle_version")
        // alternately - if using Java8, use the following instead of lifecycle-compiler
        implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version")

        // optional - helpers for implementing LifecycleOwner in a Service
        implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version")

        // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
        implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version")

        // optional - ReactiveStreams support for LiveData
        implementation("androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version")

        // optional - Test helpers for LiveData
        testImplementation("androidx.arch.core:core-testing:$arch_version")

        // optional - Test helpers for Lifecycle runtime
        testImplementation("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version")
    }
    

Weitere Informationen zu Abhängigkeiten finden Sie unter Build-Abhängigkeiten hinzufügen.

Feedback

Ihr Feedback hilft uns, Jetpack zu verbessern. Lassen Sie es 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 ein neues erstellen. Sie können für ein vorhandenes Problem abstimmen, indem Sie auf die Schaltfläche mit dem Stern klicken.

Neues Problem erstellen

Weitere Informationen finden Sie in der Dokumentation zur Problemverfolgung.

Lifecycle ViewModel Navigation3 Version 1.0.0

Version 1.0.0-alpha03

2. Juli 2025

androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha03 und androidx.lifecycle:lifecycle-viewmodel-navigation3-android:1.0.0-alpha03 werden veröffentlicht. Version 1.0.0-alpha03 enthält diese Commits.

Änderungen an Abhängigkeiten

Version 1.0.0-alpha02

18. Juni 2025

androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha02 und androidx.lifecycle:lifecycle-viewmodel-navigation3-android:1.0.0-alpha02 werden veröffentlicht. Version 1.0.0-alpha02 enthält diese Commits.

Abhängigkeitsupdates

Version 1.0.0-alpha01

23. Mai 2025

androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-alpha01 wird veröffentlicht. Version 1.0.0-alpha01 enthält diese Commits.

Neue Funktionen

  • Lifecycle ViewModel Navigation3 ist eine neue Bibliothek, die zusammen mit Navigation3 entwickelt wurde, um Integrationen mit ViewModels zu ermöglichen. Das androidx.lifecycle:lifecycle-viewmodel-navigation3-Artefakt stellt die ViewModelStoreNavEntryDecorator bereit, die einen eindeutigen ViewModelStoreOwner für den Inhalt jedes NavEntry enthält. Außerdem wird ein rememberViewModelStoreNavEntryDecorator() bereitgestellt, damit der Decorator bei Konfigurationsänderungen richtig verarbeitet wird.
val viewModelDecorator = rememberViewModelStoreNavEntryDecorator()

NavDisplay(
  ,
  entryDecorators =
  listOf(
    rememberSceneSetupNavEntryDecorator(),
    rememberSavedStateNavEntryDecorator(),
    viewModelDecorator
  )
)

Version 2.9

Version 2.9.1

4. Juni 2025

androidx.lifecycle:lifecycle-*:2.9.1 wird veröffentlicht. Version 2.9.1 enthält diese Commits.

Fehlerkorrekturen

  • Problem behoben: SavedStateHandle.remove(key) löscht SavedStateHandle.getMutableStateFlow(key)-Zustände nicht. (d5f939, b/418746333)

Version 2.9.0

7. Mai 2025

androidx.lifecycle:lifecycle-*:2.9.0 wird veröffentlicht. Version 2.9.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.8.0

  • Es ist ein neues androidx.lifecycle:lifecycle-viewmodel-testing-KMP-Artefakt verfügbar, das eine ViewModelScenario-Klasse zum isolierten Testen von ViewModels bietet. Es unterstützt onCleared und SavedStateHandle sowie das Testen von Prozessende und ‑neustart über recreate().
  • Fügen Sie getMutableStateFlow zu SavedStateHandle hinzu, um MutableStateFlow zurückzugeben. Diese neue Funktion ist nur mit Schlüssel verfügbar und kann nicht mit getLiveData verwendet werden. Wenn Sie versuchen, mit beiden auf denselben Status zuzugreifen, wird eine Ausnahme ausgelöst.
  • CreationExtras enthält jetzt kartenähnliche Operatorüberladungen, die eine idiomatische Bearbeitung von Inhalten in Kotlin ermöglichen. Sie ermöglicht die Verwendung von in, += und + mit CreationExtras.

Unterstützung für KotlinX-Serialisierung

  • Mit der Unterstützung von KotlinX Serialization, die in SavedState 1.3.0 hinzugefügt wurde, haben wir saved eingeführt, einen Lazy-Property-Delegate, mit dem sich @Serializable-Klassen ganz einfach in einem SavedStateHandle speichern lassen und diese Klassen automatisch nach dem Beenden und erneuten Erstellen des Prozesses wiederhergestellt werden. Der saved-Delegate ist lazy und ruft die init-Lambda-Funktion erst auf oder speichert erst dann etwas in SavedStateHandle, wenn darauf zugegriffen wird.

    @Serializable
    data class Person(val firstName: String, val lastName: String)
    
    class MyViewModel(handle: SavedStateHandle) : ViewModel() {
        var person by handle.saved { Person("John", "Doe") }
    
        fun onPersonChanged(person: Person) {
            this.person = person
        }
    }
    

Kotlin Multiplatform

  • Das Modul lifecycle-testing ist jetzt KMP-kompatibel, einschließlich APIs wie TestLifecycleOwner.
  • Das Modul lifecycle-viewmodel-savedstate ist jetzt KMP-kompatibel, einschließlich APIs wie SavedStateHandle.
  • androidx.compose.ui.platform.LocalLifecycleOwner ist jetzt im gemeinsamen Quellset verfügbar.
  • NewInstanceFactory ist jetzt für JVM-Desktop- und Android-Ziele verfügbar.

Geändertes Verhalten

  • Der Status Lifecycle.DESTROYED ist ein Endstatus. Jeder Versuch, ein Lifecycle daraus in einen anderen Status zu verschieben, führt jetzt zu einem IllegalStateException.
  • SavedStateHandle enthält keine SavedStateProvider.saveState() mehr, bei denen der zurückgegebene Bundle leer ist.

Version 2.9.0-rc01

23. April 2025

androidx.lifecycle:lifecycle-*:2.9.0-rc01 wird veröffentlicht. Version 2.9.0-rc01 enthält diese Commits.

Version 2.9.0-beta01

9. April 2025

androidx.lifecycle:lifecycle-*:2.9.0-beta01 wird veröffentlicht. Version 2.9.0-beta01 enthält diese Commits.

API-Änderungen

  • Lifecycle ViewModel Compose verwendet jetzt dieselbe Kotlin Multiplatform-Einrichtung wie Compose Runtime 1.7.1 und höher. Die -desktop-Artefakte wurden entfernt und die -jvmStubs- und -linuxx64Stubs-Artefakte wurden hinzugefügt. Keines dieser Ziele ist für die Verwendung vorgesehen. Sie sind Platzhalter, um die Bemühungen von Jetbrains Compose zu unterstützen. (I5cb14, b/406592090)

Abhängigkeitsupdates

  • Diese Bibliothek ist jetzt auf das Kotlin 2.0-Sprachniveau ausgerichtet und erfordert KGP 2.0.0 oder höher. (Idb6b5)
  • Lifecycle ViewModel Compose hängt jetzt von Compose 1.7.8 ab. (I5cb14, b/406592090)

Version 2.9.0-alpha13

26. März 2025

androidx.lifecycle:lifecycle-*:2.9.0-alpha13 wird ohne nennenswerte öffentliche Änderungen veröffentlicht. Version 2.9.0-alpha13 enthält diese Commits.

Version 2.9.0-alpha12

12. März 2025

androidx.lifecycle:lifecycle-*:2.9.0-alpha12 wird veröffentlicht. Version 2.9.0-alpha12 enthält diese Commits.

API-Änderungen

  • Fügen Sie ViewModelProvider.get auf allen unterstützten KMP-Plattformen die Annotation @MainThread hinzu. (I7e8dd, b/397736115)
  • Benennen Sie SavedState*Delegates in SavedState*Delegate um. (I8589b, b/399629301)

Version 2.9.0-alpha11

26. Februar 2025

androidx.lifecycle:lifecycle-*:2.9.0-alpha11 wird veröffentlicht. Version 2.9.0-alpha11 enthält diese Commits.

API-Änderungen

  • SavedStateConfig-Parameter zu saved()-Delegaten hinzufügen (I39b3a)

Version 2.9.0-alpha10

12. Februar 2025

androidx.lifecycle:lifecycle-*:2.9.0-alpha10 wird veröffentlicht. Version 2.9.0-alpha10 enthält diese Commits.

API-Änderungen

  • Verschiebe MutableStateSerializer von lifecycle-viewmodel-compose nach savedstate-compose. (I4f690, b/378895074)

Externe Beiträge

  • Es wird ein neues Lint-Problem für den Aufruf von Lifecycle::currentState in der Komposition hinzugefügt. Stattdessen wird die Verwendung von currentStateAsalue().value empfohlen, damit Änderungen am Lebenszyklusstatus korrekt zu einer Neukomposition führen. Vielen Dank, Steven Schoen! (Iad484)

Version 2.9.0-alpha09

29. Januar 2025

androidx.lifecycle:lifecycle-*:2.9.0-alpha09 wird veröffentlicht. Version 2.9.0-alpha09 enthält diese Commits.

Neue Funktionen

  • MutableStateSerializer zum Serialisieren von androidx.compose.runtime.MutableState hinzugefügt. (Idfc48, b/378895074)

API-Änderungen

  • Überladene SavedStateHandle.saved()-Delegatfunktionen durch Standardparameter ersetzen (Icd1c1)
  • AbstractSavedStateViewModelFactory ist veraltet, da für jedes ViewModel ein SavedStateHandle erstellt wird, was zu unnötigem Overhead führt. Verwenden Sie stattdessen ViewModelProvider.Factory mit CreationExtras.createSavedStateHandle, um ViewModel effizienter zu erstellen. (Ia920b, b/388590327)

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 Systemprozess-Tod zu simulieren, bei dem der zu testende ViewModel und alle zugehörigen Komponenten neu erstellt werden. (Id6a69, b/381063087)
  • LifecycleOwner- und ViewModelStoreOwner-Instanzen, die über die entsprechenden findViewTree-APIs abgerufen werden, können jetzt über disjunkte übergeordnete Elemente einer Ansicht, z. B. eine ViewOverlay, aufgelöst werden. Weitere Informationen zu disjunkten Ansichtseltern finden Sie in den Versionshinweisen von core oder in der Dokumentation unter ViewTree.setViewTreeDisjointParent. (I800f4)

API-Änderungen

  • Die Benennung und Paketorganisation müssen konsistenter mit SavedStateRegistryOwnerDelegate sein (I8c135, b/376026744).

Fehlerkorrekturen

  • In dieser Bibliothek werden jetzt JSpecify-Nullable-Annotationen verwendet, die typbezogen sind. Kotlin-Entwickler sollten das folgende Compiler-Argument verwenden, um die korrekte Verwendung zu erzwingen: -Xjspecify-annotations=strict (dies ist die Standardeinstellung ab Version 2.1.0 des Kotlin-Compilers). (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 mit Kotlin Multiplatform

  • Der Lebenszyklus ViewModel SavedState ist jetzt mit KMP kompatibel. So können Sie SavedStateHandle in gemeinsamem Code verwenden. (Ib6394, b/334076622)

Unterstützung für KotlinX-Serialisierung

  • Mit der Unterstützung von KotlinX Serialization, die in SavedState 1.3.0-alpha05 hinzugefügt wurde, haben wir saved eingeführt, einen Lazy-Property-Delegate, mit dem sich @Serializable-Klassen ganz einfach in einem SavedStateHandle speichern lassen und diese Klassen automatisch nach dem Beenden und erneuten Erstellen des Prozesses wiederhergestellt werden. Der saved-Delegate ist lazy und ruft die init-Lambda-Funktion erst auf oder speichert erst dann etwas in SavedStateHandle, wenn 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 zu SavedStateHandle hinzu, um MutableStateFlow zurückzugeben. Diese neue Funktion ist nur mit Schlüssel verfügbar und kann nicht mit getLiveData verwendet werden. Wenn Sie versuchen, mit beiden 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.

Geändertes Verhalten

  • Der Status Lifecycle.DESTROYED ist ein Endstatus. Jeder Versuch, ein Lifecycle daraus in einen anderen Status zu verschieben, führt jetzt zu einem IllegalStateException. (I116c4, b/370577987)
  • SavedStateHandle enthält keine SavedStateProvider.saveState() mehr, bei denen der zurückgegebene Bundle leer ist. (I910b5, b/370577987)

Fehlerkorrekturen

  • Lifecycle.eventFlow wird jetzt korrekt abgeschlossen, wenn Lifecycle gleich 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 Modul lifecycle-viewmodel-savedstate ist jetzt für KMP konfiguriert, um APIs wie SavedStateHandle vorzubereiten, die in einer zukünftigen Version im gemeinsamen Quellsatz verfügbar sein werden. (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

  • Ab Lifecycle 2.8.6: Der Lint-Fehler NullSafeMutableLiveData bietet eine verbesserte Unterstützung für Smart Casts, wodurch Fehlalarme vermieden werden. (85fed6, b/181042665)

Abhängigkeitsupdates

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

  • Lebenszyklus 2.8.5: Aktualisieren Sie die androidx.lifecycle.ReportFragment ProGuard-Regeln, um die Verschleierung zuzulassen . (ff898e1)

Externe Beiträge

  • Verschiebe androidx.compose.ui.platform.LocalLifecycleOwner in den gemeinsamen Quellsatz (KMP). Vielen Dank an Ivan Matkov von JetBrains für diesen Beitrag. (8cd5d03)
  • Ab Lifecycle 2.8.5: Die Erweiterungsdelegierung „SavedStateHandle.saveable“ unterstützt jetzt Nullwerte. Vielen Dank an Roman Kalukiewicz für diesen 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 mit KMP kompatibel. (Iea41e)
  • Unterstützung für das 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 eine ViewModelScenario-Klasse zum isolierten Testen von ViewModels mit Unterstützung für onCleared (alle Plattformen) und SavedStateHandle (nur Android) bietet. (337f68d, c9b3409, 9799a95c, b/264602919)
  • Das Erstellen eines ViewModel mit ViewModelProvider ist jetzt threadsicher. @MainThread-Anmerkungen wurden entfernt. (Ifd978, b/237006831)

API-Änderungen

  • Fügen Sie die Factory-Funktion CreationExtras.Key() hinzu, um das Erstellen anonymer CreationExtras.Key-Objekte zu vereinfachen. (I970ee)
  • CreationExtras enthält jetzt kartenähnliche Operatorüberladungen, die eine idiomatische Bearbeitung von Inhalten in Kotlin ermöglichen. Sie ermöglicht die Verwendung von in, += und + mit CreationExtras. (Ib4353)
  • CreationExtras implementiert jetzt die Methoden equals, hashCode und toString. (Ib4353)
  • NewInstanceFactory ist jetzt für JVM-Desktop- und Android-Ziele verfügbar. (d3d0892)
  • Inline-Erweiterungseigenschaft, um die zugrunde liegende Anwendung in Kotlin-Version 2.0 sicher verfügbar zu machen (I39df2)

Fehlerkorrekturen

  • Die manuelle Beschreibung des Zugriffs auf neue Plattform-APIs wurde entfernt, da dies automatisch über die API-Modellierung erfolgt, wenn R8 mit AGP 7.3 oder höher (z.B. R8-Version 3.3) verwendet wird, und für alle Builds, wenn AGP 8.1 oder höher (z.B. D8-Version 8.1) verwendet wird. Clients, 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 gemeinsamen Quellsatz (KMP) verfügbar. (6a3f5b3)
  • lifecycle-runtime-compose: desktop-Artefakte wurden entfernt und -jvmStubs- und -linuxx64Stubs-Artefakte wurden hinzugefügt. Keines dieser Ziele ist für die Verwendung vorgesehen. Sie sind Platzhalter, um die Bemühungen von Jetbrains Compose zu unterstützen. (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 unterstützt jetzt Smart Casts besser, um Fehlalarme zu vermeiden. (85fed6, b/181042665)

Abhängigkeitsupdates

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)

Externe Beiträge

  • Die SavedStateHandle.saveable-Erweiterungsdelegation unterstützt jetzt Nullable-Werte. Vielen Dank an Roman Kalukiewicz für diesen 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 Fälle korrekt, in denen der zurückgegebene Flow sofort abgeschlossen wird, nachdem ein Wert empfangen wurde, der bereits in LiveData festgelegt ist (z. B. bei Verwendung von take(1)). (I9c566)
  • Der Abschluss von Lifecycle*Effect ist jetzt idempotent. Das bedeutet: Wenn onStopOrDispose aufgrund des beendeten Lebenszyklus aufgerufen wurde, wird es bei der Bereinigung nicht ein zweites Mal aufgerufen, es sei denn, der Lebenszyklus wird wieder auf STARTED gesetzt. (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

  • Es wurde ein Problem mit der Abwärtskompatibilität von Lifecycle 2.8 mit Compose 1.6.0 und niedriger bei Verwendung von Code-Shrinking 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 Verwendung von Lifecycle 2.8.X mit Compose 1.6.X oder niedriger behoben – Sie können jetzt Lifecycle 2.8.2 mit jeder Version von Compose ohne Workarounds verwenden. (aosp/3105647, b/336842920)
  • ViewModelProvider stürzt nicht mehr ab, wenn frühere Versionen von compileOnly-Lifecycle-Abhängigkeiten mit Versionen ab 2.8 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 von compose-runtime. Die gemeinsame Abhängigkeit von compose-ui wurde entfernt. Das Android-Artefakt behält aus Kompatibilitätsgründen seine compose-ui bei. (aosp/3079334, b/339562627)
  • Bei der ViewModel-Integration von saveable mit Attributdelegaten wird jetzt der Klassenname als Teil des automatisch generierten Schlüssels verwendet. So werden Konflikte vermieden, wenn mehrere Klassen dieselbe SavedStateHandle 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 Compose UI zu lifecycle-runtime-compose verschoben, damit die Compose-basierten Hilfs-APIs außerhalb von Compose UI verwendet werden können.
  • Das lifecycle-runtime-compose-Artefakt enthält jetzt die APIs dropUnlessResumed und dropUnlessStarted, mit denen Sie Klick- oder andere Ereignisse verwerfen können, die auch dann auftreten, wenn LifecycleOwner unter den angegebenen Lifecycle.State fällt. Dies kann beispielsweise mit Navigation Compose verwendet werden, um die Verarbeitung von Klickereignissen zu vermeiden, nachdem bereits mit dem Übergang zu einem anderen Bildschirm begonnen wurde: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
  • ViewModel.viewModelScope ist jetzt ein überschreibbarer Konstruktorparameter. So können Sie Ihren eigenen Dispatcher und SupervisorJob() einfügen oder den Standardwert mit backgroundScope überschreiben, das in runTest verfügbar ist. (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 jetzt AutoClosable anstelle von Closeable. Es unterstützt jetzt das Hinzufügen von AutoCloseable-Objekten mit einem key, das den Abruf über getCloseable() ermöglicht.

  • Das Aufrufen von LifecycleStartEffect und LifecycleResumeEffect ohne Schlüssel führt jetzt zu einem Fehler. Dies entspricht der Konvention der DisposableEffect API, die von diesen APIs gespiegelt wird.

  • LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) wurde zugunsten von LiveData.toPublisher(lifecycleOwner) verworfen.

  • Die lifecycle-livedata-core-ktx-Kotlin-Erweiterungen wurden in das lifecycle-livedata-core-Modul verschoben.

  • Der NullSafeMutableLiveData wurde überarbeitet, um viele falsch positive Ergebnisse zu vermeiden.

Lifecycle – Kompatibilität mit Kotlin Multiplatform

Die wichtigsten Lifecycle-APIs in Lifecycle, LifecycleOwner, LifecycleObserver, Lifecycle.State, Lifecycle.Event und LifecycleRegistry sind jetzt in Artefakten enthalten, die mit Kotlin Multiplatform kompatibel sind.

Betroffene Artefakte:

  • In lifecycle-common werden die meisten APIs zu common verschoben und neben Android werden auch JVM und iOS unterstützt.
  • In lifecycle-runtime werden die meisten APIs zu common verschoben und neben Android werden auch JVM und iOS unterstützt.
  • lifecycle-runtime-ktx ist jetzt leer, da alle APIs in lifecycle-runtime verschoben wurden.
  • Mit lifecycle-runtime-compose werden alle APIs zu common migriert und ein Android-Artefakt ausgeliefert, das der Multiplattformunterstützung von androidx.compose entspricht.

ViewModel-Kompatibilität mit 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.

Um dieser Änderung Rechnung zu tragen, gibt es für Methoden wie die in ViewModelProvider, die bisher java.lang.Class<T> als Parameter akzeptiert haben, jetzt eine entsprechende Methode, die kotlin.reflect.KClass<T> als Parameter akzeptiert.

Die binäre Kompatibilität auf Android wurde beibehalten, aber es gibt einige bemerkenswerte Änderungen im Vergleich zur gemeinsamen API-Oberfläche:

  • Das Erstellen einer ViewModelProvider-Instanz erfolgt jetzt über die ViewModelProvider.create()-Methoden und nicht mehr durch direkten Aufruf des Konstruktors.
  • ViewModelProvider.NewInstanceFactory und ViewModelProvider.AndroidViewModelFactory sind nur auf Android-Geräten verfügbar.
    • Benutzerdefinierte Factorys sollten von ViewModelProvider.Factory abgeleitet werden und die create-Methode verwenden, die ein CreationExtras akzeptiert, oder die viewModelFactory-Kotlin-DSL.
  • Die Verwendung von ViewModelProvider ohne benutzerdefinierte Factory auf Nicht-JVM-Plattformen führt zu einer UnsupportedOperationException. Auf JVM-Plattformen wird die Kompatibilität beibehalten, indem der ViewModel-Konstruktor ohne Argumente verwendet wird, wenn keine benutzerdefinierte Factory angegeben ist.
  • viewModelScope wird auf Plattformen, auf denen Dispatchers.Main nicht verfügbar ist, auf EmptyCoroutineContext zurückgesetzt (z.B. Linux).

Betroffene Artefakte:

  • In lifecycle-viewmodel werden die meisten APIs zu common verschoben und neben Android werden auch JVM und iOS unterstützt.
  • lifecycle-viewmodel-ktx ist jetzt leer, da alle APIs in lifecycle-viewmodel verschoben wurden.
  • Mit lifecycle-viewmodel-compose werden alle APIs zu common migriert und ein Android-Artefakt ausgeliefert, das der Multiplattformunterstützung von androidx.compose entspricht.

Geändertes Verhalten

  • InitializerViewModelFactory (einschließlich der Builder-Funktion viewModelFactory) löst jetzt eine IllegalArgumentException aus, wenn bereits eine initializer mit demselben clazz: KClass<VM : ViewModel> hinzugefügt wurde. (Ic3a36)

Bekannte Probleme

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-Klassen nicht richtig verpackt wurde. Sie sind jetzt im lifecycle-runtime-AAR enthalten. (aosp/3038274, b/322382422)
  • Es wurde ein unbeabsichtigter Änderungsfehler bei der Reihenfolge behoben, in der AutoCloseable-Instanzen, die an ein ViewModel angehängt sind, gelöscht werden. Die vorherige Reihenfolge addCloseable(String, AutoCloseable), dann addClosable(AutoCloseable), dann onCleared() wurde wiederhergestellt. (aosp/3041632)
  • Das Standardverhalten beim Erstellen von viewModelScope für native und JVM-Desktopumgebungen wurde verbessert. (aosp/3039221)

Externe Beiträge

  • 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 wurde zu common verschoben und es wird ein Android-Artefakt ausgeliefert, das der Multiplatform-Unterstützung für androidx.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 wurde zu common verschoben und es wird ein Android-Artefakt ausgeliefert, das der Multiplatform-Unterstützung von androidx.compose entspricht. Um dieser Änderung Rechnung zu tragen, akzeptiert die zusammensetzbare Methode viewModel jetzt zusätzlich zu einem java.lang.Class auch ein KClass. (b/330323282)

Fehlerkorrekturen

  • Der NullSafeMutableLiveData wurde überarbeitet, um viele falsch positive Ergebnisse zu vermeiden. (I2d8c1, Iafb18, I03463, I7ecef)

Abhängigkeitsupdate

  • Das lifecycle-viewmodel-compose-Artefakt 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 veröffentlicht. Version 2.8.0-alpha03 enthält diese Commits.

Neue Funktionen

  • ViewModel.viewModelScope ist jetzt ein überschreibbarer Konstruktorparameter. So können Sie Ihren eigenen Dispatcher und SupervisorJob() einfügen oder den Standardwert mit backgroundScope überschreiben, das in runTest verfügbar ist. (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 mit 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 in ViewModelProvider, die bisher java.lang.Class<T> als Parameter akzeptiert haben, jetzt eine entsprechende Methode, die kotlin.reflect.KClass<T> als Parameter akzeptiert.

Die binäre Kompatibilität auf Android wurde beibehalten, aber es gibt einige bemerkenswerte Änderungen im Vergleich zur gemeinsamen API-Oberfläche:

  • Das Erstellen einer ViewModelProvider-Instanz erfolgt jetzt über die ViewModelProvider.create()-Methoden und nicht mehr durch direkten Aufruf des Konstruktors.
  • ViewModelProvider.NewInstanceFactory und ViewModelProvider.AndroidViewModelFactory sind nur auf Android-Geräten verfügbar.
    • Benutzerdefinierte Factorys sollten von ViewModelProvider.Factory abgeleitet werden und die create-Methode verwenden, die ein CreationExtras akzeptiert, oder die viewModelFactory-Kotlin-DSL.
  • Die Verwendung von ViewModelProvider ohne benutzerdefinierte Factory auf Nicht-JVM-Plattformen führt zu einer UnsupportedOperationException. Auf JVM-Plattformen wird die Kompatibilität beibehalten, indem der ViewModel-Konstruktor ohne Argumente verwendet wird, wenn keine benutzerdefinierte Factory angegeben ist.
  • viewModelScope wird auf Plattformen, auf denen Dispatchers.Main nicht verfügbar ist, auf EmptyCoroutineContext zurückgesetzt (z.B. Linux).

Geändertes Verhalten

  • InitializerViewModelFactory (einschließlich der Builder-Funktion viewModelFactory) löst jetzt eine IllegalArgumentException aus, wenn bereits eine initializer mit demselben clazz: KClass<VM : ViewModel> hinzugefügt wurde. (Ic3a36)

Fehlerkorrekturen

  • ViewModel.getCloseable verarbeitet jetzt doppelte Schlüssel: Wenn dem key bereits eine AutoCloseable-Ressource zugeordnet ist, wird die alte Ressource ersetzt und sofort geschlossen. (Ibeb67)
  • Der Zugriff auf die viewModelScope eines ViewModel ist jetzt threadsicher. (If4766, b/322407038)

Externe Beiträge

  • LocalLifecycleOwner wurde von Compose UI zu lifecycle-runtime-compose verschoben, damit die Compose-basierten Hilfs-APIs außerhalb von Compose UI 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 und dropUnlessStarted wurden hinzugefügt. Damit können Sie Klick- oder andere Ereignisse verwerfen, die auch dann auftreten, wenn LifecycleOwner unter den angegebenen Lifecycle.State fällt. Dies kann beispielsweise mit Navigation Compose verwendet werden, um Klickereignisse zu vermeiden, nachdem bereits mit dem Übergang zu einem anderen Bildschirm begonnen wurde: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) } (Icba83, b/317230685)

Kotlin-Conversions

  • ViewModel wurde jetzt in Kotlin geschrieben (I16f26, b/214568825)
  • Die lifecycle-viewmodel-ktx-Kotlin-Erweiterungen wurden in das Basis-Lifecycle-Modul verschoben. (Id787b, b/274800183)
  • Die lifecycle-runtime-ktx-Kotlin-Erweiterungen wurden in das Basis-Lifecycle-Modul verschoben. (Ic3686, b/274800183)
  • Die lifecycle-livedata-core-ktx-Kotlin-Erweiterungen wurden in das Basis-Lifecycle-Modul verschoben. (I54a3d, b/274800183)

Kompatibilität mit Kotlin Multiplatform

  • Die wichtigsten Lifecycle-APIs in Lifecycle, LifecycleOwner, LifecycleObserver, Lifecycle.State, Lifecycle.Event und LifecycleRegistry sind jetzt in Artefakten enthalten, die mit Kotlin Multiplatform kompatibel sind. (b/317249252)

API-Änderungen

  • Das Aufrufen von LifecycleStartEffect und LifecycleResumeEffect ohne Schlüssel führt jetzt zu einem Fehler. Dies entspricht der Konvention der DisposableEffect API, die von diesen APIs gespiegelt wird. (Ib0e0c, b/323518079)
  • ViewModel verwendet jetzt AutoCloseable anstelle von Closeable. Das ist eine abwärtskompatible Änderung. (I27f8e, b/214568825)
  • LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) wurde zugunsten von LiveData.toPublisher(lifecycleOwner) verworfen. (Iabe29, b/262623005)

Externe Beiträge

  • Vielen Dank an Ivan Matkov von Jetbrains für seine Unterstützung bei der Umstellung von Lifecycle auf Kotlin Multiplatform. (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 von Closeable-Objekten mit einem key, über das sie mit getCloseable() 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 die Funktion setCurrentState() zum Anhalten, die dafür sorgt, dass die Statusänderung und alle LifecycleObserver-Callbacks abgeschlossen sind, bevor die Funktion zurückgegeben wird. Anders als beim direkten Festlegen des Attributs currentState wird hier nicht runBlocking verwendet. Daher kann es sicher in einer Coroutine wie der von runTest bereitgestellten verwendet werden.
  • Die LiveData-Erweiterungen von map und switchMap spiegeln jetzt das Verhalten von distinctUntilChanged wider: Wenn für die LiveData ein value festgelegt ist, wird die map-/switchMap-Funktion sofort aufgerufen, um das value der zurückgegebenen LiveData zu füllen. So wird der Anfangswert im Rahmen der ersten Komposition festgelegt (bei Verwendung von observeAsState()), das Beobachtungsverhalten ändert sich jedoch nicht. Aktualisierungen von Werten aus der Quelle LiveData werden erst angewendet, wenn Sie mit der Beobachtung von LiveData beginnen.
  • In dieser Version wurde ein Problem behoben, bei dem SavedStateHandle benutzerdefinierte Parcelable-Klassen nach dem Beenden und erneuten Erstellen des Prozesses nicht richtig wiederhergestellt hat. Da Typinformationen durch das Android-Framework verloren gehen, erfordern Arrays benutzerdefinierter Parcelables zusätzlichen Aufwand (manuelles Erstellen eines typisierten Arrays des richtigen Typs). In der Dokumentation zu get, getLiveData und getStateFlow wird diese Einschränkung jetzt ausdrücklich erwähnt.
  • Die mit LifecycleObserver verknüpften ProGuard-Keep-Regeln wurden entfernt. Das bedeutet, dass für ProGuard-Code, der APIs über Reflection verwenden möchte (z. B. mit der längst veralteten Annotation @OnLifecycleEvent), eigene Keep-Regeln für den jeweiligen Anwendungsfall erforderlich sind.

Beobachtbarkeit von Lebenszyklusereignissen

  • Alternativ zur Verwendung eines LifecycleEventObserver können Sie jetzt ein Flow von Lifecycle.Event über die Erweiterungsmethode Lifecycle.asFlow() beobachten.
  • Jetpack Compose-Nutzer können jetzt LifecycleEventEffect verwenden, um Compose-Nebeneffekte basierend auf Lifecycle.Event auszuführen.
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
    viewModel.refreshData()
  }
  // …
}
  • Jetpack Compose-Nutzer können LifecycleStartEffect und LifecycleResumeEffect verwenden, um Ereignispaare zu verarbeiten, z. B. „gestartet“ bis „beendet“ und „fortgesetzt“ bis „pausiert“. Diese API entspricht der in DisposableEffect und eignet sich für Fälle, in denen die Änderung, die beim Hochfahren des Status vorgenommen wird, beim Herunterfahren 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

  • Der aktuelle Lifecycle.State kann jetzt über das Attribut Lifecycle.currentStateFlow beobachtet werden, das ein StateFlow zurückgibt, wobei value der aktuelle Lifecycle.State ist.
  • Jetpack Compose-Nutzer können die Lifecycle.currentStateAsState()-Erweiterung verwenden, um Lifecycle.State direkt als Compose-State verfügbar zu machen. Dies entspricht lifecycle.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 veröffentlicht. Version 2.7.0-rc02 enthält diese Commits.

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem SavedStateHandle benutzerdefinierte Parcelable-Klassen nach dem Beenden und erneuten Erstellen des Prozesses nicht richtig wiederhergestellt hat. Da Typinformationen durch das Android-Framework verloren gehen, erfordern Arrays benutzerdefinierter Parcelables zusätzlichen Aufwand (manuelles Erstellen eines typisierten Arrays des richtigen Typs). In der Dokumentation zu get, getLiveData und getStateFlow 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 und LifecycleResumeEffect verwerfen und erstellen den Effektblock jetzt korrekt neu, wenn sich LifecycleOwner ä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 gab 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 die Lifecycle.State von TestLifecycleOwner mithilfe des Felds currentState innerhalb einer Coroutine festgelegt wird. Der Lint-Check schlägt jetzt das Aussetzen von setCurrentState vor, wodurch Lifecycle.State ohne Blockierung festgelegt werden kann. (Icf728, b/297880630)

Fehlerkorrekturen

  • Es wurde ein Problem mit LiveData.switchMap behoben, bei dem die LiveData-Instanz nicht als Quelle hinzugefügt wurde, wenn bei der ersten und einer nachfolgenden Anfrage dieselbe LiveData-Instanz zurückgegeben 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 Funktion zum Anhalten setCurrentState(), damit Nutzer TestLifecycleOwner in einer Coroutine wie einer von runTest bereitgestellten Coroutine verwenden können. (I329de, b/259344129)

API-Änderungen

  • Alle Dateien aus den lifecycle-livedata-ktx-Modulen wurden in das Hauptmodul lifecycle-livedata verschoben. (I10c6f, b/274800183)

Geändertes Verhalten

  • Die Erweiterungen LiveData.map() und LiveData.switchMap() legen jetzt die value der zurückgegebenen LiveData fest, wenn für die vorherige LiveData ein Wert festgelegt wurde. So wird sichergestellt, dass die Verwendung der resultierenden LiveData in Jetpack Compose den richtigen Status bei der ersten Komposition hat. (I91d2b, b/269479952)
  • Die ViewModel addCloseable() schließt die Closeable jetzt sofort, wenn die ViewModel bereits einen Aufruf an onCleared() erhalten hat. (I4712e, b/280294730)

Fehlerkorrekturen

  • Lifecycle 2.6.2: 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 übergeordneten SavedStateRegistry zu speichern, und der Status dann noch einmal wiederhergestellt wurde. Dadurch wird die Interaktion zwischen rememberSaveable und NavHost 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 über Lifecycle.currentStateFlow in Compose beobachtbar. Lifecycle.currentStateFlow gibt ein StateFlow zurück, wobei value das aktuelle Lifecycle.State ist. (Ib212d, b/209684871)
  • Lifecycle.Event können jetzt als Flow mit Lifecycle.asFlow(). beobachtet werden (If2c0f, b/176311030).
  • Die LifecycleResumeEffect API wurde hinzugefügt, um Compose-SideEffects basierend auf Lifecycle.Event.ON_RESUME- und Lifecycle.Event.ON_PAUSE-Ereignis-Callbacks auszuführen. (I60386, b/235529345)
  • Die LifecycleStartEffect API wurde hinzugefügt, um Compose-SideEffects basierend auf Lifecycle.Event.ON_START- und Lifecycle.Event.ON_STOP-Ereignis-Callbacks auszuführen. (I5a8d1, b/235529345)
  • Die LifecycleEventEffect API wurde hinzugefügt, um Compose-SideEffects basierend auf Lifecycle.Event auszuführen. (Ic9794, b/235529345)
  • Die Lifecycle.collectAsState()-Erweiterung wurde hinzugefügt, um Lifecycle.State direkt als Compose State verfügbar zu machen. Dies entspricht lifecycle.currentStateFlow.collectAsState() und ist eine kürzere Alternative. (I11015, b/235529345)

Fehlerkorrekturen

  • Die LiveData.distinctUntilChanged()-Erweiterung legt jetzt den value des zurückgegebenen LiveData fest, wenn für den vorherigen LiveData ein Wert festgelegt wurde. Das ändert nichts am Beobachtungsverhalten. Aktualisierte Werte aus der Quelle LiveData werden erst angewendet, wenn Sie die von distinctUntilChanged() zurückgegebene LiveData beobachten. (Ib482f)
  • Die mit LifecycleObserver verknüpften ProGuard-Keep-Regeln wurden entfernt. Das bedeutet, dass für ProGuard-Code, der APIs über Reflection verwenden möchte, eigene Keep-Regeln für den jeweiligen Anwendungsfall erforderlich sind. (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 Beenden des Prozesses nicht korrekt wiederhergestellt wurde, wenn der Status wiederhergestellt wurde, save() aufgerufen wurde, ohne den Status tatsächlich im übergeordneten SavedStateRegistry zu speichern, und der Status dann noch einmal wiederhergestellt wurde. Dadurch wird die Interaktion zwischen rememberSaveable und NavHost 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

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 die neue Eigenschaft isInitialized, die angibt, ob jemals ein expliziter Wert für LiveData festgelegt wurde. So können Sie unterscheiden, ob liveData.value null zurückgibt, weil noch nie ein Wert festgelegt wurde, oder ob ein expliziter null-Wert zurückgegeben wird.
  • MediatorLiveData enthält jetzt einen Konstruktor zum Festlegen eines Anfangswerts.
  • Eine neue Erweiterung für StateFlow und Flow von collectAsStateWithLifecycle() wurde hinzugefügt, die Daten aus Abläufen erfasst und den aktuellen Wert als Compose-Status auf lebenszyklusbewusste Weise darstellt.
  • Die Methoden Lifecycle.launchWhenX und Lifecycle.whenX wurden eingestellt, da die Verwendung eines pausierenden Dispatchers in einigen Fällen zu verschwendeten Ressourcen führen kann. Es wird empfohlen, Lifecycle.repeatOnLifecycle zu verwenden. Weitere Informationen zum einmaligen Anhalten von Arbeitsvorgängen finden Sie in dieser Erklärung, in der erläutert wird, warum dies von Natur aus unsicher ist.
  • Kotlin-Konvertierung: Eine große Anzahl von Lifecycle-Klassen wurde in Kotlin konvertiert. Alle konvertierten Klassen behalten ihre binäre Kompatibilität mit früheren Versionen bei. Die folgenden Klassen haben quellinkompatible Änderungen für in Kotlin geschriebene Klassen: 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 Lifecycle 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 Nullable-Eigenschaft der Methode onChanged eines in Kotlin erstellten Observer entspricht jetzt der Nullable-Eigenschaft des generischen Typs. Wenn Observer.onChanged() einen Nullable-Typ akzeptieren soll, müssen Sie Observer mit einem Nullable-Typ instanziieren.
  • Diese Klassen wurden ebenfalls in Kotlin konvertiert, sind aber weiterhin quellcodekompatibel: DefaultLifecycleObserver, LifecycleEventObserver, Lifecycle, LifecycleRegistry, LifecycleObserver, ViewModelStore, AndroidViewModel, AbstractSavedStateViewModelFactory, LifecycleService, ServiceLifecycleDispatcher und ProcessLifecycleOwner.

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 legt jetzt den value des zurückgegebenen LiveData fest, wenn für den vorherigen LiveData ein Wert festgelegt wurde. Das ändert nichts am Beobachtungsverhalten. Aktualisierte Werte aus der Quelle LiveData werden erst angewendet, wenn Sie die von distinctUntilChanged() zurückgegebene LiveData beobachten. (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 wurde in Kotlin neu geschrieben. Dies ist eine quelleninkompatible Änderung für in Kotlin geschriebene Klassen. Sie müssen jetzt die lifecycle-Property überschreiben, anstatt die vorherige getLifecycle()-Funktion zu implementieren. (I75b4b, b/240298691)
  • ViewModelStoreOwner ist jetzt in Kotlin. Dies ist eine quelleninkompatible Änderung für in Kotlin geschriebene Klassen. Sie müssen jetzt die viewModelStore-Property überschreiben, anstatt die vorherige getViewModelStore()-Funktion zu implementieren. (I86409, b/240298691)
  • Die Kotlin-Erweiterung für LifecycleOwner, die das Feld lifecycleScope bereitstellt, wurde vom Artefakt lifecycle-runtime-ktx zum Artefakt lifecycle-common verschoben. (I41d78, b/240298691)
  • Die Kotlin-Erweiterung für Lifecycle, die das Feld coroutineScope bereitstellt, wurde vom Artefakt lifecycle-runtime-ktx zum Artefakt lifecycle-common 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 wurde in Kotlin neu geschrieben. Dies ist eine quellinkompatible Änderung für Klassen, die in Kotlin geschrieben wurden und in denen Syntax wie Transformations.map direkt verwendet wurde. Kotlin-Code muss jetzt die Kotlin-Erweiterungsmethodensyntax verwenden, die zuvor nur bei Verwendung von lifecycle-livedata-ktx verfügbar war. Wenn Sie die Programmiersprache Java verwenden, sind die Versionen dieser Methoden, die eine androidx.arch.core.util.Function-Methode verwenden, eingestellt und werden durch die Versionen ersetzt, die eine Kotlin-Function1 verwenden. Diese Änderung beeinträchtigt die binäre Kompatibilität nicht. (I8e14f)
  • ViewTreeViewModelStoreOwner wurde in Kotlin neu geschrieben. Dies ist eine quelleninkompatible Änderung für Klassen, die in Kotlin geschrieben wurden. Sie müssen jetzt die Kotlin-Erweiterungsmethoden für View von androidx.lifecycle.setViewTreeViewModelStoreOwner und androidx.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 wurden, quellkompatibel. (Ia06d8, Ib22d8, b/240298691)
  • Die Schnittstelle HasDefaultViewModelProviderFactory ist jetzt in Kotlin geschrieben. Dies ist eine quelleninkompatible Änderung für in Kotlin geschriebene Klassen. Sie müssen jetzt die Attribute defaultViewModelProviderFactory und defaultViewModelCreationExtras überschreiben, anstatt die entsprechenden Funktionen zu implementieren. (Iaed9c, b/240298691)
  • Observer wurde in Kotlin neu geschrieben. Die Methode onChanged() verwendet jetzt den Namen value für ihren Parameter. (Iffef2, I4995e, b/240298691)
  • AndroidViewModel, AbstractSavedStateViewModelFactory, LifecycleService, ServiceLifecycleDispatcher und ProcessLifecycleOwner 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 die neue Eigenschaft isInitialized, die angibt, ob jemals ein expliziter Wert für LiveData festgelegt wurde. So können Sie unterscheiden, ob liveData.value null zurückgibt, weil noch nie ein Wert festgelegt wurde, oder ob ein expliziter null-Wert zurückgegeben wird. (Ibd018)

API-Änderungen

  • Die collectAsStateWithLifecycle()-APIs von lifecycle-runtime-compose haben nicht mehr den Status „Experimentell“. (I09d42, b/258835424)
  • Die Methoden Lifecycle.launchWhenX und Lifecycle.whenX wurden eingestellt, da die Verwendung eines pausierenden Dispatchers in einigen Fällen zu verschwendeten Ressourcen führen kann. Es wird empfohlen, Lifecycle.repeatOnLifecycle zu verwenden. (Iafc54, b/248302832)

Kotlin-Conversions

  • ViewTreeLifecycleOwner wurde in Kotlin neu geschrieben. Dies ist eine quelleninkompatible Änderung für Klassen, die in Kotlin geschrieben wurden. Sie müssen jetzt die Kotlin-Erweiterungsmethoden für View von androidx.lifecycle.setViewTreeLifecycleOwner und androidx.lifecycle.findViewTreeLifecycleOwner direkt importieren und verwenden, um einen zuvor festgelegten Inhaber festzulegen und zu finden. Dadurch wird die vorherige Kotlin-Erweiterung in lifecycle-runtime-ktx ersetzt. Dies ist binärkompatibel und bleibt für Implementierungen, die in der Programmiersprache Java geschrieben wurden, quellkompatibel. (I8a77a, I5234e, b/240298691)
  • LiveDataReactiveStreams wurde in Kotlin neu geschrieben. Die Kotlin-Erweiterungen, die sich zuvor in lifecycle-reactivestreams-ktx befanden, wurden in das lifecycle-reactivestreams-Modul verschoben und sind nun die primäre Oberfläche für in Kotlin geschriebenen Code. Dies ist eine quellinkompatible Ä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 und ViewModelStore sind jetzt in Kotlin geschrieben (Iadffd, I60034, I8c52c, I9593d, I01fe1, I59a23, b/240298691).

Fehlerkorrekturen

  • SavedStateHandle stürzt nicht mehr mit einem ClassCastException ab, wenn get() 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, bei dem Einschränkungen zwischen verschiedenen Lifecycle-Modulen nicht wie vorgesehen funktionierten. (I18d0d, b/249686765)
  • Fehler, die von LifecycleRegistry.moveToState() ausgelöst werden, enthalten jetzt eine hilfreichere Fehlermeldung, die Entwickler über die Komponente informiert, die den Fehler verursacht hat. (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 Lifecycle-Artefakte dieselbe Version verwenden. Andere Abhängigkeiten werden automatisch aktualisiert, wenn eine aktualisiert wird. b/242871265
  • FlowLiveData.asFlow() erstellt jetzt ein callbackFlow, anstatt die eigene Channel-Implementierung zu verwenden, um Thread-Sicherheit und Kontextbeibehaltung zu gewährleisten. (I4a8b2, b/200596935)
  • Die asLiveData-Funktion von FlowLiveData behält jetzt den ursprünglichen Wert eines StateFlow bei, wenn das neue LiveData-Objekt erstellt wird. (I3f530, b/157380488)
  • Lifecycle 2.5.1: Bei benutzerdefinierten Implementierungen von AndroidViewModelFactory wird jetzt die Funktion create(modelClass) korrekt aufgerufen, wenn der zustandsbehaftete Konstruktor mit Lifecycle 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 und Flow von collectAsStateWithLifecycle hinzugefügt, die Daten aus Abläufen erfasst und den aktuellen Wert als Compose-Status auf lebenszyklusbewusste Weise darstellt. Der Flow wird erfasst und die neue Emission wird auf den Wert des Status festgelegt, wenn der Lebenszyklus mindestens in einem bestimmten Lifecycle.State ist. Wenn der Lebenszyklus unter diesen Lifecycle.State fällt, wird die Erfassung von Flows 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 jetzt die Funktion create(modelClass) korrekt aufgerufen, wenn der zustandsbehaftete Konstruktor AndroidViewModelFactory mit Lifecycle 2.4+ 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 eine getStateFlow() API, die eine Kotlin-StateFlow für die Überwachung von Wertänderungen zurückgibt. Das ist eine Alternative zur Verwendung von LiveData.

  • ViewModel CreationExtras: Wenn Sie eine benutzerdefinierte ViewModelProvider.Factory schreiben, müssen Sie nicht mehr AndroidViewModelFactory oder AbstractSavedStateViewModelFactory erweitern, um Zugriff auf eine Application bzw. SavedStateHandle zu erhalten. Stattdessen werden diese Felder jeder ViewModelProvider.Factory-Unterklasse als CreationExtras über die neue Überladung von create bereitgestellt: create(Class<T>, CreationExtras). Diese Extras werden automatisch von Ihrer Aktivität oder Ihrem Fragment bereitgestellt, wenn Sie Activity 1.5.0 bzw. Fragment 1.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 eine viewModelFactory Kotlin-DSL, mit der Sie Ihre ViewModelProvider.Factory in Form von einem oder mehreren Lambda-Initialisierern definieren können. Dabei wird für jede ViewModel-Klasse, die von Ihrer benutzerdefinierten Factory unterstützt wird, ein Lambda-Initialisierer verwendet und CreationExtras als primäre Datenquelle genutzt.

    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 eine viewModel() API, die eine Lambda-Factory zum Erstellen einer ViewModel-Instanz verwendet, ohne dass eine benutzerdefinierte ViewModelProvider.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)
    }
    
  • SavedStateHandle Compose Saver Integration: Das lifecycle-viewmodel-compose-Artefakt enthält jetzt neue experimentelle APIs in SavedStateHandle.saveable, die rememberSaveable-ähnliches Verhalten ermöglichen, das durch SavedStateHandle eines `ViewModel` 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 der Sie der ViewModel ein oder mehrere Closeable-Objekte hinzufügen können, die geschlossen werden, wenn die ViewModel gelöscht wird. Dazu ist keine manuelle Arbeit in onCleared() erforderlich.

    Wenn Sie beispielsweise einen Coroutine-Scope erstellen möchten, den Sie in ein ViewModel einfügen, aber über Tests steuern können, erstellen Sie eine CoroutineScope, die Closeable implementiert:

    class CloseableCoroutineScope(
        context: CoroutineContext = SupervisorJob() + Dispatchers.Main.immediate
    ) : Closeable, CoroutineScope {
        override val coroutineContext: CoroutineContext = context
        override fun close() {
            coroutineContext.cancel()
       }
    }
    

    Dieser kann dann im Konstruktor von ViewModel verwendet werden, wobei die Lebensdauer von viewModelScope 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 von INITIALIZED nach DESTROYED zu verschieben, wird jetzt immer eine IllegalStateException ausgelöst, unabhängig davon, ob der Lifecycle ein angehängtes Observer-Objekt hat.
  • LifecycleRegistry löscht jetzt die Beobachter, wenn der Status DESTROYED 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-Lifecycle-Abhängigkeiten mit Versionen ab 2.5 gemischt 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() löst jetzt eine NullPointerException aus, wenn eine null-Quelle übergeben wird, anstatt die null-Quelle an Beobachter weiterzugeben.(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

  • SavedStateHandle.saveable-Property-Delegates hinzugefügt, um Property-Namen als Schlüssel zum Speichern des Status in SavedStateHandle zu verwenden (I8bb86, b/225014345)

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem das Einbetten eines NavHost in ein anderes NavHost auf einem nicht primären Tab der unteren Navigation zu einem IllegalStateException führte, wenn mehrere Backstacks verwendet wurden. (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

  • Experimentelle MutableState-Überladung zu SavedStateHandle.saveable hinzufügen, um Parität mit rememberSaveable zu erreichen (I38cfe, b/224565154)

API-Änderungen

  • CreationExtras ist jetzt abstrakt statt versiegelt. (Ib8a7a)

Fehlerkorrekturen

  • Ein IllegalStateException: Already attached to lifecycleOwner-Fehler, der durch SavedStateHandleController 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 Modul lifecycle-viewmodel-compose bietet jetzt SavedStateHandleSaver, eine experimentelle API, die dafür sorgt, dass Werte in einem SavedStateHandle korrekt in denselben gespeicherten Instanzstatus integriert werden, den rememberSaveable 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 von CreationExtras, auch wenn es mit einem SavedStateRegistryOwner 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 eine getStateFlow() API, die eine Kotlin-StateFlow für die Überwachung von Wertänderungen als Alternative zur Verwendung von LiveData zurückgibt. (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 der ViewModel ein oder mehrere Closeable-Objekte hinzufügen können, die geschlossen werden, wenn die ViewModel gelöscht wird. Dazu ist kein manueller Aufwand in onCleared() erforderlich. (I55ea0)
  • lifecycle-viewmodel bietet jetzt eine InitializerViewModelFactory, mit der Sie Lambda zum Verarbeiten bestimmter ViewModel-Klassen hinzufügen können. Dabei wird CreationExtras als primäre Datenquelle verwendet. (If58fc, b/216687549)
  • lifecycle-viewmodel-compose bietet jetzt eine viewModel() API, die eine Lambda-Factory zum Erstellen einer ViewModel-Instanz verwendet, ohne dass eine benutzerdefinierte ViewModelProvider.Factory erstellt werden muss. (I97fbb, b/216688927)

API-Änderungen

  • Sie können jetzt ein ViewModel mit CreationExtras über lifecycle-viewmodel-compose erstellen. (I08887, b/216688927)

Geändertes Verhalten

  • Wenn Sie versuchen, die Lifecycle.State von INITIALIZED nach DESTROYED zu verschieben, wird jetzt immer eine IllegalStateException ausgelöst, unabhängig davon, ob der Lifecycle ein angehängtes Observer-Objekt hat. (I7c390, b/177924329)
  • LifecycleRegistry löscht jetzt die Beobachter, wenn der Status DESTROYED 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 und SavedStateViewModelFactory wurden in Kotlin konvertiert. Dadurch wurde die Nullable-Eigenschaft der Generics in beiden Klassen verbessert. (Ib6ce2, b/216168263, I9647a, b/177667711)
  • Der Funktionsparameter LiveData switchMap kann jetzt eine Nullable-Ausgabe haben. (I40396, b/132923666)
  • Die LiveData-ktx-Erweiterungen sind jetzt mit @CheckResult annotiert, um zu erzwingen, dass das Ergebnis beim Aufrufen dieser Funktionen verwendet wird. (Ia0f05, b/207325134)

Geändertes Verhalten

  • In SavedStateHandle wird jetzt der defaultValue richtig gespeichert, wenn kein Wert für den angegebenen Schlüssel vorhanden ist. (I1c6ce, b/178510877)

Fehlerkorrekturen

  • Aus Lifecycle 2.4.1: lifecycle-process wurde aktualisiert, um von Startup 1.1.1 abhängig zu sein. So wird sichergestellt, dass Korrekturen, die verhindern, dass ProcessLifecycleInitializer eine StartupException 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, eine ViewModel zu erstellen. (I340f7, b/177667711)
  • Sie können jetzt ein Ansichtsmodell über CreationExtras mit AndroidViewModelFactory 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 schaffen wir die Grundlage für eine Umstrukturierung der Erstellung von ViewModel. Anstelle einer starren Reihe von Unterklassen von ViewModelProvider.Factory, die jeweils zusätzliche Funktionen hinzufügen (z. B. einen Application-Konstruktorparameter über AndroidViewModelFactory, einen SavedStateHandle-Konstruktorparameter über SavedStateViewModelFactory und AbstractSavedStateViewModelFactory usw.), setzen wir jetzt auf zustandslose Factorys, die auf einem neuen Konzept basieren: CreationExtras. (Ia7343, b/188691010, b/188541057)

Durch diese Änderung werden in ViewModelProvider keine direkten Aufrufe mehr an die vorherige create(Class<T>)-Methode von ViewModelProvider.Factory gesendet. Stattdessen wird ein neuer Overload von create aufgerufen: create(Class<T>, CreationExtras). Das bedeutet, dass jede direkte Implementierung der ViewModelProvider.Factory-Instanz jetzt Zugriff auf die einzelnen neuen CreationExtras hat:

  • ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY: Dieser String bietet Zugriff auf den benutzerdefinierten Schlüssel, den Sie an ViewModelProvider.get() übergeben haben.
  • ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY bietet Zugriff auf die Klasse Application.
  • SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY bietet Zugriff auf die SavedStateRegistryOwner, die zum Erstellen dieses ViewModels verwendet wird.
  • SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY bietet Zugriff auf die ViewModelStoreOwner, die zum Erstellen dieses ViewModels verwendet wird.
  • SavedStateHandleSupport.DEFAULT_ARGS_KEY bietet Zugriff auf die Bundle von Argumenten, die zum Erstellen eines SavedStateHandle verwendet werden sollen.

Diese Extras werden standardmäßig bereitgestellt, wenn Sie Activity 1.5.0-alpha01, Fragment 1.5.0-alpha01 und Navigation 2.5.0-alpha01 verwenden. Wenn Sie eine frühere Version dieser Bibliotheken verwenden, ist CreationExtras leer. Alle vorhandenen Unterklassen von ViewModelProvider.Factory wurden neu geschrieben, um sowohl den alten Erstellungspfad, der von früheren Versionen dieser Bibliotheken verwendet wurde, als auch den CreationExtras-Pfad zu unterstützen, der künftig verwendet wird.

Mit diesen CreationExtras können Sie ein ViewModelProvider.Factory erstellen, das nur die Informationen an die einzelnen ViewModel weitergibt, die Sie benötigen. Dabei ist keine strenge Hierarchie von Factory-Unterklassen erforderlich:

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 ein SavedStateHandle nur für das eine ViewModel zu erstellen, das es benötigt. (Ia6654, b/188541057)

Benutzerdefinierte CreationExtras können bereitgestellt werden, indem Sie getDefaultViewModelCreationExtras() in Ihrem ComponentActivity oder Fragment überschreiben. Dadurch sind sie für Ihr benutzerdefiniertes ViewModelProvider.Factory als integrierte Form der unterstützten Einfügung verfügbar. Diese Extras werden automatisch für Ihre benutzerdefinierte Factory verfügbar gemacht, wenn sie direkt mit ViewModelProvider verwendet werden oder wenn die Kotlin-Eigenschaftserweiterungen by viewModels() und by activityViewModels() verwendet werden. (I79f2b, b/207012584, b/207012585, b/207012490)

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem der Standardwert, der für ein SavedStateHandle angegeben wurde, nach dem Beenden und erneuten Erstellen des Prozesses wieder angezeigt wurde, auch wenn er speziell aus dem SavedStateHandle entfernt wurde. Daher werden in SavedStateHandle keine Standardwerte und wiederhergestellten Werte mehr zusammengeführt. Stattdessen werden nur die wiederhergestellten Werte als Quelle der Wahrheit 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

  • Zurückportiert von Lifecycle 2.5.0-alpha01: Es wurde ein Problem behoben, bei dem der für ein SavedStateHandle angegebene Standardwert nach dem Beenden und erneuten Erstellen des Prozesses wieder angezeigt wurde, auch wenn er speziell aus dem SavedStateHandle entfernt wurde. Daher werden in SavedStateHandle keine Standardwerte und wiederhergestellten Werte mehr zusammengeführt. Stattdessen werden nur die wiederhergestellten Werte als Quelle der Wahrheit verwendet. (I53a4b)
  • lifecycle-process hängt jetzt von Androidx Startup 1.1.1 ab. Damit wurde ein Regressionsfehler behoben, bei dem die Verwendung von ProcessLifecycleInitializer zu einem StartupException 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. Verwenden Sie stattdessen LifecycleEventObserver oder DefaultLifecycleObserver.
  • Die androidx.lifecycle:lifecycle-viewmodel-compose-Mediathek wurde hinzugefügt. Es bietet viewModel()-Composable und LocalViewModelStoreOwner.
    • Quellcode-gefährdende Änderung: ViewModelProvider wurde in Kotlin neu geschrieben. Die Methode ViewModelProvider.Factory.create lässt keine Nullable-Generics mehr zu.
  • androidx.lifecycle:lifecycle-runtime-ktx wurden neue Coroutines-APIs hinzugefügt:
  • Lifecycle.repeatOnLifecycle, API, die einen Codeblock in einer Coroutine ausführt, wenn sich der Lebenszyklus mindestens in einem bestimmten Status befindet. Der Block wird abgebrochen und neu gestartet, wenn der Lebenszyklus in den Zielstatus wechselt und wieder daraus heraus.
  • Flow.flowWithLifecycle: API, die Werte aus dem Upstream-Flow ausgibt, wenn sich der Lebenszyklus mindestens in einem bestimmten Status befindet.
  • DefaultLifecycleObserver wurde von lifecycle.lifecycle-common-java8 nach lifecycle.lifecycle-common verschoben. lifecycle.lifecycle-common-java8bietet keine zusätzlichen Funktionen mehr, die über lifecycle.lifecycle-common hinausgehen. Die Abhängigkeit davon kann also durch lifecycle.lifecycle-common ersetzt werden.
  • Nicht-Coroutine-APIs aus lifecycle-viewmodel-ktx wurden in das Modul lifecycle-viewmodel verschoben.
  • lifecycle-process verwendet jetzt androidx.startup, um die ProcessLifecycleOwner zu initialisieren.

    Bisher wurde dies von androidx.lifecycle.ProcessLifecycleOwnerInitializer erledigt.

    Wenn Sie tools:node="remove" in der Vergangenheit zum Initialisieren des Prozesslebenszyklus verwendet haben, müssen Sie stattdessen Folgendes tun.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. Verwenden Sie stattdessen LifecycleEventObserver oder DefaultLifecycleObserver. (I5a8fa)
  • DefaultLifecycleObserver wurde von androidx.lifecycle.lifecycle-common-java8 nach androidx.lifecycle.lifecycle-common verschoben. androidx.lifecycle.lifecycle-common-java8 bietet keine zusätzlichen Funktionen mehr, die über androidx.lifecycle.lifecycle-common hinausgehen. Die Abhängigkeit davon kann also durch androidx.lifecycle.lifecycle-common ersetzt werden. (I021aa)
  • Nicht-Coroutine-APIs aus lifecycle-viewmodel-ktx wurden in das Modul lifecycle-viewmodel verschoben. (I6d5b2)

Externe Beiträge

  • Vielen Dank an dmitrilc für die Korrektur eines Tippfehlers in der Dokumentation zu ViewModel. (#221)

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

  • Quellcode-Breaking Change: ViewModelProvider wurde in Kotlin neu geschrieben. Die Methode ViewModelProvider.Factory.create lässt keine generischen Nullable-Typen mehr zu. (I9b9f6)

Geändertes Verhalten

  • Der Lifecycle.repeatOnLifecycle: block-Callback wird jetzt immer seriell aufgerufen, wenn die Ausführung wiederholt wird. (Ibab33)

Externe Beiträge

  • 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

  • Der Lint-Prüfung lifecycle-runtime-ktx wurde eine neue RepeatOnLifecycleWrongUsage-Prüfung hinzugefügt, die erkennt, wenn repeateOnLifecycle fälschlicherweise in onStart() oder onResume() verwendet wird. (706078, b/187887400)

API-Änderungen

  • Die LifecycleOwner.addRepeatingJob API wurde zugunsten von Lifecycle.repeatOnLifecycle entfernt, da diese API strukturierte Nebenläufigkeit unterstützt und einfacher zu verstehen ist. (I4a3a8)
  • Machen Sie ProcessLifecycleInitializer öffentlich, damit andere androidx.startup.Initializers sie als Abhängigkeiten verwenden können. (I94c31)

Fehlerkorrekturen

  • Ein Problem mit dem Lint-Check NullSafeMutableLiveData wurde behoben, wenn das Feld Modifizierer hat. (#147, b/183696616)
  • Ein weiteres Problem mit dem NullSafeMutableLiveData-Lint-Check bei der Verwendung von Generics wurde behoben. (#161, b/184830263)

Externe Beiträge

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.

Geändertes Verhalten

  • lifecycle-process verwendet jetzt androidx.startup, um die ProcessLifecycleOwner zu initialisieren.

    Bisher wurde dies von androidx.lifecycle.ProcessLifecycleOwnerInitializer erledigt.

    Wenn Sie tools:node="remove" in der Vergangenheit zum Initialisieren des Prozesslebenszyklus verwendet haben, müssen Sie stattdessen Folgendes tun.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

  • Die Flow.flowWithLifecycle API wurde hinzugefügt, die Werte aus dem Upstream-Flow ausgibt, wenn sich der Lebenszyklus mit der Lifecycle.repeatOnLifecycle API mindestens in einem bestimmten Zustand befindet. Dies ist eine Alternative zur ebenfalls neuen LifecycleOwner.addRepeatinJob API. (I0f4cd)

Fehlerkorrekturen

  • Ab Lifecycle 2.3.1: Die Lint-Regel NonNullableMutableLiveData kann jetzt ordnungsgemäß zwischen Feldvariablen mit unterschiedlicher Nullable-Eigenschaft unterscheiden. (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.

Breaking API Changes

  • viewModel() akzeptiert jetzt ein optionales ViewModelStoreOwner, was die Zusammenarbeit mit anderen Inhabern als dem LocalViewModelStoreOwner erleichtert. Sie können jetzt beispielsweise viewModel(navBackStackEntry) verwenden, um ein ViewModel abzurufen, das einem bestimmten Navigationsdiagramm zugeordnet 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

  • In dieser Version können androidx.hilt:hilt-navigation-compose und androidx.navigation:navigation-compose Abhängigkeiten auf androidx.compose.compiler:compiler:1.0.0-beta04 und androidx.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 nullable ViewModelStoreOwner zurück, um besser zu bestimmen, ob eine ViewModelStoreOwner in der aktuellen Komposition verfügbar ist. APIs, für die ein ViewModelStoreOwner erforderlich ist, z. B. viewModel() und NavHost, lösen weiterhin eine Ausnahme aus, wenn kein ViewModelStoreOwner 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 jetzt provides-Funktionen, die mit CompositionLocalProvider verwendet werden können und die asProvidableCompositionLocal() 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

  • Die zusammensetzbare Funktion viewModel() und LocalViewModelStoreOwner wurden von androidx.compose.ui.viewinterop in dieses Artefakt im androidx.lifecycle.viewmodel.compose-Paket verschoben. (I7a374)

Version 2.3.1

Lifecycle-Version 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 Lint-Regel NonNullableMutableLiveData kann jetzt korrekt zwischen Feldvariablen mit unterschiedlicher Nullable-Eigenschaft 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 serialisierbare Klassen: SavedStateHandle unterstützt jetzt die Lazy-Serialisierung. Sie können setSavedStateProvider() für einen bestimmten Schlüssel aufrufen und so ein SavedStateProvider bereitstellen, das einen Callback zu saveState() erhält, wenn SavedStateHandle aufgefordert wird, seinen Status zu speichern. Weitere Informationen finden Sie unter Nicht serialisierbare Klassen speichern.
  • Durchsetzung des Lebenszyklusverhaltens:
    • LifecycleRegistry erzwingt jetzt DESTROYED als Endstatus.
    • LifecycleRegistry prüft jetzt, ob seine Methoden im Hauptthread aufgerufen werden. Das war schon immer eine Anforderung für Lebenszyklen von Aktivitäten, Fragmenten usw. Das Hinzufügen von Beobachtern aus Nicht-Main-Threads führte zu schwer zu erfassenden Abstürzen zur Laufzeit. Bei LifecycleRegistry-Objekten, die zu Ihren eigenen Komponenten gehören, können Sie die Prüfungen explizit deaktivieren, indem Sie LifecycleRegistry.createUnsafe(...) verwenden. Sie müssen dann jedoch dafür sorgen, dass eine ordnungsgemäße Synchronisierung erfolgt, wenn auf dieses LifecycleRegistry über verschiedene Threads zugegriffen wird.
  • Helfer für Lebenszyklusstatus und Ereignisse: Der Klasse Lifecycle.Event wurden statische Hilfsmethoden für downFrom(State), downTo(State), upFrom(State) und upTo(State) hinzugefügt, um die Event anhand einer State und der Übergangsrichtung zu generieren. Die Methode getTargetState() wurde hinzugefügt, die den State bereitstellt, zu dem der Lebenszyklus direkt nach dem Event übergeht.
  • withStateAtLeast: Es wurden Lifecycle.withStateAtLeast-APIs hinzugefügt, die auf einen Lebenszyklusstatus warten und einen nicht unterbrechenden Codeblock synchron zum Zeitpunkt der Statusänderung ausführen und dann mit dem Ergebnis fortfahren. Diese APIs unterscheiden sich von den vorhandenen when*-Methoden, da sie das Ausführen von unterbrechendem Code nicht zulassen und keinen benutzerdefinierten Dispatcher verwenden. (aosp/1326081)
  • ViewTree-APIs: Mit einer neuen ViewTreeLifecycleOwner.get(View)- und ViewTreeViewModelStoreOwner.get(View)-API können Sie die enthaltenden LifecycleOwner bzw. ViewModelStoreOwner für eine bestimmte View-Instanz abrufen. Sie müssen auf Activity 1.2.0 und Fragment 1.3.0 sowie AppCompat 1.3.0-alpha01 oder höher aktualisieren, damit die Daten richtig ausgegeben werden. Die Kotlin-Erweiterungen findViewTreeLifecycleOwner und findViewTreeViewModelStoreOwner sind in lifecycle-runtime-ktx bzw. lifecycle-viewmodel-ktx verfügbar.
  • LiveData.observe() – Einstellung der Kotlin-Erweiterung: Die LiveData.observe()-Kotlin-Erweiterung, die für die Verwendung der Lambda-Syntax erforderlich ist, wird jetzt eingestellt, da sie bei Verwendung von Kotlin 1.4 nicht mehr benötigt wird.

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 Methode keys() von SavedStateHandle ist jetzt vor und nach dem Speichern des Status konsistent. Sie enthält jetzt zusätzlich zu den mit set() und getLiveData() verwendeten Schlüsseln auch die zuvor mit setSavedStateProvider() verwendeten Schlüssel. (aosp/1517919, b/174713653)

Externe Beiträge

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 LiveData.observe()-Kotlin-Erweiterung, die für die Verwendung der Lambda-Syntax erforderlich ist, ist jetzt veraltet, da sie bei Verwendung von Kotlin 1.4 nicht mehr benötigt wird. (I40d3f)

Fehlerkorrekturen

Änderungen an der Dokumentation

  • Der liveData-Builder und die asLiveData()-Dokumentation wurden aktualisiert und enthalten 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 beim NullSafeMutableLiveData-Lint-Check 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) und upTo(State) wurden zu Lifecycle.Event hinzugefügt, um die Event anhand einer State und der Übergangsrichtung zu generieren. Die Methode getTargetState() wurde hinzugefügt, die den State bereitstellt, zu dem der Lebenszyklus direkt nach dem Event übergeht. (I00887)
  • Es wurden Lifecycle.withStateAtLeast-APIs hinzugefügt, die auf einen Lebenszyklusstatus warten und einen nicht unterbrechenden Codeblock synchron zum Zeitpunkt der Statusänderung ausführen und dann mit dem Ergebnis fortfahren. Diese APIs unterscheiden sich von den vorhandenen when*-Methoden, da sie das Ausführen von unterbrechendem Code nicht zulassen und keinen benutzerdefinierten Dispatcher verwenden. (aosp/1326081)

Geändertes Verhalten

  • LifecycleRegistry erzwingt jetzt DESTROYED als Endstatus. (I00887)
  • LifecycleRegistry prüft jetzt, ob seine Methoden im Hauptthread aufgerufen werden. Das war schon immer eine Anforderung für Lebenszyklen von Aktivitäten, Fragmenten usw. Das Hinzufügen von Beobachtern aus Nicht-Main-Threads führte zu schwer zu erfassenden Abstürzen zur Laufzeit. Bei LifecycleRegistry-Objekten, die zu Ihren eigenen Komponenten gehören, können Sie die Prüfungen explizit deaktivieren, indem Sie LifecycleRegistry.createUnsafe(...) verwenden. Sie müssen dann jedoch dafür sorgen, dass eine ordnungsgemäße Synchronisierung erfolgt, wenn auf dieses LifecycleRegistry über verschiedene Threads zugegriffen wird (Ie7280, b/137392809).

Fehlerkorrekturen

  • Ein Fehler wurde behoben, der zum Absturz von NullSafeMutableLiveData führte. (b/159987480)
  • Ein ObsoleteLintCustomCheck für Lint-Prüfungen, die mit lifecycle-livedata-core-ktx (insbesondere NullSafeMutableLiveData) gebündelt sind, wurde behoben. (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 verarbeitet jetzt Reentrant-Fälle besser und vermeidet doppelte Aufrufe von onActive() oder onInactive(). (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 Fehler wurde behoben, der zum Absturz des NonNullableMutableLiveData-Lint-Checks führte. (b/157294666)
  • Der NonNullableMutableLiveData-Lint-Check deckt jetzt deutlich mehr Fälle ab, in denen ein null-Wert für ein MutableLiveData mit einem nicht leeren 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önnen setSavedStateProvider() für einen bestimmten Schlüssel aufrufen und so ein SavedStateProvider bereitstellen, das einen Callback zu saveState() erhält, wenn SavedStateHandle aufgefordert wird, seinen Status zu speichern. (b/155106862)
  • Mit einer neuen ViewTreeViewModelStoreOwner.get(View)-API können Sie das enthaltende ViewModelStoreOwner für eine View-Instanz abrufen. Sie müssen auf Activity 1.2.0-alpha05, Fragment 1.3.0-alpha05 und AppCompat 1.3.0-alpha01 aktualisieren, damit die Daten korrekt ausgegeben werden. findViewModelStoreOwner() wurde eine findViewModelStoreOwner()-Kotlin-Erweiterung hinzugefügt.lifecycle-viewmodel-ktx (aosp/1295522)

Fehlerkorrekturen

  • Ein Problem wurde behoben, durch das die in Lifecycle 2.3.0-alpha01 veröffentlichten MutableLiveData-Lint-Prüfungen nicht zusammen mit dem lifecycle-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

  • Mit SavedStateViewModelFactory können Sie jetzt einen Nullwert für Application an den Konstruktor übergeben, um Fälle besser zu unterstützen, in denen kein Wert verfügbar ist und keine Unterstützung für AndroidViewModel erforderlich ist. (aosp/1285740)

Fehlerkorrekturen

  • Die Kaltstartleistung wurde verbessert, indem Klassenprüfungsfehler auf Geräten mit API 28 und niedriger 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 das enthaltende LifecycleOwner für eine View-Instanz abrufen. Sie müssen ein Upgrade auf Activity 1.2.0-alpha01 und Fragment 1.3.0-alpha01 durchführen, damit diese Daten richtig erfasst werden. Eine findViewTreeLifecycleOwner-Kotlin-Erweiterung ist in lifecycle-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 ein MutableLiveData festlegen, das in Kotlin als „nicht null“ definiert wurde. Diese Option ist verfügbar, wenn Sie die Artefakte livedata-core-ktx oder livedata-ktx verwenden. (aosp/1154723, aosp/1159092)
  • Es ist ein neues lifecycle-runtime-testing-Artefakt verfügbar, das ein TestLifecycleOwner bereitstellt, das LifecycleOwner implementiert und ein threadsicheres, veränderliches Lifecycle bereitstellt. (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.

Lifecycle ViewModel SavedState hat jetzt dieselbe Version wie andere Lifecycle-Artefakte. Das Verhalten von 2.2.0 ist identisch mit dem Verhalten von 1.0.0.

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

  • Lifecycle-Coroutine-Integration: Das neue lifecycle-runtime-ktx-Artefakt bietet eine Integration zwischen Lifecycle und Kotlin-Coroutinen. Die lifecycle-livedata-ktx wurde ebenfalls erweitert, um die Vorteile von Coroutinen zu nutzen. Weitere Informationen finden Sie unter Kotlin-Coroutinen mit Architecture Components verwenden.
  • Einstellung von ViewModelProviders.of(): ViewModelProviders.of() wurde eingestellt. Sie können ein Fragment- oder FragmentActivity-Objekt an den neuen ViewModelProvider(ViewModelStoreOwner)-Konstruktor übergeben, um dieselbe Funktionalität wie bei der Verwendung von Fragment 1.2.0 zu erzielen.
  • lifecycle-extensions-Artefakt wird eingestellt: Mit der oben genannten Einstellung von ViewModelProviders.of() wird mit diesem Release die letzte API in lifecycle-extensions eingestellt. Dieses Artefakt sollte jetzt als vollständig eingestellt betrachtet werden. Wir empfehlen dringend, je nach den benötigten Lifecycle-Artefakten lifecycle-service (wenn Sie LifecycleService verwenden) und lifecycle-process (wenn Sie ProcessLifecycleOwner verwenden) anstelle von lifecycle-extensions zu verwenden, da es keine zukünftige 2.3.0-Version von lifecycle-extensions geben wird.
  • Gradle Incremental Annotation Processor: Der Annotation Processor von Lifecycle 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 Sie LifecycleEventObserver 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 ein simulierter ViewModel in ViewModelStore gespeichert und später mit der Standardfactory abgefragt wurde.
  • Die Verwendung von Dispatchers.Main.immediate in launchWhenCreated und ähnlichen Methoden wurde korrigiert, sodass sie während des entsprechenden Lebenszyklus-Events synchron aufgerufen werden. (aosp/1156203)

Externe Beiträge

  • Vielen Dank an Anders Järleberg für den Beitrag zur Fehlerbehebung. (aosp/1156203)
  • Vielen Dank an Vsevolod Tolstopyatov von Jetbrains für die Überprüfung einer Implementierung der Inline-Ausführung.

Änderungen an Abhängigkeiten

  • Lifecycle Extensions hängt jetzt von 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 oder höher betraf, wenn das Ziel-API-Level 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, bei dem launchWhenCreated und zugehörige Methoden aufgrund der Verwendung von Dispatchers.Main anstelle von Dispatchers.Main.immediate einen Frame später als die zugehörige Methode für den Lebenszyklus ausgeführt wurden. (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 veröffentlicht. Version 2.2.0-beta01 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde ein Regressionsfehler behoben, der in Lifecycle 2.2.0-alpha05 eingeführt wurde und die Reihenfolge von ProcessLifecycleOwner und LifecycleOwner der Aktivität betrifft, die auf Android 10-Geräten in den Status „gestartet“ und „fortgesetzt“ wechselt. (aosp/1128132)
  • Ein in Lifecycle 2.2.0-alpha05 eingeführter Fehler wurde behoben, der bei Verwendung der Versionen 2.0.0 oder 2.1.0 von lifecycle-process zu einem NullPointerException 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 Coroutine-LiveData-Builder 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

  • lifecycleScope, whenCreated, whenStarted, whenResumed, viewModelScope und die zugrunde liegende Implementierung von liveData verwenden jetzt Dispatchers.Main.immediate anstelle von Dispatchers.Main. (b/139740492)

Externe Beiträge

  • Vielen Dank an Nicklas Ansman für die Unterstützung bei der 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

API-Änderungen

  • ViewModelProviders.of() wurde eingestellt. Sie können ein Fragment- oder FragmentActivity-Objekt an den neuen ViewModelProvider(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 veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

API-Änderungen

  • LiveDataScope.initialValue wurde durch LiveDataScope.latestValue ersetzt, um den aktuellen ausgegebenen Wert des Blocks liveData zu erfassen.
  • Dem liveData-Builder wurde eine neue Überladung hinzugefügt, die den Parameter timeout vom Typ Duration 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

  • In dieser Version werden neue Funktionen hinzugefügt, die die Unterstützung von Kotlin-Coroutinen für Lifecycle und LiveData ermöglichen. Eine detaillierte 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 Version 1.0.0

  • Die neue Klasse SavedStateHandle wurde hinzugefügt. Dadurch können Ihre ViewModel-Klassen auf den gespeicherten Status zugreifen und dazu beitragen. Dieses Objekt kann im Konstruktor der Klasse ViewModel empfangen werden. Die von Fragmenten und AppCompatActivity standardmäßig bereitgestellten Factorys fügen SavedStateHandle automatisch ein.
  • AbstractSavedStateViewModelFactory wurde hinzugefügt. Damit können Sie benutzerdefinierte Factorys für Ihre ViewModel erstellen und ihnen Zugriff auf SavedStateHandle 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

  • Lifecycle ViewModel SavedState hängt jetzt von 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

  • Hängt jetzt 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

  • Es wurde ein Problem behoben, bei dem beim ersten Zugriff auf ein SavedState-ViewModel in Activity.onActivityResult() ein IllegalStateException auftrat. (b/139093676)
  • Ein IllegalStateException bei der Verwendung von AbstractSavedStateViewModelFactory 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 erbt nicht mehr von AbstractSavedStateViewModelFactory und SavedStateHandle wird nur für ViewModels erstellt, die es angefordert haben (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.

Aktuelle Änderungen

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

  • Es wurde eine SavedStateHandle.getLiveData()-Überladung hinzugefügt, die einen Standardwert akzeptiert.

API-Änderungen

  • SavedStateVMFactory wird in SavedStateViewModelFactory umbenannt.
  • AbstractSavedStateVMFactory wird in AbstractSavedStateViewModelFactory 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

  • ViewModels kann jetzt zum gespeicherten Status beitragen. Dazu verwenden Sie die neu eingeführte Factory SavedStateVMFactory des ViewModels und Ihr ViewModel sollte einen Konstruktor haben, der das SavedStateHandle-Objekt als Parameter empfängt.

Version 2.1.0

Wichtige Änderungen seit Version 2.0.0

  • LifecycleEventObserver für die Fälle hinzugefügt, in denen ein Stream von Lebenszyklusereignissen erforderlich ist. Es handelt sich um eine öffentliche API und nicht um eine verborgene GenericLifecycleObserver-Klasse.
  • Es wurden KTX-Erweiterungen für LiveData.observe-Methoden und Transformations.*-Methoden hinzugefügt.
  • Transformations.distinctUntilChanged wurde hinzugefügt. Damit wird ein neues LiveData-Objekt erstellt, das erst dann einen Wert ausgibt, wenn sich der Quellwert LiveData geändert hat.
  • Unterstützung für Coroutinen in ViewModels wurde durch Hinzufügen der Erweiterungseigenschaft ViewModel.viewModelScope hinzugefügt.

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

  • Die Lebenszyklen sind in die Betaphase übergegangen: APIs, die in früheren Alphas eingeführt wurden, z. B. liveData-Erweiterungsfunktionen für Transformationen und Beobachtungen, ViewModel-Initialisierung mit Eigenschaftsdelegierung und andere, sind stabilisiert 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

  • Grundlegende Änderung: Die zugrunde liegende API für by viewModels() und by activityViewModels() wurde geändert, um direkt ViewModelStore anstelle von nur ViewModelStoreOwner 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 in dieser Version enthaltenen Commits finden Sie hier.

API-Änderungen

  • ViewModelProvider.KeyedFactory wurde entfernt. Die zweite Schnittstelle zusätzlich zu ViewModelProvider.Factory war nicht gut mit neuen Funktionen wie der Attributdelegierung in Kotlin by viewmodels {} kompatibel. (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 die Methode setCurrentState(), die die jetzt verworfene Methode setState() ersetzt. (aosp/880715)

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem Mock-ViewModel-Instanzen abgestürzt sind, wenn das enthaltende ViewModelStore 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 für die Fälle hinzugefügt, in denen ein Stream von Lebenszyklusereignissen erforderlich ist. Es handelt sich um eine öffentliche API und nicht um eine verborgene GenericLifecycleObserver-Klasse.
  • Es wurden KTX-Erweiterungen für LiveData.observe-Methoden und Transformations.*-Methoden hinzugefügt.
  • Die Methode Transformations.distinctUntilChanged wurde hinzugefügt. Es wird ein neues LiveData-Objekt erstellt, das erst dann einen Wert ausgibt, wenn sich der Quell-LiveData-Wert geändert hat.
  • Coroutine-Unterstützung in ViewModels: Die Erweiterungseigenschaft ViewModel.viewModelScope wurde hinzugefügt.
  • ViewModelProvider.KeyedFactory wurde hinzugefügt, eine Factory für ViewModels, die key und Class in der Methode create empfängt.

Version 2.0.0

Version 2.0.0

21. September 2018

Der Lebenszyklus 2.0.0 wird mit einem Fehlerkorrektur aus 2.0.0-rc01 in ViewModel veröffentlicht.

Fehlerkorrekturen

  • Es wurde eine ProGuard-Regel für ViewModels korrigiert, durch die Konstruktoren fälschlicherweise entfernt wurden. b/112230489

Version 2.0.0-beta01

2. Juli 2018

Fehlerkorrekturen

  • Die ProGuard-Regel für LifecycleObserver wurde korrigiert, sodass nur Implementierungen und keine untergeordneten Schnittstellen beibehalten werden. b/71389427
  • Die ProGuard-Regeln für ViewModels wurden korrigiert, um die Verschleierung und das Verkleinern zu ermöglichen.

Versionen vor AndroidX

Für die Pre-AndroidX-Versionen von Lifecycle, die folgen, müssen Sie diese Abhängigkeiten einfügen:

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. 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 also nicht direkt auf lifecycle:runtime aus, sondern nur auf Module, die direkt von lifecycle:common abhängen, wie Paging.

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 eingestellten LifecycleActivity und LifecycleFragment wurden jetzt entfernt. Verwenden Sie stattdessen FragmentActivity, AppCompatActivity oder Fragment.
  • @NonNull-Annotationen wurden ViewModelProviders und ViewModelStores hinzugefügt
  • Der ViewModelProviders-Konstruktor wurde eingestellt. Verwenden Sie stattdessen die statischen Methoden.
  • ViewModelProviders.DefaultFactory wurde eingestellt. Verwenden Sie stattdessen ViewModelProvider.AndroidViewModelFactory.
  • Die statische Methode ViewModelProvider.AndroidViewModelFactory.getInstance(Application) wurde hinzugefügt, um eine statische Factory abzurufen, die sich für die Erstellung von ViewModel- und AndroidViewModel-Instanzen eignet.