Lebenszyklus

Lebenszyklusbewusste Komponenten erzielen Aktionen als Reaktion auf eine Änderung des Lebenszyklusstatus einer anderen Komponente wie Aktivitäten und Fragmente. Diese Komponenten helfen Ihnen, besser organisierter und oft einfacherer Code, der einfacher zu pflegen ist.

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

Artefakt Stabile Version Releasekandidat Beta-Ausgabe Alpha-Release
Lebenszyklus* 2,8,5 - - 2.9.0-alpha02
Lebenszyklus-Ansicht-Modell-Zusammensetzung 2,8,5 - - 2.9.0-alpha02
Letzte Aktualisierung dieser Mediathek: 4. September 2024

Abhängigkeiten deklarieren

Um eine Abhängigkeit vom Lebenszyklus hinzuzufügen, müssen Sie das Google Maven-Repository zu Ihrem Projekt arbeiten. Maven-Repository von Google lesen .

Fügen Sie der Datei build.gradle die Abhängigkeiten für die Artefakte hinzu, die Sie benötigen Ihre App oder Ihr Modul:

Kotlin

Cool

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

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

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

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

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

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

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

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

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

Kotlin

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

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

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

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

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

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

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

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

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

Java

Cool

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

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

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

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

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

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

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

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

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

Kotlin

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

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

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

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

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

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

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

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

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

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

Feedback

Dein Feedback hilft uns, Jetpack zu verbessern. Teilen Sie uns mit, wenn Sie neue Ausgaben entdecken oder zur Verbesserung dieser Bibliothek. In der bestehende Probleme in dieser Bibliothek, bevor Sie eine neue erstellen. So können Sie für ein vorhandenes Problem abstimmen: indem Sie auf die Sternschaltfläche klicken.

Neues Problem erstellen

Weitere Informationen finden Sie in der Dokumentation zur Problemverfolgung. .

Version 2.9

Version 2.9.0-alpha02

4. September 2024

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

Fehlerkorrekturen

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

Externer Beitrag

  • androidx.compose.ui.platform.LocalLifecycleOwner in den gemeinsamen Quellsatz (KMP) verschieben. Vielen Dank Ivan Matkov von JetBrains für diesen Beitrag. (8cd5d03)
  • Aus Lebenszyklus 2.8.5: Der Erweiterungsdelegat 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 wurde 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 linuxArm64 Kotlin-Multiplattform-Ziel hinzufügen (I139d3, b/338268719)

Neue Funktionen

  • Es ist ein neues KMP-Artefakt androidx.lifecycle:lifecycle-viewmodel-testing 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 einer ViewModel mit ViewModelProvider ist jetzt threadsicher. @MainThread-Anmerkungen wurden entfernt. (Ifd978, b/237006831)

API-Änderungen

  • Fügen Sie die CreationExtras.Key()-Factory-Funktion hinzu, um das Erstellen anonymer CreationExtras.Key-Objekte zu vereinfachen. (I970ee)
  • CreationExtras enthält jetzt kartenähnliche Operatorüberladungen, um eine idiomatische Bearbeitung von Inhalten in Kotlin zu 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 auf JVM Desktop- und Android-Zielen verfügbar. (d3d0892)
  • Eigenschaft der Inline-Erweiterung zur sicheren Bereitstellung der zugrunde liegenden Anwendung in der Kotlin-Sprachversion 2.0 (I39df2)

Fehlerkorrekturen

  • Die manuelle Beschreibung des Zugriffs auf neue Plattform-APIs wurde entfernt, da dies bei Verwendung von R8 mit AGP 7.3 oder höher (z.B. R8-Version 3.3) und bei allen Builds bei Verwendung von AGP 8.1 oder höher (z.B. D8 Version 8.1) automatisch über die API-Modellierung erfolgt. Kunden, die AGP nicht verwenden, wird empfohlen, auf D8-Version 8.1 oder höher zu aktualisieren. Weitere Details findest du in diesem Artikel. (If6b4c, b/345472586)

Version 2.8

Version 2.8.5

4. September 2024

androidx.lifecycle:lifecycle-*:2.8.5 wurde veröffentlicht. Version 2.8.5 enthält diese Commits.

Fehlerkorrekturen

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

Externer Beitrag

  • Der Erweiterungsdelegat SavedStateHandle.saveable unterstützt jetzt Werte, für die Nullwerte zulässig sind. Vielen Dank an Roman Kalukiewicz für diesen Beitrag. (0d78ea6)

Version 2.8.4

24. Juli 2024

androidx.lifecycle:lifecycle-*:2.8.4 wurde veröffentlicht. Version 2.8.4 enthält diese Commits.

Fehlerkorrekturen

  • LiveData.asFlow() verarbeitet jetzt korrekt Fälle, in denen der zurückgegebene Ablauf sofort abgeschlossen wird, nachdem ein Wert empfangen wurde, der bereits für LiveData festgelegt ist (z. B. bei Verwendung von take(1)). (I9c566)
  • Die Lifecycle*Effect-Vervollständigung ist jetzt idempotent (d.h., wenn onStopOrDispose aufgrund des beendeten Lebenszyklus aufgerufen wurde, wird sie bei der Entsorgung nur dann ein zweites Mal aufgerufen, wenn der Lebenszyklus wieder auf STARTED zurückgeht). (I5f607, b/352364595)

Version 2.8.3

1. Juli 2024

androidx.lifecycle:lifecycle-*:2.8.3 wurde veröffentlicht. Version 2.8.3 enthält diese Commits.

Fehlerkorrekturen

  • Ein Problem mit der Abwärtskompatibilität von Lifecycle 2.8 mit Compose 1.6.0 und niedriger bei Verwendung der Codekomprimierung wurde behoben. (aosp/3133056, b/346808608)

Version 2.8.2

12. Juni 2024

androidx.lifecycle:lifecycle-*:2.8.2 wurde veröffentlicht. Version 2.8.2 enthält diese Commits.

Fehlerkorrekturen

  • CompositionLocal LocalLifecycleOwner not present-Fehler bei der Verwendung von Lifecycle 2.8.X mit Compose 1.6.X oder niedriger wurden behoben. Sie können Lebenszyklus 2.8.2 jetzt mit jeder Version von Compose ohne Behelfslösungen verwenden. (aosp/3105647, b/336842920)
  • ViewModelProvider stürzt nicht mehr ab, wenn frühere Versionen von compileOnly Lifecycle-Abhängigkeiten mit Version 2.8 und höher kombiniert werden. Dadurch werden Probleme mit Bibliotheken wie LeakCanary behoben. (I80383, b/341792251)

Version 2.8.1

29. Mai 2024

androidx.lifecycle:lifecycle-*:2.8.1 wurde 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, wodurch die gemeinsame Abhängigkeit von compose-ui entfernt wird. Das Android-Artefakt behält compose-ui aus Kompatibilitätsgründen bei. (aosp/3079334, b/339562627)
  • Bei der saveable-Integration von ViewModel mit Attributdelegierten wird jetzt der Klassenname als Teil des automatisch generierten Schlüssels verwendet, um Konflikte zu vermeiden, wenn mehrere Klassen dieselbe SavedStateHandle verwenden. (aosp/3063463)

Version 2.8.0

14. Mai 2024

androidx.lifecycle:lifecycle-*:2.8.0 wurde veröffentlicht. Version 2.8.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.7.0

  • LocalLifecycleOwner wurde von der Compose-UI zu lifecycle-runtime-compose verschoben, damit die auf dem Compose-Tool basierenden Hilfs-APIs außerhalb der Compose-UI verwendet werden können.
  • Das Artefakt lifecycle-runtime-compose enthält jetzt die APIs dropUnlessResumed und dropUnlessStarted, mit denen Sie Klicks oder andere Ereignisse löschen können, die auftreten, selbst nachdem LifecycleOwner unter den angegebenen Lifecycle.State fällt. Sie kann beispielsweise zusammen mit „Navigation Compose“ verwendet werden, um die Verarbeitung von Click-Events zu vermeiden, nachdem ein Wechsel zu einem anderen Bildschirm bereits begonnen hat: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
  • ViewModel.viewModelScope ist jetzt ein überschreibbarer Konstruktorparameter, mit dem Sie Ihren eigenen Dispatcher und SupervisorJob() einfügen oder den Standardwert überschreiben können, indem Sie die in runTest verfügbare backgroundScope verwenden. (I2817c, b/264598574)

    class MyViewModel(
      // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate
      viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob()
    ) : ViewModel(viewModelScope) {
      // Use viewModelScope as before, without any code changes
    }
    
    // Allows overriding the viewModelScope in a test
    fun Test() = runTest {
      val viewModel = MyViewModel(backgroundScope)
    }
    
  • ViewModel wurde in Kotlin umgeschrieben und verwendet jetzt AutoClosable anstelle von Closeable. Sie unterstützt jetzt das Hinzufügen von AutoCloseable-Objekten mit einer key, die das Abrufen über getCloseable() ermöglicht.

  • Das Aufrufen von LifecycleStartEffect und LifecycleResumeEffect ohne Schlüssel ist jetzt ein Fehler. Dabei gilt dieselbe Konvention wie bei der DisposableEffect API, die in diesen APIs widergespiegelt wird.

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

  • Die lifecycle-livedata-core-ktx-Codierungserweiterungen wurden jetzt in das lifecycle-livedata-core-Modul verschoben.

  • NullSafeMutableLiveData wurde refaktoriert, um viele falsch positive Ergebnisse zu vermeiden.

Lebenszyklus-/Plattform-Kompatibilität mit Kotlin

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

Betroffene Artefakte:

  • lifecycle-common verschiebt die meisten APIs zu common und unterstützt neben Android auch jvm und iOS.
  • lifecycle-runtime verschiebt die meisten APIs zu common und unterstützt neben Android auch jvm und iOS.
  • lifecycle-runtime-ktx ist jetzt leer und alle APIs werden in lifecycle-runtime verschoben.
  • lifecycle-runtime-compose verschiebt alle APIs nach common und sendet ein Android-Artefakt, das der plattformübergreifenden Unterstützung von androidx.compose entspricht.

ViewModel Kotlin Multi-Platform-Kompatibilität

Das lifecycle-viewmodel-Artefakt und die APIs wie ViewModel, ViewModelStore, ViewModelStoreOwner und ViewModelProvider werden jetzt in Artefakten bereitgestellt, die mit Kotlin Multiplatform kompatibel sind.

Um diese Änderung zu berücksichtigen, verfügen Methoden wie die unter ViewModelProvider, die ein java.lang.Class<T>-Objekt verwendet haben, nun über eine äquivalente Methode, die einen kotlin.reflect.KClass<T>-Vorgang verwendet.

Die Binärkompatibilität unter Android wurde beibehalten. Beim Vergleich der Android-API-Oberfläche mit der gängigen API-Oberfläche gibt es jedoch einige wesentliche Änderungen:

  • Das Erstellen einer ViewModelProvider-Instanz erfolgt nun über die ViewModelProvider.create()-Methoden, anstatt ihren Konstruktor direkt aufzurufen.
  • ViewModelProvider.NewInstanceFactory und ViewModelProvider.AndroidViewModelFactory sind nur auf Android-Geräten verfügbar.
    • Es wird empfohlen, benutzerdefinierte Factorys von ViewModelProvider.Factory zu erweitern und die create-Methode zu verwenden, die CreationExtras erfordert, oder die viewModelFactory Kotlin DSL zu verwenden.
  • Die Verwendung von ViewModelProvider ohne eine benutzerdefinierte Factory auf Nicht-JVM-Plattformen führt zu einem UnsupportedOperationException. Auf JVM-Plattformen wird die Kompatibilität durch die Verwendung des ViewModel-Konstruktors (no-args) sichergestellt, wenn keine benutzerdefinierte Factory vorhanden ist.
  • viewModelScope wird auf Plattformen, auf denen Dispatchers.Main nicht verfügbar ist (z.B.EmptyCoroutineContext Linux).

Betroffene Artefakte:

  • lifecycle-viewmodel verschiebt die meisten APIs zu common und unterstützt neben Android auch jvm und iOS.
  • lifecycle-viewmodel-ktx ist jetzt leer und alle APIs werden in lifecycle-viewmodel verschoben.
  • lifecycle-viewmodel-compose verschiebt alle APIs nach common und sendet ein Android-Artefakt, das der plattformübergreifenden Unterstützung von androidx.compose entspricht.

Änderungen im Verhalten

  • InitializerViewModelFactory (einschließlich der Builder-Funktion viewModelFactory) gibt jetzt eine IllegalArgumentException aus, wenn bereits eine initializer mit derselben 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 wurde veröffentlicht. Version 2.8.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde ein Problem behoben, bei dem das Baseline-Profil für lifecycle-common-Klassen nicht richtig gepackt wurde. Diese sind jetzt im AAE für lifecycle-runtime enthalten. (aosp/3038274, b/322382422)
  • Eine unbeabsichtigte Änderung beim Löschen von AutoCloseable-Instanzen, die an ein ViewModel angehängt sind, wurde behoben. Die vorherige Reihenfolge von addCloseable(String, AutoCloseable), dann addClosable(AutoCloseable) und dann onCleared() wurde wiederhergestellt. (aosp/3041632)
  • Verbessern Sie das Standardverhalten bei der Erstellung von viewModelScope für native und JVM Desktop-Umgebungen. (aosp/3039221)

Externer Beitrag

  • Vielen Dank, Victor Kropp für die Verbesserung der Suche nach dem Hauptthread auf JVM Desktop. (aosp/3037116)

Version 2.8.0-beta01

17. April 2024

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

Neue Funktionen

  • Das Artefakt lifecycle-runtime-compose ist jetzt mit Kotlin Multiplatform kompatibel. Der Code wird zu common verschoben und ein Android-Artefakt versendet, das der plattformübergreifenden 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 wurde veröffentlicht. Version 2.8.0-alpha04 enthält diese Commits.

Neue Funktionen

  • Das Artefakt lifecycle-viewmodel-compose ist jetzt mit Kotlin Multiplatform kompatibel. Der Code wird zu common verschoben und ein Android-Artefakt versendet, das der plattformübergreifenden Unterstützung von androidx.compose entspricht. Die zusammensetzbare Methode viewModel akzeptiert jetzt zusätzlich zu java.lang.Class auch einen KClass. (b/330323282)

Fehlerkorrekturen

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

Aktualisierung der Abhängigkeit

  • Das Artefakt lifecycle-viewmodel-compose hängt jetzt von Compose 1.6.0 ab.
  • Der Lebenszyklus hängt jetzt vom Profile Installer 1.3.1 ab.

Version 2.8.0-alpha03

20. März 2024

androidx.lifecycle:lifecycle-*:2.8.0-alpha03 wurde veröffentlicht. Version 2.8.0-alpha03 enthält diese Commits.

Neue Funktionen

  • ViewModel.viewModelScope ist jetzt ein überschreibbarer Konstruktorparameter, mit dem Sie Ihren eigenen Dispatcher und SupervisorJob() einfügen oder den Standardwert überschreiben können, indem Sie die in runTest verfügbare backgroundScope verwenden. (I2817c, b/264598574)

    class MyViewModel(
      // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate
      viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob()
    ) : ViewModel(viewModelScope) {
      // Use viewModelScope as before, without any code changes
    }
    
    // Allows overriding the viewModelScope in a test
    fun Test() = runTest {
      val viewModel = MyViewModel(backgroundScope)
    }
    

Kotlin-Kompatibilität mit mehreren Plattformen

Das lifecycle-viewmodel-Artefakt und die APIs wie ViewModel, ViewModelStore, ViewModelStoreOwner und ViewModelProvider werden jetzt in Artefakten bereitgestellt, die mit Kotlin Multiplatform kompatibel sind. (b/214568825)

Um diese Änderung zu berücksichtigen, verfügen Methoden wie die unter ViewModelProvider, die ein java.lang.Class<T>-Objekt verwendet haben, nun über eine äquivalente Methode, die einen kotlin.reflect.KClass<T>-Vorgang verwendet.

Die Binärkompatibilität unter Android wurde beibehalten. Beim Vergleich der Android-API-Oberfläche mit der gängigen API-Oberfläche gibt es jedoch einige wesentliche Änderungen:

  • Das Erstellen einer ViewModelProvider-Instanz erfolgt nun über die ViewModelProvider.create()-Methoden, anstatt ihren Konstruktor direkt aufzurufen.
  • ViewModelProvider.NewInstanceFactory und ViewModelProvider.AndroidViewModelFactory sind nur auf Android-Geräten verfügbar.
    • Es wird empfohlen, benutzerdefinierte Factorys von ViewModelProvider.Factory zu erweitern und die create-Methode zu verwenden, die CreationExtras erfordert, oder die viewModelFactory Kotlin DSL zu verwenden.
  • Die Verwendung von ViewModelProvider ohne eine benutzerdefinierte Factory auf Nicht-JVM-Plattformen führt zu einem UnsupportedOperationException. Auf JVM-Plattformen wird die Kompatibilität durch die Verwendung des ViewModel-Konstruktors (no-args) sichergestellt, wenn keine benutzerdefinierte Factory vorhanden ist.
  • viewModelScope wird auf Plattformen, auf denen Dispatchers.Main nicht verfügbar ist (z.B.EmptyCoroutineContext Linux).

Änderungen im Verhalten

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

Fehlerkorrekturen

  • ViewModel.getCloseable verarbeitet jetzt duplizierte Schlüssel: Wenn mit key bereits eine AutoCloseable-Ressource verknüpft ist, wird die alte Ressource sofort ersetzt und geschlossen. (Ibeb67)
  • Der Zugriff auf den viewModelScope einer ViewModel ist jetzt threadsicher. (If4766, b/322407038)

Externer Beitrag

  • LocalLifecycleOwner wurde von der Compose-UI zu „Lifecycle-runtime-compose“ verschoben, damit die zugehörigen auf Compose basierenden Hilfs-APIs außerhalb der 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 wurde veröffentlicht. Version 2.8.0-alpha02 enthält diese Commits.

Neue Funktionen

  • Die APIs dropUnlessResumed und dropUnlessStarted wurden hinzugefügt, mit denen Sie Klicks oder andere Ereignisse löschen können, die auftreten, selbst wenn der LifecycleOwner unter den angegebenen Lifecycle.State fällt. Sie kann beispielsweise zusammen mit „Navigation Compose“ verwendet werden, um zu vermeiden, dass Click-Events verarbeitet werden, nachdem ein Wechsel zu einem anderen Bildschirm bereits begonnen hat: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) } (Icba83, b/317230685)

Kotlin-Conversions

  • ViewModel ist jetzt in Kotlin geschrieben (I16f26, b/214568825).
  • Die lifecycle-viewmodel-ktx-Codierungserweiterungen wurden jetzt in das Basis-Lebenszyklusmodul verschoben. (Id787b, b/274800183)
  • Die lifecycle-runtime-ktx-Codierungserweiterungen wurden jetzt in das Basis-Lebenszyklusmodul verschoben. (IC3686, b/274800183)
  • Die lifecycle-livedata-core-ktx-Codierungserweiterungen wurden jetzt in das Basis-Lebenszyklusmodul verschoben. (I54a3d, b/274800183)

Kotlin-Kompatibilität mit mehreren Plattformen

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

API-Änderungen

  • Das Aufrufen von LifecycleStartEffect und LifecycleResumeEffect ohne Schlüssel ist jetzt ein Fehler. Dabei gilt dieselbe Konvention wie bei der DisposableEffect API, die in diesen APIs widergespiegelt wird. (Ib0e0c, b/323518079)
  • ViewModel verwendet jetzt AutoCloseable anstelle von Closeable. Das ist eine abwärtskompatible Änderung. (I27f8e, b/214568825)
  • LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) zugunsten von LiveData.toPublisher(lifecycleOwner) eingestellt. (Iabe29, b/262623005)

Externer Beitrag

  • Danke Ivan Matkov von Jetbrains für seine Unterstützung beim Wechsel von Lifecycle zu Kotlin Multiplatform. (aosp/2926690, I0c5ac, If445d)

Version 2.8.0-alpha01

24. Januar 2024

androidx.lifecycle:lifecycle-*:2.8.0-alpha01 wurde veröffentlicht. Version 2.8.0-alpha01 enthält diese Commits.

Neue Funktionen

  • ViewModel unterstützt jetzt das Hinzufügen von Closeable-Objekten mit einer key, die das Abrufen über getCloseable() ermöglicht. (I3cf63)

Version 2.7

Version 2.7.0

10. Januar 2024

androidx.lifecycle:lifecycle-*:2.7.0 wurde veröffentlicht. Version 2.7.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.6.0

  • TestLifecycleOwner enthält jetzt eine Unterbrechungsfunktion setCurrentState(), die dafür sorgt, dass die Statusänderung und alle LifecycleObserver-Callbacks vor der Rückgabe abgeschlossen sind. Im Gegensatz zum direkten Festlegen des Attributs currentState wird dabei runBlocking nicht verwendet. Die Verwendung innerhalb einer Koroutine wie der von runTest bereitgestellten ist daher sicher.
  • Die LiveData-Erweiterungen von map und switchMap spiegeln jetzt das Verhalten von distinctUntilChanged wider. Wenn für LiveData eine value festgelegt ist, wird die map/switchMap-Funktion sofort aufgerufen, um das value des zurückgegebenen LiveData zu füllen. Dadurch wird sichergestellt, dass der Anfangswert bei Verwendung mit observeAsState() als Teil der ersten Komposition festgelegt wird. Das Beobachtungsverhalten ändert sich aber nicht. Aktualisierte Werte aus der Quelle LiveData werden erst dann 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 von Prozessen und der Neuerstellung nicht richtig wiederhergestellt hat. Aufgrund der Typinformationen, die durch das Android-Framework verloren gehen, ist für Arrays von benutzerdefinierten Parcelables zusätzliche Arbeit erforderlich (manuelle Erstellung 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-Notizen-Regeln wurden entfernt. Das bedeutet, dass geschützter Code, der APIs über Reflexion verwenden möchte (z. B. die seit Langem verworfene @OnLifecycleEvent-Annotation), eigene Keep-Regeln für den jeweiligen Anwendungsfall bereitstellen muss.

Beobachtbarkeit von Lebenszyklus-Ereignissen

  • Als Alternative zu LifecycleEventObserver können Sie jetzt eine Flow von Lifecycle.Event über die Erweiterungsmethode Lifecycle.asFlow() beobachten.
  • Nutzer von Jetpack Compose 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()
  }
  // …
}
  • Nutzer von Jetpack Compose können LifecycleStartEffect und LifecycleResumeEffect verwenden, um Paare von Ereignissen zu verarbeiten, die von „gestartet“ bzw. „pausiert“ fortgesetzt werden. Diese API spiegelt die in DisposableEffect wider und eignet sich für Fälle, in denen die beim Ansteigen des Status vorgenommene Änderung beim Zurückgehen 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 die Property Lifecycle.currentStateFlow beobachtet werden, die einen StateFlow zurückgibt, wobei value der aktuelle Lifecycle.State ist.
  • Nutzer von Jetpack Compose können die Erweiterung Lifecycle.currentStateAsState() verwenden, um Lifecycle.State direkt als Compose-State anzuzeigen. Dies entspricht lifecycle.currentStateFlow.collectAsState() (und 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 wurde veröffentlicht. Version 2.7.0-rc02 enthält diese Commits.

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem SavedStateHandle die benutzerdefinierten Parcelable-Klassen nicht richtig wiederhergestellt hat, nachdem „Defekt“ und „Neuerstellung“ verarbeitet wurden. Aufgrund der Typinformationen, die durch das Android-Framework verloren gehen, ist für Arrays von benutzerdefinierten Parcelables zusätzliche Arbeit erforderlich (manuelle Erstellung 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 wurde veröffentlicht. Version 2.7.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • LifecycleStartEffect und LifecycleResumeEffect entsorgen jetzt den Effektblock und erstellen ihn neu, wenn LifecycleOwner geändert wird. (Ia25c6)

Version 2.7.0-beta01

1. November 2023

androidx.lifecycle:lifecycle-*:2.7.0-beta01 wurde ohne Änderungen freigegeben. Version 2.7.0-beta01 enthält diese Commits.

  • Eine Ausweitung der Betaversion, keine größeren Änderungen an dieser Release-Version.

Version 2.7.0-alpha03

18. Oktober 2023

androidx.lifecycle:lifecycle-*:2.7.0-alpha03 wurde 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 vermeiden, dass Lifecycle.State des TestLifecycleOwner mithilfe des Felds currentState innerhalb einer Koroutine festgelegt wird. Bei der Lint-Prüfung wird jetzt das angehaltene setCurrentState vorgeschlagen, wodurch Lifecycle.State ohne Blockierung festgelegt werden kann. (Icf728, b/297880630)

Fehlerkorrekturen

  • Es wurde ein Problem mit LiveData.switchMap behoben, bei dem die Rückgabe der gleichen LiveData-Instanz sowohl beim ersten als auch bei einem nachfolgenden Aufruf verhindert wurde, dass die LiveData-Instanz als Quelle hinzugefügt wurde. (Ibedcba7)

Version 2.7.0-alpha02

6. September 2023

androidx.lifecycle:lifecycle-*:2.7.0-alpha02 wurde veröffentlicht. Version 2.7.0-alpha02 enthält diese Commits.

Neue Funktionen

  • TestLifecycleOwner enthält jetzt die Sperrfunktion setCurrentState(), um Nutzern die Möglichkeit zu geben, TestLifecycleOwner innerhalb einer Koroutine wie der von runTest zu verwenden. (I329de, b/259344129)

API-Änderungen

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

Änderungen im 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 war. Dadurch wird sichergestellt, dass die Verwendung der resultierenden LiveData in Jetpack Compose den richtigen Status für die ursprüngliche Komposition hat. (I91d2b, b/269479952)
  • addCloseable() von ViewModel schließt jetzt Closeable sofort, wenn ViewModel bereits einen Anruf an onCleared() erhalten hat. (I4712e, b/280294730)

Fehlerkorrekturen

  • Aus Lebenszyklus 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 im übergeordneten SavedStateRegistry zu speichern, und der Status dann noch einmal wiederhergestellt wurde. Damit wird die Interaktion zwischen rememberSaveable und „Navigation Compose“-NavHost behoben. (aosp/2729289)

Version 2.7.0-alpha01

26. Juli 2023

androidx.lifecycle:lifecycle-*:2.7.0-alpha01 wurde veröffentlicht. Version 2.7.0-alpha01 enthält diese Commits.

API-Änderungen

  • Lifecycle.State kann jetzt über Lifecycle.currentStateFlow beobachtbar werden, was eine StateFlow zurückgibt, wobei value die 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 Erweiterung „Lifecycle.collectAsState()“ wurde hinzugefügt, um „Lifecycle.State“ direkt als „Schreiben“ State anzuzeigen. Dies entspricht lifecycle.currentStateFlow.collectAsState() (und eine kürzere Alternative). (I11015, b/235529345)

Fehlerkorrekturen

  • Die Erweiterung LiveData.distinctUntilChanged() legt jetzt den value der zurückgegebenen LiveData fest, wenn für die vorherige LiveData ein Wert festgelegt wurde. Dies ändert nichts am Beobachtungsverhalten. Aktualisierte Werte aus der Quelle LiveData gelten weiterhin erst, wenn Sie die von distinctUntilChanged() zurückgegebenen LiveData beobachten. (Ib482f)
  • Die mit LifecycleObserver verknüpften Proguard-Notizen-Regeln wurden entfernt. Das bedeutet, dass geschützter Code, der APIs über Reflexion verwenden möchte, eigene Keep-Regeln für den jeweiligen Anwendungsfall bereitstellen muss. (Ia12fd)

Version 2.6

Version 2.6.2

6. September 2023

androidx.lifecycle:lifecycle-*:2.6.2 wurde veröffentlicht. Version 2.6.2 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde ein Problem behoben, bei dem SavedStateHandle nach dem Beenden des Prozesses nicht korrekt wiederhergestellt wurde, wenn der Status wiederhergestellt wurde, save() aufgerufen wurde, ohne den Status im übergeordneten SavedStateRegistry zu speichern, und der Status dann noch einmal wiederhergestellt wurde. Damit wird die Interaktion zwischen rememberSaveable und „Navigation Compose“-NavHost behoben. (aosp/2729289)

Version 2.6.1

22. März 2023

androidx.lifecycle:lifecycle-*:2.6.1 wurde veröffentlicht. Version 2.6.1 enthält diese Commits.

Aktualisierung der Abhängigkeiten

Version 2.6.0

8. März 2023

androidx.lifecycle:lifecycle-*:2.6.0 wurde veröffentlicht. Version 2.6.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.5.0

  • LiveData enthält jetzt eine neue isInitialized-Eigenschaft, die angibt, ob jemals ein expliziter Wert für LiveData festgelegt wurde. So kannst du zwischen liveData.value unterscheiden, die null zurückgeben, weil noch nie ein Wert festgelegt wurde, oder einem expliziten null-Wert.
  • MediatorLiveData enthält jetzt einen Konstruktor zum Festlegen eines Anfangswerts.
  • In StateFlow und Flow von collectAsStateWithLifecycle() wurde eine neue Erweiterung hinzugefügt, die aus Abläufen Daten erfasst und den neuesten Wert als Erstellungsstatus in Lebenszyklusbewusster Weise darstellt.
  • Lifecycle.launchWhenX- und Lifecycle.whenX-Methoden wurden eingestellt, da die Verwendung eines pausierten Disponenten in einigen Fällen zur Verschwendung von Ressourcen führen kann. Wir empfehlen die Verwendung von Lifecycle.repeatOnLifecycle. Weitere Informationen zum einmaligen Aussetzen von Arbeit finden Sie in dieser Erklärung, warum dies von Natur aus unsicher ist.
  • Kotlin-Konvertierung: Eine große Anzahl von Lifecycle-Klassen wurde in Kotlin konvertiert. Alle konvertierten Klassen haben weiterhin ihre Binärkompatibilität mit früheren Versionen. Die folgenden Klassen enthalten inkompatible Änderungen für Klassen, die in Kotlin geschrieben wurden: ViewTreeLifecycleOwner, LiveDataReactiveStreams, HasDefaultViewModelProviderFactory, ViewTreeViewModelStoreOwner, Transformations, ViewModelStoreOwner und LifecycleOwner.

In der folgenden Tabelle sind die Quell-Conversions für die neue Lebenszyklusversion aufgeführt.

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 Null-Zulässigkeit der onChanged-Methode einer in Kotlin erstellten Observer stimmt jetzt mit der Null-Zulässigkeit des generischen Typs überein. Wenn Observer.onChanged() einen Typ akzeptieren soll, für den Nullwerte zulässig sind, müssen Sie Observer mit einem Typ, der Nullwerte zulässt, instanziieren.
  • Die folgenden Klassen wurden ebenfalls in Kotlin konvertiert, sind aber weiterhin quellkompatibel: 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 wurde veröffentlicht. Version 2.6.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Die Erweiterung LiveData.distinctUntilChanged() legt jetzt den value der zurückgegebenen LiveData fest, wenn für die vorherige LiveData ein Wert festgelegt wurde. Dies ändert nichts am Beobachtungsverhalten. Aktualisierte Werte aus der Quelle LiveData gelten weiterhin erst, wenn Sie die von distinctUntilChanged() zurückgegebenen LiveData beobachten. (Ib482f)

Version 2.6.0-beta01

8. Februar 2023

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

Kotlin-Conversions

  • LifecycleOwner ist jetzt in Kotlin geschrieben. Diese Änderung ist nicht mit der Quelle kompatibel für Klassen, die in Kotlin geschrieben wurden. Sie müssen jetzt das Attribut lifecycle überschreiben, anstatt die vorherige getLifecycle()-Funktion zu implementieren. (I75b4b, b/240298691)
  • ViewModelStoreOwner ist jetzt in Kotlin verfügbar. Diese Änderung ist nicht mit der Quelle kompatibel für Klassen, die in Kotlin geschrieben wurden. Sie müssen jetzt das Attribut viewModelStore überschreiben, anstatt die vorherige getViewModelStore()-Funktion zu implementieren. (I86409, b/240298691)
  • Die Kotlin-Erweiterung für LifecycleOwner, die das Feld lifecycleScope bereitstellt, wurde in das Artefakt lifecycle-common von lifecycle-runtime-ktx verschoben. (I41d78, b/240298691)
  • Die Kotlin-Erweiterung für Lifecycle, die das Feld coroutineScope bereitstellt, wurde in das Artefakt lifecycle-common von lifecycle-runtime-ktx verschoben. (Iabb91, b/240298691)

Version 2.6.0-alpha05

25. Januar 2023

androidx.lifecycle:lifecycle-*:2.6.0-alpha05 wurde veröffentlicht. Version 2.6.0-alpha05 enthält diese Commits.

Kotlin-Conversions

  • Transformations ist jetzt in Kotlin geschrieben. Diese nicht mit der Quelle kompatible Änderung für Klassen, die in Kotlin geschrieben wurden und direkt eine Syntax wie Transformations.map verwendet haben: Kotlin-Code muss jetzt die Kotlin-Erweiterungsmethodensyntax verwenden, die zuvor nur mit lifecycle-livedata-ktx verfügbar war. Bei Verwendung der Programmiersprache Java werden die Versionen dieser Methoden, die eine androidx.arch.core.util.Function-Methode verwenden, verworfen und durch die Versionen mit einer Kotlin-Function1 ersetzt. Durch diese Änderung wird die Kompatibilität der Binärprogramme beibehalten. (I8e14f)
  • ViewTreeViewModelStoreOwner ist jetzt in Kotlin geschrieben. Diese Änderung ist nicht mit der Quelle kompatibel für die in Kotlin geschriebenen Klassen. Sie müssen jetzt die Kotlin-Erweiterungsmethoden von 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 sind, quellkompatibel. (Ia06d8, Ib22d8, b/240298691)
  • Die HasDefaultViewModelProviderFactory-Schnittstelle ist jetzt in Kotlin geschrieben. Diese Änderung ist nicht mit der Quelle kompatibel für Klassen, die in Kotlin geschrieben wurden. Sie müssen jetzt die Attribute defaultViewModelProviderFactory und defaultViewModelCreationExtras überschreiben, anstatt die vorherigen entsprechenden Funktionen zu implementieren. (Iaed9c, b/240298691)
  • Observer ist jetzt in Kotlin 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 wurde veröffentlicht. Version 2.6.0-alpha04 enthält diese Commits.

Neue Funktionen

  • LiveData enthält jetzt eine neue isInitialized-Eigenschaft, die angibt, ob jemals ein expliziter Wert für LiveData festgelegt wurde. So kannst du zwischen liveData.value unterscheiden, die null zurückgeben, weil noch nie ein Wert festgelegt wurde, oder einem expliziten null-Wert. (Ibd018)

API-Änderungen

  • Die collectAsStateWithLifecycle() APIs von lifecycle-runtime-compose befinden sich nicht mehr im experimentellen Status. (I09d42, b/258835424)
  • Lifecycle.launchWhenX- und Lifecycle.whenX-Methoden wurden eingestellt, da die Verwendung eines pausierten Disponenten in einigen Fällen zur Verschwendung von Ressourcen führen kann. Wir empfehlen die Verwendung von Lifecycle.repeatOnLifecycle. (Iafc54, b/248302832)

Kotlin-Conversions

  • ViewTreeLifecycleOwner ist jetzt in Kotlin geschrieben. Diese Änderung ist nicht mit der Quelle kompatibel für die in Kotlin geschriebenen Klassen. Sie müssen jetzt die Kotlin-Erweiterungsmethoden von View von androidx.lifecycle.setViewTreeLifecycleOwner und androidx.lifecycle.findViewTreeLifecycleOwner direkt importieren und verwenden, um einen zuvor festgelegten Inhaber festzulegen und zu finden. Dies ersetzt die vorherige Kotlin-Erweiterung in lifecycle-runtime-ktx. Dies ist binärkompatibel und bleibt für Implementierungen, die in der Programmiersprache Java geschrieben sind, quellkompatibel. (I8a77a, I5234e, b/240298691)
  • LiveDataReactiveStreams ist jetzt in Kotlin geschrieben. Die Kotlin-Erweiterungen, die zuvor in lifecycle-reactivestreams-ktx enthalten waren, wurden in das lifecycle-reactivestreams-Modul verschoben und sind die primäre Oberfläche für Code, der in Kotlin geschrieben wurde. Dies ist eine nicht mit der Quelle kompatible Änderung für Code, der in Kotlin geschrieben wurde, sofern Sie nicht bereits die Kotlin-Erweiterungsmethoden-APIs verwendet haben. (I2b1b9, I95d22, b/240298691)
  • DefaultLifecycleObserver, LifecycleEventObserver, Lifecycle, LifecycleRegistry, LifecycleObserver und ViewModelStore sind jetzt in Kotlin geschrieben (Iadffd, (I60034, I8c52c, I9593d, I01fe1, I59a23/618}, /618})

Fehlerkorrekturen

  • SavedStateHandle stürzt beim Aufrufen von get() mit der falschen Klasse nicht mehr mit einer ClassCastException ab Typ. (I6ae7c)

Version 2.6.0-alpha03

24. Oktober 2022

androidx.lifecycle:lifecycle-*:2.6.0-alpha03 wurde veröffentlicht. Version 2.6.0-alpha03 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde ein Problem behoben, bei dem Einschränkungen zwischen verschiedenen Lebenszyklusmodulen nicht wie vorgesehen funktionierten. (I18d0d, b/249686765)
  • Von LifecycleRegistry.moveToState() ausgegebene Fehler enthalten jetzt hilfreichere Fehlermeldungen, die Entwickler über die Komponente informieren, die den Fehler verursacht. (Idf4b2, b/244910446)

Version 2.6.0-alpha02

7. September 2022

androidx.lifecycle:lifecycle-*:2.6.0-alpha02 wurde veröffentlicht. Version 2.6.0-alpha02 enthält diese Commits.

API-Änderungen

  • MediatorLiveData enthält jetzt einen Konstruktor zum Festlegen eines Anfangswerts. (Ib6cc5, b/151244085)

Fehlerkorrekturen

  • Lifecycle-Artefakte enthalten jetzt Einschränkungen, die dafür sorgen, dass alle voneinander abhängigen Lebenszyklus-Artefakte dieselbe Version verwenden. Andere Abhängigkeiten werden beim Upgrade automatisch aktualisiert. b/242871265
  • FlowLiveData.asFlow() erstellt jetzt eine callbackFlow statt eine eigene Channel-Implementierung, um sicherzustellen, Thread-Sicherheit und Kontexterhaltung. (I4a8b2, b/200596935)
  • Die Funktion FlowLiveData asLiveData behält jetzt den Anfangswert eines StateFlow bei, wenn das neue LiveData-Objekt. (I3f530, b/157380488)
  • Aus Lebenszyklus 2.5.1: Bei benutzerdefinierten Implementierungen von AndroidViewModelFactory wird die Funktion create(modelClass) jetzt korrekt aufgerufen, wenn der zustandsorientierte Konstruktor mit Lifecycle ab Version 2.4 (I5b315, b/238011621) verwendet wird.

Version 2.6.0-alpha01

29. Juni 2022

androidx.lifecycle:lifecycle-*:2.6.0-alpha01 wurde veröffentlicht. Version 2.6.0-alpha01 enthält diese Commits.

Neue Funktionen

  • Es wurde eine neue Erweiterung auf StateFlow und Flow von collectAsStateWithLifecycle hinzugefügt, die Daten aus Abläufen erfassen und ihren neuesten Wert als Zusammensetzungsstatus auf lebenszyklusbewusste Weise darstellen. Der Datenfluss wird erfasst und die neue Emissionen wird auf den Wert des Bundesstaats gesetzt, wenn sich der Lebenszyklus mindestens in einem bestimmten Lifecycle.State befindet. Wenn der Lebenszyklus unter diesen Lifecycle.State fällt, wird die Ablauferfassung 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 wurde veröffentlicht. Version 2.5.1 enthält diese Commits.

Fehlerkorrekturen

  • Bei benutzerdefinierten Implementierungen von AndroidViewModelFactory wird die Funktion create(modelClass) jetzt korrekt aufgerufen, wenn der zustandsorientierte AndroidViewModelFactory-Konstruktor mit Lifecycle ab Version 2.4 verwendet wird. (I5b315, b/238011621)

Version 2.5.0

29. Juni 2022

androidx.lifecycle:lifecycle-*:2.5.0 wurde veröffentlicht. Version 2.5.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.4.0

  • SavedStateHandle bietet jetzt eine getStateFlow() API, die als Alternative zur Verwendung von LiveData einen Kotlin-StateFlow zum Überwachen von Wertänderungen zurückgibt.

  • ViewModel CreationExtras – Beim Schreiben einer benutzerdefinierten ViewModelProvider.Factory ist es nicht mehr erforderlich, AndroidViewModelFactory oder AbstractSavedStateViewModelFactory zu verlängern, um Zugriff auf Application bzw. SavedStateHandle zu erhalten. Stattdessen werden diese Felder in jeder abgeleiteten ViewModelProvider.Factory-Klasse als CreationExtras über die neue Überlastung von create bereitgestellt: create(Class<T>, CreationExtras). Diese Extras werden automatisch von Ihrer Aktivität oder Ihrem Fragment bereitgestellt, wenn Sie Aktivität 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 Bezug auf einen oder mehrere Lambda-Initialisierer definieren können, einen für jede bestimmte ViewModel-Klasse, die Ihre benutzerdefinierte Factory unterstützt, wobei CreationExtras als primäre Datenquelle verwendet wird.

    val customFactory = viewModelFactory {
        // The return type of the lambda automatically sets what class this lambda handles
        initializer {
            // Get the Application object from extras provided to the lambda
            val application = checkNotNull(get(ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY))
            HomeViewModel(application)
        }
        initializer {
            val savedStateHandle = createSavedStateHandle()
            DetailViewModel(savedStateHandle)
        }
    }
    
  • lifecycle-viewmodel-compose bietet jetzt 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 ein rememberSaveable-ähnliches Verhalten ermöglichen, das durch SavedStateHandle eines `ViewModel.

    class ListScreenViewModel(handle: SavedStateHandle): ViewModel() {
        // This value survives both configuration changes and process death and recreation
        val editMode by handle.saveable { mutableStateOf(false) }
    }
    
  • Es wurden eine addCloseable() API und eine neue Konstruktor-Überlastung hinzugefügt, mit denen Sie dem ViewModel ein oder mehrere Closeable-Objekte hinzufügen können. Diese werden geschlossen, wenn ViewModel gelöscht wird, ohne dass manuelle Schritte in onCleared() erforderlich sind.

    Um beispielsweise einen Koroutinebereich zu erstellen, den Sie in ein ViewModel einfügen, aber durch Tests steuern können, können Sie eine CoroutineScope erstellen, die Closeable implementiert:

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

    Das kann dann im ViewModel-Konstruktor unter Beibehaltung der Lebensdauer von viewModelScope verwendet werden:

    class TestScopeViewModel(
        val customScope: CloseableCoroutineScope = CloseableCoroutineScope()
    ) : ViewModel(customScope) {
        // You can now use customScope in the same way as viewModelScope
    }
    

Verhaltensänderungen

  • Wenn Sie versuchen, das Lifecycle.State von INITIALIZED nach DESTROYED zu verschieben, wird jetzt immer IllegalStateException ausgegeben ob der Lifecycle einen Beobachter angehängt ist.
  • LifecycleRegistry löscht jetzt die Beobachter, wenn sie den Status DESTROYED erreichen.

Version 2.5.0-rc02

15. Juni 2022

androidx.lifecycle:lifecycle-*:2.5.0-rc02 wurde veröffentlicht. Version 2.5.0-rc02 enthält diese Commits.

Fehlerkorrekturen

  • ViewModelProvider stürzt nicht mehr ab, wenn frühere Versionen von „compilOnly Lifecycle-Abhängigkeiten“ mit Versionen ab 2.5 kombiniert werden. (I81a66, b/230454566)

Version 2.5.0-rc01

11. Mai 2022

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

Fehlerkorrekturen

  • MediatorLiveData.addSource() gibt 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 wurde veröffentlicht. Version 2.5.0-beta01 enthält diese Commits.

API-Änderungen

  • Es wurden SavedStateHandle.saveable-Attributdelegierte hinzugefügt, um Property-Namen als Schlüssel für die dauerhafte Speicherung des Status in SavedStateHandle zu verwenden (I8bb86, b/225014345).

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem das Verschachteln einer NavHost in einem anderen NavHost auf einem nicht primären Navigations-Tab am unteren Rand zu einem IllegalStateException führte, wenn mehrere Back-Stacks verwendet wurden. (I11bd5, b/228865698)

Version 2.5.0-alpha06

6. April 2022

androidx.lifecycle:lifecycle-*:2.5.0-alpha06 wurde veröffentlicht. Version 2.5.0-alpha06 enthält diese Commits.

Neue Funktionen

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

API-Änderungen

  • CreationExtras ist jetzt abstrakt und nicht versiegelt. (Ib8a7a)

Fehlerkorrekturen

  • Ein IllegalStateException: Already attached to lifecycleOwner-Fehler behoben, der durch SavedStateHandleController verursacht wurde. (I7ea47, b/215406268)

Version 2.5.0-alpha05

23. März 2022

androidx.lifecycle:lifecycle-*:2.5.0-alpha05 wurde 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 sicherstellt, dass die Werte in einer SavedStateHandle korrekt mit dem gespeicherten Instanzstatus integriert werden, den rememberSaveable verwendet. (Ia88b7, b/195689777)

API-Änderungen

  • Ein Kompatibilitätsproblem mit Lifecycle 2.3 und neueren Lebenszyklusversionen 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 wurde veröffentlicht. Version 2.5.0-alpha04 enthält diese Commits.

API-Änderungen

Version 2.5.0-alpha03

23. Februar 2022

androidx.lifecycle:lifecycle-*:2.5.0-alpha03 wurde veröffentlicht. Version 2.5.0-alpha03 enthält diese Commits.

Neue Funktionen

  • Es wurden eine addCloseable() API und eine neue Konstruktor-Überlastung, mit der Sie eine oder mehrere Closeable-Objekte für den ViewModel, der geschlossen, wenn ViewModel gelöscht wird, ohne dass manuelle Arbeit in onCleared(). (I55ea0)
  • lifecycle-viewmodel bietet jetzt ein InitializerViewModelFactory, mit dem du Lambda zur Verarbeitung hinzufügen kannst bestimmte ViewModel-Klassen, wobei CreationExtras als primäre Daten verwendet wird Quelle. (If58fc, b/216687549)
  • lifecycle-viewmodel-compose bietet jetzt eine viewModel() API an, die verwendet eine Lambda-Factory zum Erstellen einer ViewModel-Instanz ohne das Erstellen einer benutzerdefinierten ViewModelProvider.Factory erforderlich ist. (I97fbb, b/216688927)

API-Änderungen

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

Verhaltensänderungen

  • Es wird versucht, Lifecycle.State von INITIALIZED nach DESTROYED gibt jetzt trotzdem immer einen IllegalStateException aus ob der Lifecycle einen Beobachter angehängt ist. (I7c390, b/177924329)
  • LifecycleRegistry löscht jetzt die Beobachter, wenn sie den Status DESTROYED erreichen. (I4f8dd, b/142925860)

Version 2.5.0-alpha02

9. Februar 2022

androidx.lifecycle:lifecycle-*:2.5.0-alpha02 wurde veröffentlicht. Version 2.5.0-alpha02 enthält diese Commits.

API-Änderungen

  • SavedStateHandle und SavedStateViewModelFactory wurden in Kotlin konvertiert. Dies hat die Null-Zulässigkeit der generischen Elemente in beiden Klassen verbessert. (Ib6ce2, b/216168263, I9647a, b/177667711)
  • Der Funktionsparameter LiveData switchMap kann haben jetzt eine Ausgabe, die Nullwerte zulässt. (I40396, b/132923666)
  • Die LiveData-KKT-Erweiterungen sind jetzt mit Anmerkungen @CheckResult, um zu erzwingen, dass das Ergebnis beim Aufrufen dieser Funktionen. (Ia0f05, b/207325134)

Verhaltensänderungen

  • SavedStateHandle speichert den Standardwert jetzt korrekt, wenn Für den angegebenen Schlüssel ist kein Wert vorhanden. (I1c6ce, b/178510877)

Fehlerkorrekturen

  • Von Lebenszyklus 2.4.1: lifecycle-process wurde in Abhängigkeit von Startup 1.1.1 aktualisiert, um sicherzustellen, dass Fehlerbehebungen, die verhindern, dass ProcessLifecycleInitializer keine StartupException auslöst, standardmäßig verfügbar sind. (Ib01df, b/216490724)
  • Es gibt jetzt eine verbesserte Fehlermeldung, wenn benutzerdefinierte AndroidViewModel-Kurse Folgendes enthalten: in falscher Reihenfolge und versuchen, eine ViewModel zu erstellen. (I340f7, b/177667711)
  • Sie können jetzt mithilfe von CreationExtras ein Ansichtsmodell mit der AndroidViewModelFactory erstellen, ohne eine Anwendung festzulegen. (I6ebef, b/217271656)

Version 2.5.0-alpha01

26. Januar 2022

androidx.lifecycle:lifecycle-*:2.5.0-alpha01 wurde veröffentlicht. Version 2.5.0-alpha01 enthält diese Commits.

ViewModel CreationExtras

Mit dieser Version legen wir den Grundstein für die Umstrukturierung des Aufbaus von ViewModel. Statt eines starren Satzes von abgeleiteten Klassen von ViewModelProvider.Factory, die jeweils zusätzliche Funktionen hinzufügen (und einen Application-Konstruktorparameter über AndroidViewModelFactory zulassen, einen SavedStateHandle-Konstruktorparameter über SavedStateViewModelFactory und AbstractSavedStateViewModelFactory usw. zulassen), bewegen wir uns nun auf eine Welt zustandsloser Fabriken um, die auf einem neuen Konzept namens CreationExtras basieren. (Ia7343, b/188691010, b/188541057)

Nach dieser Änderung nimmt ViewModelProvider keine direkten Aufrufe an die vorherige create(Class<T>)-Methode von ViewModelProvider.Factory mehr vor. Stattdessen wird eine neue Überlastung von create aufgerufen: create(Class<T>, CreationExtras). Das bedeutet, dass jede direkte Implementierung der ViewModelProvider.Factory-Instanz jetzt Zugriff auf jede dieser neuen CreationExtras hat:

  • ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY: Diese 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 das SavedStateRegistryOwner, das zum Erstellen dieses ViewModel verwendet wird.
  • SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY bietet Zugriff auf das ViewModelStoreOwner, das zum Erstellen dieses ViewModel verwendet wird.
  • SavedStateHandleSupport.DEFAULT_ARGS_KEY bietet Zugriff auf die Bundle der Argumente, die zum Erstellen einer SavedStateHandle verwendet werden sollen.

Diese Extras stehen standardmäßig zur Verfügung, wenn Sie Aktivität 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 von früheren Versionen dieser Bibliotheken verwendeten Erstellungspfad als auch den CreationExtras-Pfad zu unterstützen, der in Zukunft verwendet wird.

Mit diesen CreationExtras können Sie eine ViewModelProvider.Factory erstellen, die genau die benötigten Informationen an die einzelnen ViewModel weitergibt, ohne sich auf eine strenge Hierarchie von abgeleiteten Factory-Klassen zu verlassen:

class CustomFactory : ViewModelProvider.Factory {
    override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
        return when (modelClass) {
            HomeViewModel::class -> {
                // Get the Application object from extras
                val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY])
                // Pass it directly to HomeViewModel
                HomeViewModel(application)
            }
            DetailViewModel::class -> {
                // Create a SavedStateHandle for this ViewModel from extras
                val savedStateHandle = extras.createSavedStateHandle()
                DetailViewModel(savedStateHandle)
            }
            else -> throw IllegalArgumentException("Unknown class $modelClass")
        } as T
    }
}

Wir verwenden die Kotlin-Erweiterungsfunktion createSavedStateHandle() für CreationExtras aus SavedStateHandleSupport, um eine SavedStateHandle nur für das eine ViewModel zu erstellen, das sie benötigt. (Ia6654, b/188541057)

Benutzerdefinierte CreationExtras kann bereitgestellt werden, indem getDefaultViewModelCreationExtras() in ComponentActivity oder Fragment überschrieben wird. Dadurch stehen sie deinem benutzerdefinierten ViewModelProvider.Factory als unterstützte Injektion zur Verfügung. Diese Extras stehen deiner benutzerdefinierten Factory automatisch zur Verfügung, wenn du sie direkt mit ViewModelProvider oder den Kotlin-Eigenschaftserweiterungen by viewModels() und by activityViewModels() verwendest. (I79f2b, b/207012584, b/207012585, b/207012490)

Fehlerkorrekturen

  • Es wurde ein Problem behoben, durch das der Standardwert SavedStateHandle, werden nach der Verarbeitung auch wenn es speziell um den Tod und die Freizeit geht, aus SavedStateHandle entfernt. Als Konsequenz aus SavedStateHandle wird mit der Standardeinstellung und wiederhergestellte Werte zusammen, verwenden Sie die wiederhergestellten Werte als „Source of Truth“ zu definieren. (I53a4b)

Version 2.4

Version 2.4.1

9. Februar 2022

androidx.lifecycle:lifecycle-*:2.4.1 wurde veröffentlicht. Version 2.4.1 enthält diese Commits.

Fehlerkorrekturen

  • Aus Lebenszyklus 2.5.0-alpha01 rückportiert: Ein Problem wurde behoben, bei dem der Standardwert zur in SavedStateHandle werden nach der Verarbeitung auch wenn es speziell um den Tod und die Freizeit geht, aus SavedStateHandle entfernt. Als Konsequenz aus SavedStateHandle wird mit der Standardeinstellung und wiederhergestellte Werte zusammen, verwenden Sie die wiederhergestellten Werte als „Source of Truth“ zu definieren. (I53a4b)
  • lifecycle-process hängt jetzt von Androidx Startup 1.1.1 ab, wodurch eine Regression behoben wurde, bei der die Verwendung von ProcessLifecycleInitializer ein StartupException verursachen würde. (b/216490724)

Version 2.4.0

27. Oktober 2021

androidx.lifecycle:lifecycle-*:2.4.0 wurde 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.
  • androidx.lifecycle:lifecycle-viewmodel-compose Mediathek wurde hinzugefügt. Sie bietet viewModel() zusammensetzbare Funktionen und LocalViewModelStoreOwner.
    • Abweichende Änderung: ViewModelProvider wurde in Kotlin neu geschrieben. Die Methode ViewModelProvider.Factory.create lässt keine generischen Nullwerte mehr zu.
  • Neue Koroutines API wurde androidx.lifecycle:lifecycle-runtime-ktx hinzugefügt:
  • Lifecycle.repeatOnLifecycle: API, die einen Codeblock in einer Koroutine ausführt, wenn der Lebenszyklus mindestens in einem bestimmten Zustand ist. Der Block wird abgebrochen und neu gestartet, wenn der Lebenszyklus in den Zielzustand ein- und wieder entfernt wird.
  • Flow.flowWithLifecycle, eine API, die Werte aus dem vorgelagerten Ablauf ausgibt, wenn der Lebenszyklus mindestens in einem bestimmten Zustand ist.
  • DefaultLifecycleObserver“ wurde aus dem Ordner „lifecycle.lifecycle-common-java8“ in den Ordner „lifecycle.lifecycle-common“ verschoben. lifecycle.lifecycle-common-java8 bietet neben lifecycle.lifecycle-common keine zusätzlichen Funktionen mehr, daher kann die Abhängigkeit davon durch lifecycle.lifecycle-common ersetzt werden.
  • API für Nicht-Koroutinen von lifecycle-viewmodel-ktx wurde in das Modul lifecycle-viewmodel verschoben.
  • lifecycle-process verwendet jetzt androidx.startup, um ProcessLifecycleOwner zu initialisieren.

    Zuvor wurde dies von androidx.lifecycle.ProcessLifecycleOwnerInitializer durchgeführt.

    Wenn Sie tools:node="remove" verwendet haben, wird die ContentProvider zum Initialisieren verwendet in der Vergangenheit durchgeführt haben, dann müssen Sie stattdessen Folgendes tun.

     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities=\"${applicationId}.androidx-startup"
        android:exported="false"
        tools:node=\"merge">
        <!-- If you are using androidx.startup to initialize other components -->
        <meta-data
            android:name="androidx.lifecycle.ProcessLifecycleInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
     </provider>
    

    (oder)

     <!-- If you want to disable androidx.startup completely. -->
     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities="${applicationId}.androidx-startup"
        tools:node="remove">
     </provider>
    

Version 2.4.0-rc01

29. September 2021

androidx.lifecycle:lifecycle-*:2.4.0-rc01 wird ohne Änderungen gegenüber Lebenszyklus 2.4.0-beta01 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 wurde veröffentlicht. Version 2.4.0-beta01 enthält diese Commits.

API-Änderungen

  • @OnLifecycleEvent“ wurde eingestellt. LifecycleEventObserver oder Verwenden Sie stattdessen DefaultLifecycleObserver. (I5a8fa)
  • StandardLifecycleObserver wurde von androidx.lifecycle.lifecycle-common-java8 verschoben nach androidx.lifecycle.lifecycle-common. androidx.lifecycle.lifecycle-common-java8 bietet keine zusätzlichen Funktionen mehr zu androidx.lifecycle.lifecycle-common. Daher kann die Abhängigkeit davon durch androidx.lifecycle.lifecycle-common ersetzt werden. (I021aa)
  • Nicht-Coroutines-API von lifecycle-viewmodel-ktx wurde verschoben nach: Modul lifecycle-viewmodel. (I6d5b2)

Externer Beitrag

  • Vielen Dank, dmitrilc, dass du einen Typ in der ViewModel-Dokumentation korrigiert hast. (#221)

Version 2.4.0-alpha03

4. August 2021

androidx.lifecycle:lifecycle-*:2.4.0-alpha03 wurde veröffentlicht. Version 2.4.0-alpha03 enthält diese Commits.

API-Änderungen

  • Abweichende Änderung: ViewModelProvider wurde in Kotlin neu geschrieben. ViewModelProvider.Factory.create-Methode lässt keine Nullwerte mehr zu generisch sind. (I9b9f6)

Änderungen im Verhalten

  • Lifecycle.repeatOnLifecycle: block wird jetzt bei wiederholter Ausführung immer nacheinander aufgerufen. (Ibab33)

Externer Beitrag

  • Vielen Dank, chao2zhang, dass du die Code-Snippets in der repeatOnLifecycle-Dokumentation korrigiert hast. #205.

Version 2.4.0-alpha02

16. Juni 2021

androidx.lifecycle:lifecycle-*:2.4.0-alpha02 wurde veröffentlicht. Version 2.4.0-alpha02 enthält diese Commits.

Neue Funktionen

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

API-Änderungen

  • Die LifecycleOwner.addRepeatingJob API wird entfernt in Bevorzugung von Lifecycle.repeatOnLifecycle, die strukturierte Daten respektiert Parallelität und ist einfacher zu verstehen. (I4a3a8)
  • Machen Sie ProcessLifecycleInitializer öffentlich, damit andere androidx.startup.Initializers sie als Abhängigkeiten verwenden können. (I94c31)

Fehlerkorrekturen

  • Es wurde ein Problem mit der Lint-Prüfung NullSafeMutableLiveData behoben, wenn das Feld Modifikatoren enthält. (Nr. 147, b/183696616)
  • Ein weiteres Problem mit der Lint-Prüfung NullSafeMutableLiveData bei der Verwendung von generischen Elementen wurde behoben. (#161, b/184830263)

Externer Beitrag

Version 2.4.0-alpha01

24. März 2021

androidx.lifecycle:lifecycle-*:2.4.0-alpha01 wurde veröffentlicht. Version 2.4.0-alpha01 enthält diese Commits.

Änderungen im Verhalten

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

    Zuvor wurde dies von androidx.lifecycle.ProcessLifecycleOwnerInitializer durchgeführt.

    Wenn Sie tools:node="remove" verwendet haben, wird die ContentProvider zum Initialisieren verwendet in der Vergangenheit durchgeführt haben, dann müssen Sie stattdessen Folgendes tun.

     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities=\"${applicationId}.androidx-startup"
        android:exported="false"
        tools:node=\"merge">
        <!-- If you are using androidx.startup to initialize other components -->
        <meta-data
            android:name="androidx.lifecycle.ProcessLifecycleInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
     </provider>
    

    (oder)

     <!-- If you want to disable androidx.startup completely. -->
     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities="${applicationId}.androidx-startup"
        tools:node="remove">
     </provider>
    

API-Änderungen

  • Es wurde eine Flow.flowWithLifecycle API hinzugefügt, die mithilfe der Lifecycle.repeatOnLifecycle API Werte aus dem vorgelagerten Ablauf ausgibt, wenn der Lebenszyklus mindestens in einem bestimmten Zustand ist. Dies ist eine Alternative zur ebenfalls neuen LifecycleOwner.addRepeatinJob API. (I0f4cd)

Fehlerkorrekturen

  • Aus Lebenszyklus 2.3.1: Die Lint-Regel NonNullableMutableLiveData kann jetzt zwischen Feldvariablen mit unterschiedlicher Null-Zulässigkeit unterscheiden. (b/169249668)

Lebenszyklusansichtsmodell Compose-Version 1.0.0

Version 1.0.0-alpha07

16. Juni 2021

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07 wurde veröffentlicht. Version 1.0.0-alpha07 enthält diese Commits.

Nicht abwärtskompatible API-Änderungen

  • viewModel() nimmt jetzt eine Optionales ViewModelStoreOwner, um die Arbeit zu erleichtern mit anderen Inhabern als LocalViewModelStoreOwner. Sie können jetzt beispielsweise viewModel(navBackStackEntry) verwenden, um ein ViewModel abzurufen, das mit einem bestimmten Navigationsdiagramm verknüpft ist. (I2628d, b/188693123)

Version 1.0.0-alpha06

2. Juni 2021

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha06 wurde 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 wurde 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 wurde veröffentlicht. Version 1.0.0-alpha04 enthält diese Commits.

Abhängigkeitsänderungen

  • In dieser Version sind androidx.hilt:hilt-navigation-compose und androidx.navigation:navigation-compose zulässig um Abhängigkeiten von androidx.compose.compiler:compiler:1.0.0-beta04 und androidx.compose.runtime:runtime:1.0.0-beta04 zu synchronisieren. Bei 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 wurde veröffentlicht. Version 1.0.0-alpha03 enthält diese Commits.

API-Änderungen

  • LocalViewModelStoreOwner.current gibt jetzt Folgendes zurück: ViewModelStoreOwner, für die Nullwerte zulässig sind, um besser bestimmen zu können ob eine ViewModelStoreOwner in der aktuellen Zusammensetzung. APIs, die eine ViewModelStoreOwner erfordern, z. B. als viewModel() und NavHost, wird trotzdem eine Ausnahme ausgelöst. 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 wurde veröffentlicht. Version 1.0.0-alpha02 enthält diese Commits.

API-Änderungen

  • LocalViewModelStoreOwner hat jetzt eine provides-Funktion, die wird mit CompositionLocalProvider verwendet, wodurch die asProvidableCompositionLocal() API ersetzt wird. (I45d24)

Lifecycle-Viewmodel-Compose Version 1.0.0-alpha01

10. Februar 2021

androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01 wurde 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 Paket androidx.lifecycle.viewmodel.compose verschoben. (I7a374)

Version 2.3.1

Lebenszyklusversion 2.3.1

24. März 2021

androidx.lifecycle:lifecycle-*:2.3.1 wurde veröffentlicht. Version 2.3.1 enthält diese Commits.

Fehlerkorrekturen

  • Die Lint-Regel NonNullableMutableLiveData kann jetzt korrekt zwischen Feldvariablen mit unterschiedlicher Null-Zulässigkeit unterscheiden. (b/169249668)

Version 2.3.0

Version 2.3.0

10. Februar 2021

androidx.lifecycle:lifecycle-*:2.3.0 wurde veröffentlicht. Version 2.3.0 enthält diese Commits.

Große Änderungen seit Version 2.2.0

  • SavedStateHandle-Unterstützung für nicht parzierbare Klassen: SavedStateHandle unterstützt jetzt die verzögerte Serialisierung. Sie können damit setSavedStateProvider() für einen bestimmten Schlüssel aufrufen und eine SavedStateProvider bereitstellen, die einen Callback von saveState() erhält, wenn SavedStateHandle aufgefordert wird, ihren Status zu speichern. Weitere Informationen finden Sie unter Nicht Paketfähige Klassen speichern.
  • Erzwingung des Lebenszyklusverhaltens: <ph type="x-smartling-placeholder">
      </ph>
    • LifecycleRegistry erzwingt jetzt DESTROYED als Endzustand.
    • LifecycleRegistry überprüft jetzt, ob seine Methoden im Hauptthread aufgerufen werden. Dies war schon immer eine Voraussetzung für den Lebenszyklus von Aktivitäten, Fragmenten usw. Das Hinzufügen von Beobachtern aus Nicht-Hauptthreads führte zu schwer zu erkennenden Abstürzen in der Laufzeit. Bei LifecycleRegistry-Objekten, die Ihren eigenen Komponenten gehören, können Sie Prüfungen mit LifecycleRegistry.createUnsafe(...) explizit deaktivieren. Dann müssen Sie jedoch dafür sorgen, dass eine ordnungsgemäße Synchronisierung erfolgt, wenn von verschiedenen Threads aus auf diese LifecycleRegistry zugegriffen wird.
  • Lebenszyklusstatus- und Ereignishilfen: Lifecycle.Event wurden statische Hilfsmethoden von downFrom(State), downTo(State), upFrom(State) und upTo(State) zum Generieren von Event mit einer State und einer Übergangsrichtung hinzugefügt. Es wurde die Methode getTargetState() hinzugefügt, die die State bereitstellt, auf die der Lebenszyklus direkt nach der Event folgt.
  • withStateAtLeast: Es wurden Lifecycle.withStateAtLeast APIs hinzugefügt, die auf einen Lebenszyklusstatus warten und zum Zeitpunkt der Statusänderung einen nicht sperrenden Codeblock synchron ausführen und dann mit dem Ergebnis fortfahren. Diese APIs unterscheiden sich von den vorhandenen when*-Methoden, da sie die Ausführung von Sperrcode nicht zulassen und keinen benutzerdefinierten Dispatcher verwenden. (aosp/1326081)
  • ViewTree APIs: Mit den neuen APIs ViewTreeLifecycleOwner.get(View) und ViewTreeViewModelStoreOwner.get(View) können Sie LifecycleOwner und ViewModelStoreOwner mit einer View-Instanz abrufen. Sie müssen ein Upgrade auf Activity 1.2.0 und Fragment 1.3.0 sowie auf AppCompat 1.3.0-alpha01 oder höher ausführen, um dieses Feld korrekt auszufüllen. Die Kotlin-Erweiterungen findViewTreeLifecycleOwner und findViewTreeViewModelStoreOwner sind in lifecycle-runtime-ktx und lifecycle-viewmodel-ktx verfügbar.
  • Einstellung der Kotlin-Erweiterung LiveData.observe(): Die für die Lambda-Syntax erforderliche LiveData.observe()-Kotlin-Erweiterung wurde verworfen, da sie bei Verwendung von Kotlin 1.4 nicht mehr erforderlich ist.

Version 2.3.0-rc01

16. Dezember 2020

androidx.lifecycle:lifecycle-*:2.3.0-rc01 wurde 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 Schlüsseln, die mit set() und getLiveData() verwendet wurden, auch Schlüssel, die zuvor mit setSavedStateProvider() verwendet wurden. (aosp/1517919, b/174713653)

Externer Beitrag

Version 2.3.0-beta01

1. Oktober 2020

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

API-Änderungen

  • Die Kotlin-Erweiterung LiveData.observe() zur Verwendung der Lambda-Syntax ist mittlerweile veraltet, da sie ist bei Verwendung von Kotlin 1.4 nicht erforderlich. (I40d3f)

Fehlerkorrekturen

Änderungen an der Dokumentation

  • Der liveData-Builder und die asLiveData()-Dokumentation wurden aktualisiert und enthalten nun Details zum Ändern der angegebenen Zeitlimitwerte. (aosp/1122324)

Version 2.3.0-alpha07

19. August 2020

androidx.lifecycle:lifecycle-*:2.3.0-alpha07 wurde veröffentlicht. Version 2.3.0-alpha07 enthält diese Commits.

Fehlerkorrekturen

  • Ein Absturzproblem bei der NullSafeMutableLiveData Lint-Prüfung wurde behoben. (aosp/1395367)

Version 2.3.0-alpha06

22. Juli 2020

androidx.lifecycle:lifecycle-*:2.3.0-alpha06 wurde 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 Event mit einer State- und Übergangsrichtung zu generieren. Es wurde die Methode getTargetState() hinzugefügt, die die State bereitstellt, auf die der Lebenszyklus direkt nach der Event folgt. (I00887)
  • Es wurden Lifecycle.withStateAtLeast APIs hinzugefügt, die auf einen Lebenszyklusstatus warten und bei Statusänderungen einen nicht anhaltenden Codeblock synchron ausführen und dann fortsetzen mit dem Ergebnis. Diese APIs unterscheiden sich von den vorhandenen when*-Methoden, da sie die Ausführung von Sperrcode nicht zulassen und keinen benutzerdefinierten Dispatcher verwenden. (aosp/1326081)

Änderungen im Verhalten

  • LifecycleRegistry erzwingt jetzt DESTROYED als Endzustand. (I00887)
  • LifecycleRegistry überprüft jetzt, ob seine Methoden im Hauptthread aufgerufen werden. Dies war schon immer eine Voraussetzung für den Lebenszyklus von Aktivitäten, Fragmenten usw. Das Hinzufügen von Beobachtern aus Nicht-Hauptthreads führte zu schwer zu erkennenden Abstürzen in der Laufzeit. Bei LifecycleRegistry-Objekten, die Ihren eigenen Komponenten gehören, können Sie Prüfungen mit LifecycleRegistry.createUnsafe(...) explizit deaktivieren. Dann müssen Sie jedoch dafür sorgen, dass eine ordnungsgemäße Synchronisierung erfolgt, wenn von verschiedenen Threads aus auf dieses LifecycleRegistry zugegriffen wird (Ie7280, b/137392809).

Fehlerkorrekturen

  • Ein Absturz in NullSafeMutableLiveData wurde behoben. (b/159987480)
  • Ein ObsoleteLintCustomCheck für Lint-Prüfungen in Kombination mit lifecycle-livedata-core-ktx (und konkret NullSafeMutableLiveData) wurde korrigiert. (b/158699265)

Version 2.3.0-alpha05

24. Juni 2020

androidx.lifecycle:lifecycle-*:2.3.0-alpha05 wurde veröffentlicht. Version 2.3.0-alpha05 enthält diese Commits.

Fehlerkorrekturen

  • In LiveData werden nicht mehr auftretende Anfragen jetzt besser verarbeitet, sodass doppelte Aufrufe von onActive() oder onInactive() vermieden werden. (b/157840298)
  • Es wurde ein Problem 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 wurde veröffentlicht. Version 2.3.0-alpha04 enthält diese Commits.

Fehlerkorrekturen

  • Ein Absturz bei der NonNullableMutableLiveData Lint-Prüfung wurde behoben. (b/157294666)
  • Die NonNullableMutableLiveData-Lint-Prüfung deckt jetzt deutlich mehr Fälle ab, in denen ein null-Wert für eine MutableLiveData mit einem Nicht-Null-Typparameter festgelegt wurde. (b/156002218)

Version 2.3.0-alpha03

20. Mai 2020

androidx.lifecycle:lifecycle-*:2.3.0-alpha03 wurden freigegeben. Version 2.3.0-alpha03 enthält diese Commits.

Neue Funktionen

  • SavedStateHandle unterstützt jetzt verzögerte Serialisierung. Sie können damit setSavedStateProvider() für einen bestimmten Schlüssel aufrufen und einen SavedStateProvider angeben, der einen Callback von saveState() erhält, wenn SavedStateHandle aufgefordert wird, seinen Status zu speichern. (b/155106862)
  • Mit einer neuen ViewTreeViewModelStoreOwner.get(View) API können Sie die enthaltende ViewModelStoreOwner einer View-Instanz abrufen. Sie müssen ein Upgrade auf Activity 1.2.0-alpha05, Fragment 1.3.0-alpha05 und AppCompat 1.3.0-alpha01 ausführen, um dieses Feld korrekt auszufüllen. lifecycle-viewmodel-ktx wurde die Kotlin-Erweiterung findViewModelStoreOwner() hinzugefügt. (aosp/1295522)

Fehlerkorrekturen

  • Es wurde ein Problem behoben, durch das die im Lebenszyklus 2.3.0-alpha01 veröffentlichten Lint-Prüfungen MutableLiveData zusammen mit dem Artefakt lifecycle-livedata-core-ktx veröffentlicht wurden. (b/155323109)

Version 2.3.0-alpha02

29. April 2020

androidx.lifecycle:lifecycle-*:2.3.0-alpha02 wurde veröffentlicht. Version 2.3.0-alpha02 enthält diese Commits.

API-Änderungen

  • Mit SavedStateViewModelFactory können Sie jetzt einen Null-Application an seinen Konstruktor übergeben, um in Fällen zu unterstützen, in denen eine solche nicht verfügbar ist und keine Unterstützung für AndroidViewModel erforderlich ist. (aosp/1285740)

Fehlerkorrekturen

  • Die Kaltstartleistung wurde verbessert, indem auf Geräten mit API 28 und niedrigeren Versionen ein Fehler bei der Klassenüberprüfung vermieden wird. (aosp/1282118)

Version 2.3.0-alpha01

4. März 2020

androidx.lifecycle:lifecycle-*:2.3.0-alpha01 wurde veröffentlicht. Version 2.3.0-alpha01 enthält diese Commits.

Neue Funktionen

  • Mit einer neuen ViewTreeLifecycleOwner.get(View) API können Sie die enthaltende LifecycleOwner einer View-Instanz abrufen. Sie müssen ein Upgrade auf Aktivität 1.2.0-alpha01 und Fragment 1.3.0-alpha01 ausführen, um dieses Feld korrekt auszufüllen. In lifecycle-runtime-ktx ist eine findViewTreeLifecycleOwner Kotlin-Erweiterung verfügbar. (aosp/1182361, aosp/1182956)
  • Es wurde eine neue Lint-Prüfung hinzugefügt, die warnt, wenn Sie einen null-Wert für eine MutableLiveData festlegen, die in Kotlin als ungleich „null“ definiert wurde. Dies ist verfügbar, wenn Sie das Artefakt 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 Thread-sicheres, änderbares Lifecycle bereitstellt. (aosp/1242438)

Fehlerkorrekturen

  • Das Artefakt lifecycle-runtime hat jetzt einen eindeutigen Paketnamen. (aosp/1187196)

Version 2.2.0

ViewModel-Savedstate Version 2.2.0

5. Februar 2020

androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0 wurde veröffentlicht. Version 2.2.0 enthält diese Commits.

Der Wert für „Lifecycle ViewModel SavedState“ hat jetzt dieselbe Version wie andere Lebenszyklus-Artefakte. Das Verhalten von 2.2.0 ist mit dem Verhalten von 1.0.0 identisch.

Version 2.2.0

22. Januar 2020

androidx.lifecycle:lifecycle-*:2.2.0 wurde veröffentlicht. Version 2.2.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.1.0

  • Integration der Lebenszyklus-Koroutine: Das neue lifecycle-runtime-ktx-Artefakt fügt die Integration zwischen Lifecycle- und Kotlin-Koroutinen hinzu. Die Funktion „lifecycle-livedata-ktx“ wurde ebenfalls erweitert, damit du auch gemeinsame Routinen nutzen kannst. Weitere Informationen finden Sie unter Kotlin-Koroutinen mit Architekturkomponenten verwenden.
  • Einstellung von ViewModelProviders.of(): ViewModelProviders.of() wurde verworfen. Sie können Fragment oder FragmentActivity an den neuen ViewModelProvider(ViewModelStoreOwner)-Konstruktor übergeben, um dieselbe Funktionalität zu erhalten, wenn Sie Fragment 1.2.0 verwenden.
  • Einstellung von lifecycle-extensions-Artefakten: Da ViewModelProviders.of() oben eingestellt wurde, stellt dieser Release die Einstellung der letzten API in lifecycle-extensions dar. Dieses Artefakt sollte jetzt vollständig als veraltet betrachtet werden. Wir empfehlen dringend, die spezifischen Lebenszyklus-Artefakte zu verwenden, die Sie benötigen (z. B. lifecycle-service, wenn Sie LifecycleService verwenden, und lifecycle-process, wenn Sie ProcessLifecycleOwner verwenden), und nicht auf lifecycle-extensions, da es in Zukunft keine 2.3.0-Version von lifecycle-extensions geben wird.
  • Gradle Inkrementeller Annotationsprozessor: Der Annotationsprozessor des Lebenszyklus ist standardmäßig inkrementell. Wenn Ihre App in der Programmiersprache Java 8 geschrieben ist, können Sie stattdessen DefautLifecycleObserver verwenden. und wenn Es ist in der Programmiersprache Java 7 geschrieben. Sie können LifecycleEventObserver verwenden.

Version 2.2.0-rc03

4. Dezember 2019

androidx.lifecycle:lifecycle-*:2.2.0-rc03 wurde veröffentlicht. Version 2.2.0-rc03 enthält diese Commits.

Fehlerkorrekturen

  • Ein Fehler wurde behoben, der auftrat, wenn ein simuliertes ViewModel-Objekt in ViewModelStore gespeichert und später mit der Standard-Factory abgerufen wurde.
  • Die Verwendung von Dispatchers.Main.immediate in launchWhenCreated und ähnlichen Methoden wurde behoben, die während des entsprechenden Lebenszyklusereignisses synchron aufgerufen werden. (aosp/1156203)

Externe Beiträge

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

Abhängigkeitsänderungen

  • Lebenszykluserweiterungen hängen jetzt von Fragment 1.2.0-rc03 ab.

Version 2.2.0-rc02

7. November 2019

androidx.lifecycle:lifecycle-*:2.2.0-rc02 wurde veröffentlicht. Version 2.2.0-rc02 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde ein Fehler in der Proguard-Einrichtung der Bibliothek behoben, der Geräte mit API 28 oder höher betraf, wenn die Ziel-API niedriger als 29 war. (b/142778206)

Version 2.2.0-rc01

23. Oktober 2019

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

Fehlerkorrekturen

  • Es wurde ein Problem behoben, bei dem launchWhenCreated und verwandte Methoden einen Frame nach der zugehörigen Lebenszyklusmethode ausgeführt wurden, da Dispatchers.Main anstelle von Dispatchers.Main.immediate verwendet wurde. (aosp/1145596)

Externe Beiträge

  • Vielen Dank an Nicklas Ansman für den Beitrag zur Fehlerbehebung. (aosp/1145596)

Version 2.2.0-beta01

9. Oktober 2019

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

Fehlerkorrekturen

  • Es wurde eine im Lebenszyklus 2.2.0-alpha05 eingeführte Regression behoben, die in der Reihenfolge ProcessLifecycleOwner und die LifecycleOwner der Aktivität auf Android 10-Geräten gestartet und fortgesetzt wurde. (aosp/1128132)
  • Behebung einer im Lebenszyklus 2.2.0-alpha05 eingeführten Regression, die bei Verwendung von Version 2.0.0 oder 2.1.0 von lifecycle-process zu einer NullPointerException führte. (b/141536990)

Version 2.2.0-alpha05

18. September 2019

androidx.lifecycle:lifecycle-*:2.2.0-alpha05 wurde veröffentlicht. Version 2.2.0-alpha05 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde eine Race-Bedingung im gemeinsam genutzten LiveData Builder behoben. b/140249349

Version 2.2.0-alpha04

5. September 2019

androidx.lifecycle:lifecycle-*:2.2.0-alpha04 wurde 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 ihren Beitrag zu Dispatchers.Main.immediate. (aosp/1106073)

Version 2.2.0-alpha03

7. August 2019

androidx.lifecycle:lifecycle-*:2.2.0-alpha03 wurde veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Neue Funktionen

API-Änderungen

  • ViewModelProviders.of() wurde verworfen. Sie können Fragment oder FragmentActivity an den neuen ViewModelProvider(ViewModelStoreOwner)-Konstruktor übergeben, um dieselbe Funktionalität zu erhalten. (aosp/1009889)

Version 2.2.0-alpha02

2. Juli 2019

androidx.lifecycle:*:2.2.0-alpha02 wurde veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

API-Änderungen

  • LiveDataScope.initialValue wurde durch LiveDataScope.latestValue ersetzt, mit dem der aktuell ausgegebene Wert des liveData-Blocks erfasst wird.
  • Dem liveData-Builder wurde eine neue Überlastung hinzugefügt, die den timeout-Parameter als Typ Duration empfängt

Version 2.2.0-alpha01

7. Mai 2019

androidx.lifecycle:*:2.2.0-alpha01 wurde veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Neue Funktionen

  • In diesem Release werden neue Funktionen hinzugefügt, die Kotlin-Koroutinen für Lifecycle und LiveData unterstützen. Ausführliche Informationen 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 wurde 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 zum gespeicherten Status beitragen. Dieses Objekt kann im Konstruktor der Klasse ViewModel und der Factorys empfangen werden, die standardmäßig von Fragments bereitgestellt werden. AppCompatActivity fügt automatisch SavedStateHandle ein.
  • SummarySavedStateViewModelFactory wurde hinzugefügt. Damit kannst du benutzerdefinierte Factorys für 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 wurde veröffentlicht. Version 1.0.0-rc03 enthält diese Commits.

Abhängigkeitsänderungen

  • Der Lebenszyklus der ViewModel-Gespeicherte Statusangabe hängt jetzt vom Lebenszyklus 2.2.0-rc03 ab.

Viewmodel-Savedstate Version 1.0.0-rc02

7. November 2019

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc02 wurde veröffentlicht. Version 1.0.0-rc02 enthält diese Commits.

Abhängigkeitsänderungen

  • Abhängig vom Lebenszyklus 2.2.0-rc02.

ViewModel-SavedState Version 1.0.0-rc01

23. Oktober 2019

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01 wurde ohne Änderungen gegenüber 1.0.0-beta01 freigegeben. 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 wurde veröffentlicht. Version 1.0.0-beta01 enthält diese Commits.

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem der erste Zugriff auf ein SavedState ViewModel in Activity.onActivityResult() zu IllegalStateException führte. (b/139093676)
  • Ein IllegalStateException bei 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 wurde veröffentlicht. Version 1.0.0-alpha05 enthält diese Commits.

API-Änderungen

  • SavedStateViewModelFactory verlängert AbstractSavedStateViewModelFactory nicht mehr und SavedStateHandle wird nur für ViewModels erstellt, die es angefragt haben (aosp/1113593).

ViewModel-SavedState Version 1.0.0-alpha03

7. August 2019

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03 wurde veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Nicht abwärtskompatible Änderungen

ViewModel-SavedState Version 1.0.0-alpha02

2. Juli 2019

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha02 wurde veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Neue Funktionen

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

API-Änderungen

  • SavedStateVMFactory wurde in SavedStateViewModelFactory umbenannt.
  • AbstractSavedStateVMFactory wurde in AbstractSavedStateViewModelFactory umbenannt.

ViewModel-Savedstate Version 1.0.0-alpha01

13. März 2019

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01 wurde veröffentlicht. Das vollständige Commit-Log für diese erste Version finden Sie hier.

Neue Funktionen

  • ViewModels kann jetzt zu „Savedstate“ beitragen. Dazu verwenden Sie die neu eingeführte Viewmodel-Factory SavedStateVMFactory. 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 wurde für Fälle hinzugefügt, in denen ein Stream von Lebenszyklusereignissen benötigt wird. Es ist eine öffentliche API anstelle einer versteckten GenericLifecycleObserver-Klasse.
  • KTX-Erweiterungen für LiveData.observe- und Transformations.*-Methoden wurden hinzugefügt.
  • Transformations.distinctUntilChanged wurde hinzugefügt. Damit wird ein neues LiveData-Objekt erstellt, das erst dann einen Wert ausgibt, wenn der Quellwert LiveData geändert wurde.
  • Unterstützung für Koroutinen in ViewModels durch Hinzufügen der Erweiterungseigenschaft ViewModel.viewModelScope.

Version 2.1.0

5. September 2019

androidx.lifecycle:lifecycle-*:2.1.0 wurde 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 wurde ohne Änderungen gegenüber androidx.lifecycle:*:2.1.0-beta01 freigegeben. Die in dieser Version enthaltenen Commits finden Sie hier.

Version 2.1.0-beta01

7. Mai 2019

androidx.lifecycle:*:2.1.0-beta01 wurde veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Neue Funktionen

  • Die Lebenszyklen wurden auf die Betaversion umgestellt: APIs, die in früheren Alphaversionen eingeführt wurden, z. B. liveData-Erweiterungsfunktionen für Transformationen und Beobachtungen, die ViewModel-Initialisierung mit Property-Delegierung und andere sind stabil und ändern sich nicht.

Version 2.1.0-alpha04

3. April 2019

androidx.lifecycle:*:2.1.0-alpha04 wurde veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

API-Änderungen

  • Wichtige Änderung: Die zugrunde liegende API hinter by viewModels() und by activityViewModels() wurde so geändert, dass sie ViewModelStore direkt und nicht nur eine ViewModelStoreOwner unterstützt. (aosp/932932)

Version 2.1.0-alpha03

13. März 2019

androidx.lifecycle:*:2.1.0-alpha03 wurde veröffentlicht. Die vollständige Liste der in dieser Version enthaltenen Commits finden Sie hier.

API-Änderungen

  • "ViewModelProvider.KeyedFactory" wurde entfernt. Neben ViewModelProvider.Factory kam die zweite Oberfläche auch nicht gut mit neuen Funktionen zur Attributdelegierung in Kotlin by viewmodels {} zusammen. (aosp/914133)

Version 2.1.0-alpha02

30. Januar 2019

androidx.lifecycle 2.1.0-alpha02 wurde veröffentlicht.

API-Änderungen

  • LifecycleRegistry enthält jetzt eine setCurrentState()-Methode, die die mittlerweile verworfene Methode setState() ersetzt. (aosp/880715)

Fehlerkorrekturen

  • Es wurde ein Problem behoben, bei dem simulierte ViewModel-Instanzen abstürzten, wenn die enthaltene ViewModelStore gelöscht wurde. b/122273087

Version 2.1.0-alpha01

17. Dezember 2018

androidx.lifecycle 2.1.0-alpha01 wurde veröffentlicht.

Neue Funktionen

  • LifecycleEventObserver wurde für Fälle hinzugefügt, in denen ein Stream von Lebenszyklusereignissen benötigt wird. Es ist eine öffentliche API anstelle einer ausgeblendeten GenericLifecycleObserver-Klasse.
  • KTX-Erweiterungen für LiveData.observe- und Transformations.*-Methoden wurden hinzugefügt.
  • Methode Transformations.distinctUntilChanged wurde hinzugefügt. Dabei wird ein neues LiveData-Objekt erstellt, das erst dann einen Wert ausgibt, wenn der LiveData-Quellwert geändert wurde.
  • Koroutinen-Unterstützung in ViewModels: Erweiterungseigenschaft ViewModel.viewModelScope wurde hinzugefügt.
  • ViewModelProvider.KeyedFactory wurde hinzugefügt, eine Factory für ViewModels, die key und Class in der create-Methode empfängt.

Version 2.0.0

Version 2.0.0

21. September 2018

Lebenszyklus 2.0.0 wurde mit einer Fehlerkorrektur von 2.0.0-rc01 in ViewModel veröffentlicht.

Fehlerkorrekturen

  • Eine ViewModel-Proguard-Regel wurde behoben, durch die Konstruktoren fälschlicherweise entfernt wurden b/112230489.

Version 2.0.0-beta01

2. Juli 2018

Fehlerkorrekturen

  • Die LifecycleObserver-Proguard-Regel wurde korrigiert, sodass nur Implementierungen und keine Subschnittstellen beibehalten werden. b/71389427
  • Die ViewModel-Proguard-Regeln wurden korrigiert, um eine Verschleierung und Verkleinerung zu ermöglichen.

Versionen vor AndroidX

Für die folgenden Lebenszyklus-Versionen vor AndroidX sind die folgenden Abhängigkeiten eingeschlossen:

dependencies {
    def lifecycle_version = "1.1.1"

    // ViewModel and LiveData
    implementation "android.arch.lifecycle:extensions:$lifecycle_version"
    // alternatively - just ViewModel
    implementation "android.arch.lifecycle:viewmodel:$lifecycle_version" // For Kotlin use viewmodel-ktx
    // alternatively - just LiveData
    implementation "android.arch.lifecycle:livedata:$lifecycle_version"
    // alternatively - Lifecycles only (no ViewModel or LiveData).
    //     Support library depends on this lightweight import
    implementation "android.arch.lifecycle:runtime:$lifecycle_version"

    annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version" // For Kotlin use kapt instead of annotationProcessor
    // alternately - if using Java8, use the following instead of compiler
    implementation "android.arch.lifecycle:common-java8:$lifecycle_version"

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

    // optional - Test helpers for LiveData
    testImplementation "android.arch.core:core-testing:$lifecycle_version"
}

Version 1.1.1

21. März 2018

Nur eine kleine Änderung: android.arch.core.util.Function wurde von arch:runtime nach arch:common verschoben. Dadurch kann es ohne Laufzeitabhängigkeit verwendet werden, z.B. in paging:common unten.

lifecycle:common ist eine Abhängigkeit von lifecycle:runtime. Diese Änderung wirkt sich also nicht direkt auf lifecycle:runtime aus, sondern nur auf Module, die wie Paging direkt von lifecycle:common abhängen.

Version 1.1.0

22. Januar 2018

Änderungen an der Verpackung

Neue, viel kleinere Abhängigkeiten sind jetzt verfügbar:

  • android.arch.lifecycle:livedata:1.1.0
  • android.arch.lifecycle:viewmodel:1.1.0

API-Änderungen

  • Die veralteten LifecycleActivity und LifecycleFragment wurden entfernt. Bitte verwenden Sie FragmentActivity, AppCompatActivity oder unterstützen Fragment.
  • @NonNull Anmerkungen wurden ViewModelProviders und ViewModelStores hinzugefügt
  • Der ViewModelProviders-Konstruktor wurde verworfen. Verwenden Sie bitte direkt seine statischen Methoden
  • ViewModelProviders.DefaultFactory wurde eingestellt – bitte ViewModelProvider.AndroidViewModelFactory verwenden
  • Die statische Methode ViewModelProvider.AndroidViewModelFactory.getInstance(Application) wurde hinzugefügt, um eine statische Factory, die zum Erstellen von ViewModel- und AndroidViewModel-Instanzen geeignet ist.