Lebenszyklus

Lebenszyklusorientierte Komponenten führen Aktionen als Reaktion auf eine Änderung des Lebenszyklusstatus einer anderen Komponente aus, z. B. Aktivitäten und Fragmente. Mit diesen Komponenten können Sie besser organisierten und oft leichteren Code erstellen, der einfacher zu verwalten ist.

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

Artefakt Stabile Version Release Candidate Beta-Ausgabe Alphaversion
lifecycle-* 2.8.7 - - 2.9.0-alpha08
lifecycle-viewmodel-compose 2.8.7 - - 2.9.0-alpha08
Diese Bibliothek wurde zuletzt am 11. Dezember 2024 aktualisiert.

Abhängigkeiten deklarieren

Wenn Sie eine Abhängigkeit von Lifecycle hinzufügen möchten, müssen Sie Ihrem Projekt das Google Maven-Repository hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.

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

Kotlin

Groovy

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

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

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

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

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

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

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

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

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

Kotlin

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

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

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

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

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

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

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

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

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

Java

Groovy

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

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

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

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

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

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

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

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

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

Kotlin

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

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

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

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

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

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

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

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

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

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

Feedback

Ihr Feedback hilft uns, Jetpack zu verbessern. Bitte teilen Sie uns mit, wenn Sie neue Probleme feststellen oder Ideen zur Verbesserung dieser Bibliothek haben. Sehen Sie sich die vorhandenen Probleme in dieser Bibliothek an, bevor Sie ein neues erstellen. Sie können einem vorhandenen Problem Ihre Stimme geben, indem Sie auf die Schaltfläche mit dem Stern klicken.

Neues Problem erstellen

Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.

Version 2.9

Version 2.9.0-alpha08

11. Dezember 2024

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

Neue Funktionen

  • Fügen Sie ViewModelScenario.recreate hinzu, um einen Systemprozessabsturz zu simulieren, bei dem die zu testende ViewModel und alle zugehörigen Komponenten neu erstellt werden. (Id6a69, b/381063087)
  • LifecycleOwner- und ViewModelStoreOwner-Instanzen, die über die jeweiligen findViewTree APIs abgerufen werden, können jetzt über nicht übereinstimmende übergeordnete Elemente einer Ansicht aufgelöst werden, z. B. über ein ViewOverlay. Weitere Informationen zu überlappenden Ansichtsübergeordneten finden Sie in den Releasehinweisen von Core oder in der Dokumentation unter ViewTree.setViewTreeDisjointParent. (I800f4)

API-Änderungen

  • Namen und Paketorganisation an SavedStateRegistryOwnerDelegate (I8c135, b/376026744) anpassen

Fehlerkorrekturen

  • Diese Bibliothek verwendet jetzt JSpecify-Null-Anmerkungen, die sich auf den Typ beziehen. Kotlin-Entwickler sollten die folgenden Compilerargumente verwenden, um die korrekte Verwendung zu erzwingen: -Xjspecify-annotations=strict, -Xtype-enhancement-improvements-strict-mode (Ie4340, b/326456246)
  • Dokumentieren Sie die ViewModel.onCleared-Löschsequenz. (I586c7, b/363984116)

Version 2.9.0-alpha07

13. November 2024

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

Kompatibilität von Kotlin Multiplatform

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

Unterstützung für KotlinX-Serialisierung

  • Mit der Unterstützung der KotlinX-Serialisierung, die in SavedState 1.3.0-alpha05 hinzugefügt wurde, haben wir saved eingeführt, einen Lazy-Property-Delegierten, mit dem sich @Serializable-Klassen ganz einfach in einer SavedStateHandle speichern und diese Klassen nach dem Beenden und Neustarten des Prozesses automatisch wiederherstellen lassen. Hinweis: Der saved-Delegierte ist lausig und ruft die init-Lambda-Funktion nicht auf und speichert nichts in der SavedStateHandle, bis darauf zugegriffen wird. (I47a88, b/376026744)

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

API-Änderungen

  • Fügen Sie getMutableStateFlow zu SavedStateHandle hinzu, um MutableStateFlow zu erhalten. Diese neue Funktion ist exklusiv für Schlüssel und kann nicht mit getLiveData verwendet werden. Wenn Sie versuchen, beide zu verwenden, um auf denselben Status zuzugreifen, wird eine Ausnahme ausgelöst. (I04a4f, b/375408415)

Version 2.9.0-alpha06

30. Oktober 2024

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

Verhaltensänderungen

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

Fehlerkorrekturen

  • Lifecycle.eventFlow wird jetzt korrekt abgeschlossen, wenn Lifecycle = DESTROYED ist (I293b2, b/374043130)

Version 2.9.0-alpha05

16. Oktober 2024

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

Version 2.9.0-alpha04

2. Oktober 2024

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

Kotlin Multiplatform

  • Das lifecycle-viewmodel-savedstate-Modul ist jetzt KMP-kompatibel, damit APIs wie SavedStateHandle in einem zukünftigen Release im Common Source Set verfügbar gemacht werden können. (I503ed, I48764, b/334076622)

Version 2.9.0-alpha03

18. September 2024

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

Fehlerkorrekturen

  • Lifecycle 2.8.6: Der Lint-Fehler NullSafeMutableLiveData wurde verbessert, um die Unterstützung für Smartcasts zu optimieren und Fehlalarme zu vermeiden. (85fed6, b/181042665)

Abhängigkeitsupdates

Version 2.9.0-alpha02

4. September 2024

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

Fehlerkorrekturen

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

Externer Beitrag

  • Verschieben Sie androidx.compose.ui.platform.LocalLifecycleOwner in den gemeinsamen Quellsatz (KMP). Vielen Dank an Ivan Matkov von JetBrains für den Beitrag. (8cd5d03)
  • Lebenszyklus 2.8.5: Der Erweiterungsdelegat „SavedStateHandle.saveable“ unterstützt jetzt Nullwerte. Vielen Dank an Roman Kalukiewicz für den Beitrag. (0d78ea6)

Version 2.9.0-alpha01

7. August 2024

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

Kotlin Multiplatform

  • lifecycle-testing ist jetzt KMP-kompatibel. (Iea41e)
  • Unterstützung für linuxArm64-Kotlin-Multiplatform-Ziel hinzugefügt (I139d3, b/338268719)

Neue Funktionen

  • Es ist ein neues androidx.lifecycle:lifecycle-viewmodel-testing-KMP-Artefakt verfügbar, das eine ViewModelScenario-Klasse zum Testen von ViewModels im Isolationsmodus bietet. Es wird onCleared (alle Plattformen) und SavedStateHandle (nur Android) unterstützt. (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 Factory-Funktion CreationExtras.Key() hinzu, um das Erstellen anonymer CreationExtras.Key-Objekte zu vereinfachen. (I970ee)
  • CreationExtras enthält jetzt map-ähnliche Operatorüberladungen, die eine idiomatische Manipulation von Inhalten in Kotlin ermöglichen. Sie ermöglicht die Verwendung von in, += und + mit CreationExtras. (Ib4353)
  • CreationExtras implementiert jetzt die Methoden equals, hashCode und toString. (Ib4353)
  • NewInstanceFactory ist jetzt für JVM-Desktop- und Android-Ziele verfügbar. (d3d0892)
  • Inline-Erweiterungseigenschaft, um die zugrunde liegende Anwendung in der Kotlin-Version 2.0 (I39df2) sicher freizugeben

Fehlerkorrekturen

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

Version 2.8

Version 2.8.7

30. Oktober 2024

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

API-Änderungen

  • androidx.compose.ui.platform.LocalLifecycleOwner ist jetzt im Common Source Set (KMP) verfügbar. (6a3f5b3)
  • lifecycle-runtime-compose: desktop-Artefakte wurden entfernt und -jvmStubs- und -linuxx64Stubs-Artefakte hinzugefügt. Keines dieser Ziele ist zur Verwendung vorgesehen. Sie dienen als Platzhalter für die Arbeit mit Jetbrains Compose. (6a3f5b3)

Version 2.8.6

18. September 2024

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

Fehlerkorrekturen

  • Der Lint-Fehler NullSafeMutableLiveData wurde verbessert, um die Unterstützung für intelligente Übergaben zu verbessern und Fehlalarme zu vermeiden. (85fed6, b/181042665)

Abhängigkeitsupdates

Version 2.8.5

4. September 2024

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

Fehlerkorrekturen

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

Externer Beitrag

  • Der SavedStateHandle.saveable-Erweiterungsdelegat unterstützt jetzt nullwertige Werte. Vielen Dank an Roman Kalukiewicz für den Beitrag. (0d78ea6)

Version 2.8.4

24. Juli 2024

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

Fehlerkorrekturen

  • LiveData.asFlow() verarbeitet jetzt korrekt Fälle, in denen der zurückgegebene Ablauf sofort abgeschlossen wird, nachdem ein Wert empfangen wurde, der bereits auf der LiveData festgelegt wurde (z. B. bei Verwendung von take(1)). (I9c566)
  • Der Abschluss von Lifecycle*Effect ist jetzt idempotent. Wenn onStopOrDispose aufgrund eines Lifecycle-Stopps aufgerufen wurde, wird er bei der Entsorgung nicht noch einmal aufgerufen, es sei denn, der Lifecycle kehrt wieder zu STARTED zurück. (I5f607, b/352364595)

Version 2.8.3

1. Juli 2024

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

Fehlerkorrekturen

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

Version 2.8.2

12. Juni 2024

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

Fehlerkorrekturen

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

Version 2.8.1

29. Mai 2024

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

Fehlerkorrekturen

  • lifecycle-viewmodel-compose hat jetzt nur noch eine gemeinsame Abhängigkeit von compose-runtime. Die gemeinsame Abhängigkeit von compose-ui wurde entfernt. Das Android-Artefakt behält aus Gründen der Kompatibilität seine compose-ui bei. (aosp/3079334, b/339562627)
  • Bei der saveable-Integration von ViewModel mithilfe von Property-Delegierten wird jetzt der Klassenname als Teil des automatisch generierten Schlüssels verwendet. So werden Konflikte vermieden, wenn mehrere Klassen dieselbe SavedStateHandle verwenden. (aosp/3063463)

Version 2.8.0

14. Mai 2024

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

Wichtige Änderungen seit Version 2.7.0

  • LocalLifecycleOwner wurde von der Compose-Benutzeroberfläche zu lifecycle-runtime-compose verschoben, damit die Compose-basierten Hilfs-APIs auch außerhalb der Compose-Benutzeroberfläche verwendet werden können.
  • Das lifecycle-runtime-compose-Artefakt enthält jetzt die dropUnlessResumed- und dropUnlessStarted-APIs, mit denen Sie Klicks oder andere Ereignisse aufzeichnen können, die auch nach dem Absinken des LifecycleOwner unter den angegebenen Lifecycle.State auftreten. Dies kann beispielsweise mit Navigation Compose verwendet werden, um Klickereignisse zu vermeiden, nachdem der Übergang zu einem anderen Bildschirm bereits begonnen hat: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) }
  • ViewModel.viewModelScope ist jetzt ein überschreibbarer Konstruktorparameter, mit dem Sie Ihren eigenen Dispatcher und SupervisorJob() einschleusen oder den Standardwert mithilfe der in runTest verfügbaren backgroundScope überschreiben können. (I2817c, b/264598574)

    class MyViewModel(
      // Make Dispatchers.Main the default, rather than Dispatchers.Main.immediate
      viewModelScope: CoroutineScope = Dispatchers.Main + SupervisorJob()
    ) : ViewModel(viewModelScope) {
      // Use viewModelScope as before, without any code changes
    }
    
    // Allows overriding the viewModelScope in a test
    fun Test() = runTest {
      val viewModel = MyViewModel(backgroundScope)
    }
    
  • ViewModel wurde in Kotlin neu geschrieben und verwendet jetzt AutoClosable anstelle von Closeable. Es wird jetzt unterstützt, AutoCloseable-Objekte mit einer key hinzuzufügen, über die sie über getCloseable() abgerufen werden können.

  • Der Aufruf von LifecycleStartEffect und LifecycleResumeEffect ohne Schlüssel führt jetzt zu einem Fehler. Dabei wird dieselbe Konvention wie bei der DisposableEffect API angewendet, die diese APIs spiegeln.

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

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

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

Lebenszyklus der Kotlin Multiplatform-Kompatibilität

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

Betroffene Artefakte:

  • lifecycle-common verlagert die meisten APIs zu common und unterstützt neben Android auch jvm und iOS.
  • lifecycle-runtime verlagert die meisten APIs zu common und unterstützt neben Android auch jvm und iOS.
  • lifecycle-runtime-ktx ist jetzt leer, da alle APIs in lifecycle-runtime verschoben wurden.
  • lifecycle-runtime-compose verlagert alle APIs zu common und stellt ein Android-Artefakt bereit, das der Multiplattformunterstützung von androidx.compose entspricht.

ViewModel Kotlin Multiplatform Compatibility

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

Aufgrund dieser Änderung gibt es für Methoden wie die auf ViewModelProvider, die eine java.lang.Class<T> als Argument erwarteten, jetzt eine entsprechende Methode, die eine kotlin.reflect.KClass<T> als Argument erwartet.

Die Binärkompatibilität unter Android wurde beibehalten. Es gibt jedoch einige bemerkenswerte Änderungen, wenn die Android API-Oberfläche mit der gemeinsamen API-Oberfläche verglichen wird:

  • Das Erstellen einer ViewModelProvider-Instanz erfolgt jetzt über die ViewModelProvider.create()-Methoden, anstatt den Konstruktor direkt aufzurufen.
  • ViewModelProvider.NewInstanceFactory und ViewModelProvider.AndroidViewModelFactory sind nur auf Android-Geräten verfügbar.
    • Bei benutzerdefinierten Fabriken wird empfohlen, ViewModelProvider.Factory zu erweitern und die create-Methode zu verwenden, die eine CreationExtras annimmt, oder die viewModelFactory Kotlin DSL.
  • Die Verwendung von ViewModelProvider ohne benutzerdefinierte Fabrik auf Nicht-JVM-Plattformen führt zu einer UnsupportedOperationException. Auf JVM-Plattformen wird die Kompatibilität durch Verwendung des ViewModel-Konstruktors ohne Argumente beibehalten, wenn keine benutzerdefinierte Factory angegeben wird.
  • viewModelScope wird auf Plattformen, auf denen Dispatchers.Main nicht verfügbar ist, auf EmptyCoroutineContext zurückgesetzt (z.B. Linux).

Betroffene Artefakte:

  • lifecycle-viewmodel verlagert die meisten APIs zu common und unterstützt neben Android auch jvm und iOS.
  • lifecycle-viewmodel-ktx ist jetzt leer, da alle APIs in lifecycle-viewmodel verschoben wurden.
  • lifecycle-viewmodel-compose verlagert alle APIs zu common und stellt ein Android-Artefakt bereit, das der Multiplattformunterstützung von androidx.compose entspricht.

Verhaltensänderungen

  • Bei InitializerViewModelFactory (einschließlich der viewModelFactory-Builderfunktion) wird jetzt eine IllegalArgumentException geworfen, 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 wird veröffentlicht. Version 2.8.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem das Baseline-Profil für lifecycle-common-Kurse nicht richtig verpackt wurde. Diese werden jetzt im AAR-File lifecycle-runtime verpackt. (aosp/3038274, b/322382422)
  • Eine unbeabsichtigte Änderung der Reihenfolge, in der AutoCloseable-Instanzen, die an ein ViewModel angehängt sind, gelöscht werden, wurde behoben. Die vorherige Reihenfolge addCloseable(String, AutoCloseable), dann addClosable(AutoCloseable), dann onCleared() wurde wiederhergestellt. (aosp/3041632)
  • Das Standardverhalten beim Erstellen von viewModelScope für native und JVM-Desktopumgebungen wurde verbessert. (aosp/3039221)

Externer Beitrag

  • Vielen Dank an Victor Kropp für die Verbesserung der Prüfung des Hauptthreads auf JVM Desktop. (aosp/3037116)

Version 2.8.0-beta01

17. April 2024

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

Neue Funktionen

  • Das lifecycle-runtime-compose-Artefakt ist jetzt mit Kotlin Multiplatform kompatibel. Der Code wird in common verschoben und es wird ein Android-Artefakt bereitgestellt, das der Multiplattform-Unterstützung für androidx.compose entspricht. (If7a71, I4f4a0, b/331769623)

Version 2.8.0-alpha04

3. April 2024

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

Neue Funktionen

  • Das lifecycle-viewmodel-compose-Artefakt ist jetzt mit Kotlin Multiplatform kompatibel. Der Code wird in common verschoben und es wird ein Android-Artefakt bereitgestellt, das der plattformübergreifenden Unterstützung von androidx.compose entspricht. Um dieser Änderung Rechnung zu tragen, akzeptiert die composable viewModel-Methode jetzt zusätzlich zu einer java.lang.Class auch eine KClass. (b/330323282)

Fehlerkorrekturen

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

Update der Abhängigkeiten

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

Version 2.8.0-alpha03

20. März 2024

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

Neue Funktionen

  • ViewModel.viewModelScope ist jetzt ein überschreibbarer Konstruktorparameter, mit dem Sie Ihren eigenen Dispatcher und SupervisorJob() einschleusen oder den Standardwert mithilfe der in runTest verfügbaren backgroundScope überschreiben können. (I2817c, b/264598574)

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

Kompatibilität von Kotlin Multiplatform

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

Um dieser Änderung Rechnung zu tragen, gibt es für Methoden wie die auf ViewModelProvider, die eine java.lang.Class<T> als Argument erwarteten, jetzt eine entsprechende Methode, die eine kotlin.reflect.KClass<T> erwartet.

Die Binärkompatibilität unter Android wurde beibehalten. Es gibt jedoch einige bemerkenswerte Änderungen, wenn die Android API-Oberfläche mit der gemeinsamen API-Oberfläche verglichen wird:

  • Das Erstellen einer ViewModelProvider-Instanz erfolgt jetzt über die ViewModelProvider.create()-Methoden, anstatt den Konstruktor direkt aufzurufen.
  • ViewModelProvider.NewInstanceFactory und ViewModelProvider.AndroidViewModelFactory sind nur auf Android-Geräten verfügbar.
    • Bei benutzerdefinierten Fabriken wird empfohlen, ViewModelProvider.Factory zu erweitern und die create-Methode zu verwenden, die eine CreationExtras annimmt, oder die viewModelFactory Kotlin DSL.
  • Die Verwendung von ViewModelProvider ohne benutzerdefinierte Fabrik auf Nicht-JVM-Plattformen führt zu einer UnsupportedOperationException. Auf JVM-Plattformen wird die Kompatibilität durch Verwendung des ViewModel-Konstruktors ohne Argumente beibehalten, wenn keine benutzerdefinierte Factory angegeben wird.
  • viewModelScope wird auf Plattformen, auf denen Dispatchers.Main nicht verfügbar ist, auf EmptyCoroutineContext zurückgesetzt (z.B. Linux).

Verhaltensänderungen

  • Bei InitializerViewModelFactory (einschließlich der viewModelFactory-Builderfunktion) wird jetzt eine IllegalArgumentException geworfen, wenn bereits eine initializer mit derselben clazz: KClass<VM : ViewModel> hinzugefügt wurde. (Ic3a36)

Fehlerkorrekturen

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

Externer Beitrag

  • LocalLifecycleOwner wurde von der Compose-Benutzeroberfläche zu lifecycle-runtime-compose verschoben, damit die Compose-basierten Hilfs-APIs außerhalb der Compose-Benutzeroberfläche verwendet werden können. Vielen Dank an Jake Wharton für den Beitrag. (I6c41b, b/328263448)

Version 2.8.0-alpha02

21. Februar 2024

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

Neue Funktionen

  • Die APIs dropUnlessResumed und dropUnlessStarted wurden hinzugefügt. Mit diesen APIs können Sie Klicks oder andere Ereignisse erfassen, die auch dann auftreten, wenn die LifecycleOwner unter den angegebenen Lifecycle.State gefallen ist. Dies kann beispielsweise mit Navigation Compose verwendet werden, um Klickereignisse zu vermeiden, nachdem der Übergang zu einem anderen Bildschirm bereits begonnen hat: onClick: () -> Unit = dropUnlessResumed { navController.navigate(NEW_SCREEN) } (Icba83, b/317230685)

Kotlin-Conversions

  • ViewModel ist jetzt in Kotlin geschrieben (I16f26, b/214568825)
  • Die lifecycle-viewmodel-ktx-Kotlin-Erweiterungen wurden in das Basismodul für den Lebenszyklus verschoben. (Id787b, b/274800183)
  • Die lifecycle-runtime-ktx-Kotlin-Erweiterungen wurden in das Basismodul für den Lebenszyklus verschoben. (Ic3686, b/274800183)
  • Die lifecycle-livedata-core-ktx-Kotlin-Erweiterungen wurden in das Basismodul für den Lebenszyklus verschoben. (I54a3d, b/274800183)

Kompatibilität von Kotlin Multiplatform

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

API-Änderungen

  • Der Aufruf von LifecycleStartEffect und LifecycleResumeEffect ohne Schlüssel führt jetzt zu einem Fehler. Dabei wird dieselbe Konvention wie bei der DisposableEffect API angewendet, die diese APIs spiegeln. (Ib0e0c, b/323518079)
  • Für ViewModel wird jetzt AutoCloseable anstelle von Closeable verwendet. Das ist eine abwärtskompatible Änderung. (I27f8e, b/214568825)
  • LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) wurde zugunsten von LiveData.toPublisher(lifecycleOwner) verworfen. (Iabe29, b/262623005)

Externer Beitrag

  • Vielen Dank an Ivan Matkov von Jetbrains, der uns bei der Umstellung von Lifecycle auf Kotlin Multiplatform unterstützt hat. (aosp/2926690, I0c5ac, If445d)

Version 2.8.0-alpha01

24. Januar 2024

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

Neue Funktionen

  • ViewModel unterstützt jetzt das Hinzufügen von Closeable-Objekten mit einer key, über die sie über getCloseable() abgerufen werden können. (I3cf63)

Version 2.7

Version 2.7.0

10. Januar 2024

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

Wichtige Änderungen seit Version 2.6.0

  • TestLifecycleOwner enthält jetzt eine Pausierungsfunktion setCurrentState(), die dafür sorgt, dass die Statusänderung und alle LifecycleObserver-Callbacks abgeschlossen sind, bevor die Funktion zurückkehrt. Anders als beim direkten Festlegen der currentState-Property wird hier runBlocking nicht verwendet. Daher kann die Funktion auch in einer Coroutine wie der von runTest verwendet werden.
  • Die LiveData-Erweiterungen von map und switchMap spiegeln jetzt das Verhalten von distinctUntilChanged wider: Wenn für LiveData ein value festgelegt ist, wird die map-/switchMap-Funktion sofort aufgerufen, um den value des zurückgegebenen LiveData zu füllen. So wird sichergestellt, dass der Anfangswert im Rahmen der ersten Zusammensetzung festgelegt wird (bei Verwendung mit observeAsState()). Das Beobachtungsverhalten ändert sich dadurch jedoch nicht. Aktualisierte Werte aus der Quelle LiveData werden weiterhin erst angewendet, wenn Sie mit der Beobachtung der LiveData beginnen.
  • In dieser Version wurde ein Problem behoben, bei dem benutzerdefinierte Parcelable-Klassen nach dem Beenden und Neustarten des Prozesses nicht richtig wiederhergestellt wurden.SavedStateHandle Da die Typinformationen vom Android-Framework verloren gehen, erfordern Arrays von benutzerdefinierten Parcelables zusätzliche Arbeit (manuelles Erstellen eines typisierten Arrays des richtigen Typs). In der Dokumentation zu get, getLiveData und getStateFlow wird diese Einschränkung jetzt ausdrücklich erwähnt.
  • Die ProGuard-Aufbewahrungsregeln, die mit LifecycleObserver verknüpft sind, wurden entfernt. Das bedeutet, dass für proguardierten Code, in dem APIs über Reflection verwendet werden sollen (z. B. mit der seit langem veralteten @OnLifecycleEvent-Anmerkung), eigene Regeln für die Beibehaltung für den jeweiligen Anwendungsfall angegeben werden müssen.

Beobachtbarkeit von Lebenszyklusereignissen

  • Alternativ zur Verwendung einer LifecycleEventObserver können Sie jetzt eine Flow von Lifecycle.Event über die Erweiterungsmethode Lifecycle.asFlow() beobachten.
  • Jetpack Compose-Nutzer können jetzt LifecycleEventEffect verwenden, um Compose-Nebeneffekte basierend auf Lifecycle.Event auszuführen.
@Composable
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
    viewModel.refreshData()
  }
  // …
}
  • Jetpack Compose-Nutzer können LifecycleStartEffect und LifecycleResumeEffect verwenden, um Ereignispaare zu verarbeiten – gestartet zu gestoppt bzw. fortgesetzt zu pausiert. Diese API entspricht der in DisposableEffect und eignet sich für Fälle, in denen die Änderung, die beim Steigen des Status vorgenommen wird, beim Sinken des Status rückgängig gemacht werden muss.
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleStartEffect(viewModel) {
    val timeTracking = viewModel.startTrackingTimeOnScreen()
    onStopOrDispose {
      timeTracking.stopTrackingTimeOnScreen()
    }
  }
  // …
}

Weitere Informationen finden Sie unter Code bei Lebenszyklusereignissen ausführen.

Beobachtbarkeit des Lebenszyklusstatus

  • Der aktuelle Lifecycle.State kann jetzt über das Lifecycle.currentStateFlow-Attribut beobachtet werden. Dieses gibt einen StateFlow zurück, dessen value der aktuelle Lifecycle.State ist.
  • Jetpack Compose-Nutzer können die Lifecycle.currentStateAsState()-Erweiterung verwenden, um Lifecycle.State direkt als Compose State bereitzustellen. Dies entspricht lifecycle.currentStateFlow.collectAsState() und ist eine kürzere Alternative.

Weitere Informationen finden Sie unter Lebenszyklusereignisse mithilfe von Abläufen erfassen.

Version 2.7.0-rc02

13. Dezember 2023

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

Fehlerkorrekturen

  • Ein Problem wurde behoben, durch das benutzerdefinierte Parcelable-Klassen nach dem Beenden und Neustarten des Prozesses nicht richtig wiederhergestellt wurden.SavedStateHandle Da die Typinformationen vom Android-Framework verloren gehen, erfordern Arrays von benutzerdefinierten Parcelables zusätzliche Arbeit (manuelles Erstellen eines typisierten Arrays des richtigen Typs). In der Dokumentation zu get, getLiveData und getStateFlow wird diese Einschränkung jetzt ausdrücklich erwähnt. (I0b55a)

Version 2.7.0-rc01

15. November 2023

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

Fehlerkorrekturen

  • LifecycleStartEffect und LifecycleResumeEffect löschen und erstellen den Effektblock jetzt richtig, wenn sich die LifecycleOwner ändert. (Ia25c6)

Version 2.7.0-beta01

1. November 2023

androidx.lifecycle:lifecycle-*:2.7.0-beta01 wird ohne Änderungen veröffentlicht. Version 2.7.0-beta01 enthält diese Commits.

  • Eine Betaversion wurde aktualisiert. Es gibt keine größeren Änderungen an dieser Releaseversion.

Version 2.7.0-alpha03

18. Oktober 2023

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

Neue Funktionen

  • lifecycle-runtime-testing enthält jetzt eine neue Lint-Prüfung, um zu verhindern, dass die Lifecycle.State der TestLifecycleOwner über das Feld currentState festgelegt wird, wenn sich der Code in einer Coroutine befindet. Die Lint-Prüfung schlägt jetzt die Aussetzung von setCurrentState vor, wodurch Lifecycle.State ohne Blockierung festgelegt werden kann. (Icf728, b/297880630)

Fehlerkorrekturen

  • Es wurde ein Problem mit LiveData.switchMap behoben, bei dem die Rückgabe derselben LiveData-Instanz sowohl beim ersten als auch beim nachfolgenden Aufruf verhinderte, 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 wird veröffentlicht. Version 2.7.0-alpha02 enthält diese Commits.

Neue Funktionen

  • TestLifecycleOwner enthält jetzt die Pausierungsfunktion setCurrentState(), mit der Nutzer TestLifecycleOwner innerhalb einer Coroutine wie der von runTest verwenden können. (I329de, b/259344129)

API-Änderungen

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

Verhaltensänderungen

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

Fehlerkorrekturen

  • Lifecycle 2.6.2: Ein Problem wurde behoben, durch das SavedStateHandle nach dem Beenden des Prozesses nicht korrekt wiederhergestellt wurde, wenn der Status wiederhergestellt, save() aufgerufen wurde, ohne den Status im übergeordneten SavedStateRegistry zu speichern, und der Status dann noch einmal wiederhergestellt wurde. Dadurch wird die Interaktion zwischen rememberSaveable und NavHost von Navigation Compose korrigiert. (aosp/2729289)

Version 2.7.0-alpha01

26. Juli 2023

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

API-Änderungen

  • Lifecycle.State ist jetzt über Lifecycle.currentStateFlow über Compose-beobachtbar. Lifecycle.currentStateFlow gibt eine StateFlow zurück, 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 auf der Grundlage von 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 SideEffect-Kompositionen auf der Grundlage von Lifecycle.Event auszuführen. (Ic9794, b/235529345)
  • Die Lifecycle.collectAsState()-Erweiterung wurde hinzugefügt, um Lifecycle.State direkt als „Schreiben“ State anzuzeigen. Dies entspricht lifecycle.currentStateFlow.collectAsState() und ist eine kürzere Alternative. (I11015, b/235529345)

Fehlerkorrekturen

  • Die LiveData.distinctUntilChanged()-Erweiterung setzt jetzt den value der zurückgegebenen LiveData, wenn für die vorherige LiveData ein Wert festgelegt wurde. Das Beobachtungsverhalten ändert sich dadurch nicht. Aktualisierte Werte aus der Quelle LiveData werden erst dann angewendet, wenn Sie mit der Beobachtung des von distinctUntilChanged() zurückgegebenen LiveData beginnen. (Ib482f)
  • Die ProGuard-Aufbewahrungsregeln, die mit LifecycleObserver verknüpft sind, wurden entfernt. Das bedeutet, dass für proguardierten Code, der APIs über Reflection verwenden soll, eigene Regeln für den jeweiligen Anwendungsfall festgelegt werden müssen. (Ia12fd)

Version 2.6

Version 2.6.2

6. September 2023

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

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem SavedStateHandle nach dem Prozesstod nicht korrekt wiederhergestellt wurde, wenn der Status wiederhergestellt, save() aufgerufen wurde, ohne den Status im übergeordneten SavedStateRegistry zu speichern, und der Status dann noch einmal wiederhergestellt wurde. Dadurch wird die Interaktion zwischen rememberSaveable und NavHost von Navigation Compose korrigiert. (aosp/2729289)

Version 2.6.1

22. März 2023

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

Abhängigkeitsupdates

Version 2.6.0

8. März 2023

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

Wichtige Änderungen seit Version 2.5.0

  • LiveData enthält jetzt eine neue isInitialized-Eigenschaft, die angibt, ob für LiveData jemals ein expliziter Wert festgelegt wurde. So können Sie unterscheiden, ob liveData.value null zurückgibt, weil noch kein Wert festgelegt wurde, oder ob ein expliziter null-Wert festgelegt wurde.
  • MediatorLiveData enthält jetzt einen Konstruktor zum Festlegen eines Anfangswerts.
  • Es wurde eine neue Erweiterung für StateFlow und Flow von collectAsStateWithLifecycle() hinzugefügt, die Daten aus Abläufen erfasst und den aktuellen Wert auf Lifecycle-konforme Weise als „Compose State“ darstellt.
  • Lifecycle.launchWhenX- und Lifecycle.whenX-Methoden wurden eingestellt, da die Verwendung eines Pausierungs-Dispatchers in einigen Fällen zu verschwendetem Ressourcenverbrauch führen kann. Wir empfehlen, Lifecycle.repeatOnLifecycle zu verwenden. Weitere Informationen dazu, warum das Aufheben der Sperrung für eine einzelne Aufgabe prinzipiell unsicher ist, finden Sie hier.
  • Kotlin-Umstellung: Eine große Anzahl von Lebenszyklusklassen wurde in Kotlin konvertiert. Alle konvertierten Klassen behalten ihre binäre Kompatibilität mit früheren Versionen bei. Bei den folgenden Klassen wurden nicht mit der Quelle kompatible Änderungen an Klassen vorgenommen, die in Kotlin geschrieben wurden: ViewTreeLifecycleOwner, LiveDataReactiveStreams, HasDefaultViewModelProviderFactory, ViewTreeViewModelStoreOwner, Transformations, ViewModelStoreOwner, LifecycleOwner

In der folgenden Tabelle finden Sie die Quell-Conversions für die neue Version des Lebenszyklus.

Lebenszyklus 2.5 Lebenszyklus 2.5 (KTX) Lebenszyklus 2.6
Transformations.switchMap(liveData) {...} liveData.switchMap {...} liveData.switchMap {...}
Transformations.map(liveData) {...} liveData.map {...} liveData.map {...}
Transformations.distinctUntilChanged(liveData) {...} liveData.distinctUntilChanged{...} liveData.distinctUntilChanged{...}
LiveDataReactiveStreams.fromPublisher(publisher) publisher.toLiveData() publisher.toLiveData()
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) liveData.toPublisher(lifecycleOwner) liveData.toPublisher(lifecycleOwner)
override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory override val defaultViewModelProviderFactory = factory
override fun getDefaultViewModelCreationExtras(): CreationExtras = extras override fun getDefaultViewModelCreationExtras(): CreationExtras = extras override val defaultViewModelProviderCreationExtras = extras
ViewTreeLifecycleOwner.set(view, owner) ViewTreeLifecycleOwner.set(view, owner) view.setViewTreeLifecycleOwner(owner)
ViewTreeLifecycleOwner.get(view) view.findViewTreeLifecycleOwner() view.findViewTreeLifecycleOwner()
override fun getViewModelStore(): ViewModelStore = store override fun getViewModelStore(): ViewModelStore = store override val viewModelStore: ViewModelStore = store
override fun getLifecycle(): Lifecycle = registry override fun getLifecycle(): Lifecycle = registry override val lifecycle: Lifecycle get() = registry
  • Die Nullbarkeit der onChanged-Methode einer in Kotlin erstellten Observer stimmt jetzt mit der Nullbarkeit des generischen Typs überein. Wenn Observer.onChanged() einen typlosen Wert akzeptieren soll, müssen Sie Observer mit einem typlosen Wert instanziieren.
  • Diese Klassen wurden ebenfalls in Kotlin konvertiert, sind aber weiterhin mit der Quelle kompatibel: DefaultLifecycleObserver, LifecycleEventObserver, Lifecycle, LifecycleRegistry, LifecycleObserver, ViewModelStore, AndroidViewModel, AbstractSavedStateViewModelFactory, LifecycleService, ServiceLifecycleDispatcher und ProcessLifecycleOwner

Version 2.6.0-rc01

22. Februar 2023

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

Fehlerkorrekturen

  • Die LiveData.distinctUntilChanged()-Erweiterung setzt jetzt den value der zurückgegebenen LiveData, wenn für die vorherige LiveData ein Wert festgelegt wurde. Das ändert nichts am Beobachtungsverhalten. Aktualisierte Werte aus der Quelle LiveData werden erst dann angewendet, wenn Sie mit der Beobachtung des von distinctUntilChanged() zurückgegebenen LiveData beginnen. (Ib482f)

Version 2.6.0-beta01

8. Februar 2023

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

Kotlin-Conversions

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

Version 2.6.0-alpha05

25. Januar 2023

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

Kotlin-Conversions

  • Transformations ist jetzt in Kotlin geschrieben. Dies ist eine nicht kompatible Quellcodeänderung für Kotlin-Klassen, in denen direkt Syntax wie Transformations.map verwendet wurde. Kotlin-Code muss jetzt die Syntax der Kotlin-Erweiterungsmethode verwenden, die zuvor nur bei Verwendung von lifecycle-livedata-ktx verfügbar war. Bei der Verwendung der Programmiersprache Java werden die Versionen dieser Methoden, die eine androidx.arch.core.util.Function-Methode annehmen, eingestellt und durch Versionen ersetzt, die eine Kotlin-Function1 annehmen. Durch diese Änderung bleibt die Binärkompatibilität erhalten. (I8e14f)
  • ViewTreeViewModelStoreOwner ist jetzt in Kotlin geschrieben. Das ist eine nicht mit der Quelle kompatible Änderung für Klassen, die in Kotlin geschrieben sind. Sie müssen jetzt die Kotlin-Erweiterungsmethoden für View von androidx.lifecycle.setViewTreeViewModelStoreOwner und androidx.lifecycle.findViewTreeViewModelStoreOwner direkt importieren und verwenden, um einen zuvor festgelegten Eigentümer festzulegen und zu finden. Dies ist binärkompatibel und bleibt für Implementierungen, die in der Programmiersprache Java geschrieben sind, auch weiterhin quellkompatibel. (Ia06d8, Ib22d8, b/240298691)
  • Die HasDefaultViewModelProviderFactory-Schnittstelle ist jetzt in Kotlin geschrieben. Dies ist eine nicht mit der Quelle kompatible Änderung für in Kotlin geschriebene Klassen. Sie müssen jetzt die Eigenschaften defaultViewModelProviderFactory und defaultViewModelCreationExtras überschreiben, anstatt die vorherigen entsprechenden Funktionen zu implementieren. (Iaed9c, b/240298691)
  • Observer ist jetzt in Kotlin geschrieben. Für die onChanged()-Methode wird jetzt der Name value für den Parameter verwendet. (Iffef2, I4995e, b/240298691)
  • AndroidViewModel, AbstractSavedStateViewModelFactory, LifecycleService, ServiceLifecycleDispatcher und ProcessLifecycleOwner sind jetzt in Kotlin geschrieben (I2e771, Ibae40, I160d7, I08884, I1cda7, b/240298691)

Version 2.6.0-alpha04

11. Januar 2023

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

Neue Funktionen

  • LiveData enthält jetzt eine neue isInitialized-Eigenschaft, die angibt, ob für LiveData jemals ein expliziter Wert festgelegt wurde. So können Sie unterscheiden, ob liveData.value null zurückgibt, weil noch kein Wert festgelegt wurde, oder ob ein expliziter null-Wert festgelegt wurde. (Ibd018)

API-Änderungen

  • Die collectAsStateWithLifecycle() APIs von lifecycle-runtime-compose sind nicht mehr experimentell. (I09d42, b/258835424)
  • Lifecycle.launchWhenX-Methoden und Lifecycle.whenX-Methoden wurden eingestellt, da die Verwendung eines Pausierungs-Dispatchers in einigen Fällen zu verschwendetem Ressourcenverbrauch führen kann. Wir empfehlen, Lifecycle.repeatOnLifecycle zu verwenden. (Iafc54, b/248302832)

Kotlin-Conversions

  • ViewTreeLifecycleOwner ist jetzt in Kotlin geschrieben. Das ist eine nicht mit der Quelle kompatible Änderung für Klassen, die in Kotlin geschrieben sind. Sie müssen jetzt die Kotlin-Erweiterungsmethoden für View von androidx.lifecycle.setViewTreeLifecycleOwner und androidx.lifecycle.findViewTreeLifecycleOwner direkt importieren und verwenden, um einen zuvor festgelegten Eigentümer festzulegen und zu finden. Dadurch wird die vorherige Kotlin-Erweiterung in lifecycle-runtime-ktx ersetzt. Dies ist binärkompatibel und bleibt für Implementierungen, die in der Programmiersprache Java geschrieben sind, auch weiterhin 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 Modul lifecycle-reactivestreams verschoben und sind jetzt die primäre Oberfläche für in Kotlin geschriebenen Code. Dies ist eine nicht mit der Quelle kompatible Änderung für in Kotlin geschriebenen Code, wenn Sie die Kotlin-Erweiterungsmethoden-APIs noch nicht verwendet haben. (I2b1b9, I95d22, b/240298691)
  • DefaultLifecycleObserver, LifecycleEventObserver, Lifecycle, LifecycleRegistry, LifecycleObserver und ViewModelStore werden jetzt in Kotlin geschrieben (Iadffd, (I60034, I8c52c, I9593d, I01fe1, I59a23, b/240298691)

Fehlerkorrekturen

  • SavedStateHandle stürzt nicht mehr mit einer ClassCastException ab, wenn get() mit dem falschen Klassentyp aufgerufen wird. (I6ae7c)

Version 2.6.0-alpha03

24. Oktober 2022

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

Fehlerkorrekturen

  • Ein Problem wurde behoben, durch das Einschränkungen zwischen verschiedenen Lebenszyklusmodulen nicht wie vorgesehen funktionierten. (I18d0d, b/249686765)
  • Von LifecycleRegistry.moveToState() ausgelöste Fehler enthalten jetzt hilfreichere Fehlermeldungen, die Entwickler über die Komponente informieren, die den Fehler verursacht. (Idf4b2, b/244910446)

Version 2.6.0-alpha02

7. September 2022

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

API-Änderungen

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

Fehlerkorrekturen

  • Lifecycle-Artefakte enthalten jetzt Einschränkungen, die dafür sorgen, dass alle voneinander abhängigen Lebenszyklus-Artefakte dieselbe Version verwenden. Andere Abhängigkeiten werden automatisch aktualisiert, wenn eine aktualisiert wird. b/242871265
  • FlowLiveData.asFlow() erstellt jetzt eine callbackFlow, anstatt seine eigene Channel-Implementierung zu verwenden, um für Threadsicherheit und Kontexterhaltung zu sorgen. (I4a8b2, b/200596935)
  • Die asLiveData-Funktion von FlowLiveData behält jetzt den ursprünglichen Wert einer StateFlow bei, wenn das neue LiveData-Objekt erstellt wird. (I3f530, b/157380488)
  • Lebenszyklus 2.5.1: Bei benutzerdefinierten Implementierungen von AndroidViewModelFactory wird die Funktion create(modelClass) jetzt korrekt aufgerufen, wenn der zustandsorientierte Konstruktor mit Lifecycle 2.4 oder höher verwendet wird (I5b315, b/238011621)

Version 2.6.0-alpha01

29. Juni 2022

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

Neue Funktionen

  • Es wurde eine neue Erweiterung für StateFlow und Flow von collectAsStateWithLifecycle hinzugefügt, die Daten aus Abläufen erfasst und den aktuellen Wert auf Lifecycle-konforme Weise als „Compose State“ darstellt. Der Datenstrom wird erfasst und die neue Emission wird auf den Wert des Status festgelegt, wenn sich der Lebenszyklus mindestens in einer bestimmten Lifecycle.State befindet. Wenn der Lebenszyklus unter diesen Lifecycle.State fällt, wird die Erfassung des Flusses beendet und der Wert des Status wird nicht aktualisiert. (I1856e, b/230557927)

Version 2.5

Version 2.5.1

27. Juli 2022

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

Fehlerkorrekturen

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

Version 2.5.0

29. Juni 2022

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

Wichtige Änderungen seit Version 2.4.0

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

  • ViewModel CreationExtras: Beim Erstellen einer benutzerdefinierten ViewModelProvider.Factory muss AndroidViewModelFactory oder AbstractSavedStateViewModelFactory nicht mehr erweitert werden, um Zugriff auf eine Application oder SavedStateHandle zu erhalten. Stattdessen werden diese Felder allen ViewModelProvider.Factory-Unterklassen als CreationExtras über die neue Überladung von create zur Verfügung gestellt: 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 anhand eines oder mehrerer Lambda-Initialisierer definieren können, jeweils einer für jede ViewModel-Klasse, die Ihre benutzerdefinierte Fabrik 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-Fabrik 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)
    }
    
  • Integration von SavedStateHandle Compose Saver: Das lifecycle-viewmodel-compose-Artefakt enthält jetzt neue experimentelle APIs in SavedStateHandle.saveable, die ein rememberSaveable-ähnliches Verhalten ermöglichen, das vom SavedStateHandle eines ViewModels unterstützt wird.

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

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

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

    Diese kann dann im Konstruktor von ViewModel verwendet werden, wobei die Lebensdauer von viewModelScope beibehalten wird:

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

Geändertes Verhalten

  • Wenn Sie versuchen, die Lifecycle.State von INITIALIZED nach DESTROYED zu verschieben, wird jetzt immer eine IllegalStateException geworfen, unabhängig davon, ob die Lifecycle einen angehängten Beobachter hat.
  • LifecycleRegistry löscht jetzt seine Beobachter, wenn der Status DESTROYED erreicht wird.

Version 2.5.0-rc02

15. Juni 2022

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

Fehlerkorrekturen

  • ViewModelProvider stürzt nicht mehr ab, wenn frühere Versionen von „compileOnly“-Lebenszykluseinträgen mit Versionen 2.5 und höher kombiniert werden. (I81a66, b/230454566)

Version 2.5.0-rc01

11. Mai 2022

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

Fehlerkorrekturen

  • MediatorLiveData.addSource() wirft jetzt eine NullPointerException aus, wenn eine null-Quelle übergeben wird, anstatt die null-Quelle an Beobachter weiterzuleiten.(Ibd0fb, b/123085232)

Version 2.5.0-beta01

20. April 2022

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

API-Änderungen

  • Es wurden SavedStateHandle.saveable-Attributdelegierte hinzugefügt, um Attributnamen als Schlüssel zum Speichern des Status in der SavedStateHandle zu verwenden (I8bb86, b/225014345)

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem das Verschachteln einer NavHost in einer anderen NavHost auf einem nicht primären Tab der unteren Navigationsleiste bei Verwendung mehrerer Backstacks zu einer IllegalStateException führte. (I11bd5, b/228865698)

Version 2.5.0-alpha06

6. April 2022

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

Neue Funktionen

  • SavedStateHandle.saveable eine experimentelle MutableState-Überladung hinzufügen, um mit rememberSaveable übereinzustimmen (I38cfe, b/224565154)

API-Änderungen

  • CreationExtras ist jetzt abstrakt statt versiegelt. (Ib8a7a)

Fehlerkorrekturen

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

Version 2.5.0-alpha05

23. März 2022

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

Neue Funktionen

  • Das lifecycle-viewmodel-compose-Modul bietet jetzt SavedStateHandleSaver, eine experimentelle API, die dafür sorgt, dass Werte in einer SavedStateHandle korrekt in denselben gespeicherten Instanzstatus integriert werden, der auch von rememberSaveable verwendet wird. (Ia88b7, b/195689777)

API-Änderungen

  • Ein Kompatibilitätsproblem mit Lifecycle 2.3 und neueren Lifecycle-Versionen in Java wurde behoben. (I52c8a, b/219545060)

Fehlerkorrekturen

  • SavedStateViewFactory unterstützt jetzt die Verwendung von CreationExtras, auch wenn es mit einer SavedStateRegistryOwner initialisiert wurde. Wenn Extras angegeben werden, werden die initialisierten Argumente ignoriert. (I6c43b, b/224844583)

Version 2.5.0-alpha04

9. März 2022

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

API-Änderungen

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

Version 2.5.0-alpha03

23. Februar 2022

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

Neue Funktionen

  • Es wurde eine addCloseable() API und eine neue Konstruktorüberladung hinzugefügt, mit der Sie der ViewModel ein oder mehrere Closeable-Objekte hinzufügen können, die geschlossen werden, wenn die ViewModel gelöscht wird, ohne dass in onCleared() manuelle Arbeiten erforderlich sind. (I55ea0)
  • lifecycle-viewmodel bietet jetzt eine InitializerViewModelFactory, mit der Sie Lambda für die Verarbeitung bestimmter ViewModel-Klassen hinzufügen können, wobei CreationExtras als primäre Datenquelle verwendet wird. (If58fc, b/216687549)
  • lifecycle-viewmodel-compose bietet jetzt eine viewModel() API, die eine Lambda-Fabrik zum Erstellen einer ViewModel-Instanz verwendet, ohne dass eine benutzerdefinierte ViewModelProvider.Factory erstellt werden muss. (I97fbb, b/216688927)

API-Änderungen

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

Geändertes Verhalten

  • Wenn Sie versuchen, die Lifecycle.State von INITIALIZED nach DESTROYED zu verschieben, wird jetzt immer eine IllegalStateException geworfen, unabhängig davon, ob die Lifecycle einen angehängten Beobachter hat. (I7c390, b/177924329)
  • LifecycleRegistry löscht jetzt seine Beobachter, wenn der Status DESTROYED erreicht wird. (I4f8dd, b/142925860)

Version 2.5.0-alpha02

9. Februar 2022

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

API-Änderungen

  • SavedStateHandle und SavedStateViewModelFactory wurden in Kotlin konvertiert. Dadurch wurde die Nullbarkeit der Generics in beiden Klassen verbessert. (Ib6ce2, b/216168263, I9647a, b/177667711)
  • Der Funktionsparameter LiveData switchMap kann jetzt eine nullwertige Ausgabe haben. (I40396, b/132923666)
  • Die LiveData-ktx-Erweiterungen sind jetzt mit @CheckResult gekennzeichnet, um sicherzustellen, dass das Ergebnis beim Aufrufen dieser Funktionen verwendet wird. (Ia0f05, b/207325134)

Geändertes Verhalten

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

Fehlerkorrekturen

  • Seit Lebenszyklus 2.4.1: lifecycle-process wurde so aktualisiert, dass es von Startup 1.1.1 abhängt, damit die Fehlerkorrekturen, die verhindern, dass ProcessLifecycleInitializer eine StartupException auslöst, standardmäßig verfügbar sind. (Ib01df, b/216490724)
  • Es gibt jetzt eine verbesserte Fehlermeldung, wenn benutzerdefinierte AndroidViewModel-Klassen Parameter in der falschen Reihenfolge haben und versucht wird, eine ViewModel zu erstellen. (I340f7, b/177667711)
  • Sie können jetzt ein Ansichtsmodell über CreationExtras mithilfe 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 wird veröffentlicht. Version 2.5.0-alpha01 enthält diese Commits.

ViewModel CreationExtras

Mit dieser Version legen wir den Grundstein für die Umstrukturierung der Erstellung von ViewModel. Anstatt einer starren Reihe von ViewModelProvider.Factory-Unterklassen, die jeweils zusätzliche Funktionen hinzufügen (z. B. einen Application-Konstruktorparameter über AndroidViewModelFactory oder einen SavedStateHandle-Konstruktorparameter über SavedStateViewModelFactory und AbstractSavedStateViewModelFactory), bewegen wir uns in eine Welt zustandsloser Fabriken, die auf einem neuen Konzept basieren: CreationExtras. (Ia7343, b/188691010, b/188541057)

Durch diese Änderung werden von ViewModelProvider keine direkten Aufrufe der vorherigen create(Class<T>)-Methode von ViewModelProvider.Factory mehr ausgeführt. Stattdessen wird eine neue Überladung von create aufgerufen: create(Class<T>, CreationExtras). Das bedeutet, dass jede direkte Implementierung der ViewModelProvider.Factory-Instanz jetzt Zugriff auf alle diese neuen CreationExtras hat:

  • ViewModelProvider.NewInstanceFactory.VIEW_MODEL_KEY: Dieser String bietet Zugriff auf den benutzerdefinierten Schlüssel, den du an ViewModelProvider.get() übergeben hast.
  • ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY gewährt Zugriff auf die Klasse Application.
  • SavedStateHandleSupport.SAVED_STATE_REGISTRY_OWNER_KEY bietet Zugriff auf die SavedStateRegistryOwner, die zum Erstellen dieses ViewModels verwendet wird.
  • SavedStateHandleSupport.VIEW_MODEL_STORE_OWNER_KEY bietet Zugriff auf die ViewModelStoreOwner, die zum Erstellen dieses ViewModels verwendet wird.
  • SavedStateHandleSupport.DEFAULT_ARGS_KEY bietet Zugriff auf die Bundle der Argumente, die zum Erstellen einer SavedStateHandle verwendet werden sollen.

Diese Extras werden standardmäßig bei Verwendung von Aktivität 1.5.0-alpha01, Fragment 1.5.0-alpha01 und Navigation 2.5.0-alpha01 bereitgestellt. Wenn Sie eine ältere Version dieser Bibliotheken verwenden, ist CreationExtras leer. Alle vorhandenen Unterklassen von ViewModelProvider.Factory wurden neu geschrieben, um sowohl den bisherigen Erstellungspfad zu unterstützen, der von älteren Versionen dieser Bibliotheken verwendet wird, als auch den CreationExtras-Pfad, der künftig verwendet wird.

Mit diesen CreationExtras können Sie eine ViewModelProvider.Factory erstellen, die nur die Informationen an jede ViewModel weitergibt, die Sie benötigen, ohne auf eine strenge Hierarchie von Factory-Unterklassen angewiesen zu sein:

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

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

Benutzerdefinierte CreationExtras können bereitgestellt werden, indem getDefaultViewModelCreationExtras() in ComponentActivity oder Fragment überschrieben wird. So stehen sie Ihrer benutzerdefinierten ViewModelProvider.Factory als integrierte Form der unterstützten Insertion zur Verfügung. Diese Extras werden Ihrer benutzerdefinierten Factory automatisch zur Verfügung gestellt, wenn Sie sie direkt mit ViewModelProvider oder mit den Kotlin-Property-Erweiterungen by viewModels() und by activityViewModels() verwenden. (I79f2b, b/207012584, b/207012585, b/207012490)

Fehlerkorrekturen

  • Ein Problem wurde behoben, durch das der für ein SavedStateHandle angegebene Standardwert nach dem Beenden und Neustarten des Prozesses wieder angezeigt wurde, auch wenn er ausdrücklich aus dem SavedStateHandle entfernt wurde. Daher werden Standardwerte und wiederhergestellte Werte in SavedStateHandle nicht mehr zusammengeführt. Stattdessen werden nur die wiederhergestellten Werte als vertrauenswürdige Quelle verwendet. (I53a4b)

Version 2.4

Version 2.4.1

9. Februar 2022

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

Fehlerkorrekturen

  • Backport aus Lifecycle 2.5.0-alpha01: Es wurde ein Problem behoben, durch das der für eine SavedStateHandle angegebene Standardwert nach dem Beenden und Neustarten des Prozesses wieder angezeigt wurde, auch wenn er ausdrücklich aus der SavedStateHandle entfernt wurde. Daher werden Standardwerte und wiederhergestellte Werte in SavedStateHandle nicht mehr zusammengeführt. Stattdessen werden nur die wiederhergestellten Werte als vertrauenswürdige Quelle verwendet. (I53a4b)
  • lifecycle-process hängt jetzt von Androidx Startup 1.1.1 ab, wodurch eine Regression behoben wurde, bei der die Verwendung von ProcessLifecycleInitializer zu einem StartupException führte. (b/216490724)

Version 2.4.0

27. Oktober 2021

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

Wichtige Änderungen seit Version 2.3.0

  • @OnLifecycleEvent wurde eingestellt. Stattdessen sollten LifecycleEventObserver oder DefaultLifecycleObserver verwendet werden.
  • Die Mediathek androidx.lifecycle:lifecycle-viewmodel-compose wurde hinzugefügt. Es bietet viewModel() und LocalViewModelStoreOwner.
    • Funktionsgefährdende Änderung: ViewModelProvider wurde in Kotlin neu geschrieben. Bei der ViewModelProvider.Factory.create-Methode sind keine typlosen Elemente mehr zulässig.
  • androidx.lifecycle:lifecycle-runtime-ktx wurde eine neue Coroutines API hinzugefügt:
  • Lifecycle.repeatOnLifecycle, API, die einen Codeblock in einer Coroutine ausführt, wenn sich der Lebenszyklus mindestens in einem bestimmten Zustand befindet. Der Block wird abgebrochen und neu gestartet, wenn der Lebenszyklus den Zielstatus erreicht und wieder verlässt.
  • Flow.flowWithLifecycle: API, die Werte aus dem vorgelagerten Fluss ausgibt, wenn sich der Lebenszyklus mindestens in einem bestimmten Status befindet.
  • DefaultLifecycleObserver wurde von lifecycle.lifecycle-common-java8 nach lifecycle.lifecycle-common verschoben. lifecycle.lifecycle-common-java8 bietet keine zusätzlichen Funktionen mehr im Vergleich zu lifecycle.lifecycle-common. Daher kann die Abhängigkeit von lifecycle.lifecycle-common-java8 durch lifecycle.lifecycle-common ersetzt werden.
  • Die nicht coroutines API von lifecycle-viewmodel-ktx wurde in das Modul lifecycle-viewmodel verschoben.
  • lifecycle-process verwendet jetzt androidx.startup, um die ProcessLifecycleOwner zu initialisieren.

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

    Wenn Sie tools:node="remove" verwendet haben, um den Prozesslebenszyklus in der Vergangenheit zu initialisieren, gehen Sie stattdessen so vor:ContentProvider

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

    (oder)

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

Version 2.4.0-rc01

29. September 2021

androidx.lifecycle:lifecycle-*:2.4.0-rc01 wird ohne Änderungen gegenüber Lifecycle 2.4.0-beta01 veröffentlicht. Version 2.4.0-rc01 enthält diese Commits.

Version 2.4.0-beta01

15. September 2021

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

API-Änderungen

  • @OnLifecycleEvent wurde eingestellt. Stattdessen sollten LifecycleEventObserver oder DefaultLifecycleObserver verwendet werden. (I5a8fa)
  • DefaultLifecycleObserver wurde von androidx.lifecycle.lifecycle-common-java8 nach androidx.lifecycle.lifecycle-common verschoben. androidx.lifecycle.lifecycle-common-java8 bietet keine zusätzlichen Funktionen mehr im Vergleich zu androidx.lifecycle.lifecycle-common. Daher kann die Abhängigkeit von androidx.lifecycle.lifecycle-common-java8 durch androidx.lifecycle.lifecycle-common ersetzt werden. (I021aa)
  • Die Nicht-Coroutines-API von lifecycle-viewmodel-ktx wurde in das Modul lifecycle-viewmodel verschoben. (I6d5b2)

Externer Beitrag

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

Version 2.4.0-alpha03

4. August 2021

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

API-Änderungen

  • Unterbrechung der Codebasis: ViewModelProvider wurde in Kotlin neu geschrieben. Bei der ViewModelProvider.Factory.create-Methode ist „nullable“ nicht mehr als generischer Typ zulässig. (I9b9f6)

Verhaltensänderungen

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

Externer Beitrag

  • Vielen Dank an chao2zhang für die Korrektur der Code-Snippets in der repeatOnLifecycle-Dokumentation. #205.

Version 2.4.0-alpha02

16. Juni 2021

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

Neue Funktionen

  • lifecycle-runtime-ktx enthält jetzt eine neue RepeatOnLifecycleWrongUsage-Lint-Prüfung, die erkennt, wenn repeateOnLifecycle in onStart() oder onResume() falsch verwendet wird. (706078, b/187887400)

API-Änderungen

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

Fehlerkorrekturen

  • Ein Problem mit der NullSafeMutableLiveData-Lint-Prüfung, wenn das Feld Modifikatoren hat, wurde behoben. (#147, b/183696616)
  • Ein weiteres Problem mit der NullSafeMutableLiveData-Lint-Prüfung bei der Verwendung von Gattungen wurde behoben. (#161, b/184830263)

Externer Beitrag

Version 2.4.0-alpha01

24. März 2021

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

Verhaltensänderungen

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

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

    Wenn Sie tools:node="remove" verwendet haben, um den Prozesslebenszyklus in der Vergangenheit zu initialisieren, gehen Sie stattdessen so vor:ContentProvider

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

    (oder)

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

API-Änderungen

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

Fehlerkorrekturen

  • Ab Lifecycle 2.3.1: Mit der NonNullableMutableLiveData-Lint-Regel kann jetzt richtig zwischen Feldvariablen mit unterschiedlicher Nullbarkeit unterschieden werden. (b/169249668)

Lifecycle Viewmodel Compose Version 1.0.0

Version 1.0.0-alpha07

16. Juni 2021

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

Bruchstellenfreie API-Änderungen

  • Für viewModel() kann jetzt optional ein ViewModelStoreOwner angegeben werden. So können Sie einfacher mit anderen Inhabern als dem LocalViewModelStoreOwner zusammenarbeiten. So können Sie beispielsweise jetzt mit viewModel(navBackStackEntry) ein ViewModel abrufen, das mit einem bestimmten Navigationsgraphen verknüpft ist. (I2628d, b/188693123)

Version 1.0.0-alpha06

2. Juni 2021

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

Aktualisiert, um mit Compose-Version 1.0.0-beta08 kompatibel zu sein.

Version 1.0.0-alpha05

18. Mai 2021

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

Neue Funktionen

  • Aktualisiert, um mit Compose-Version 1.0.0-beta07 kompatibel zu sein.

Fehlerkorrekturen

  • Die AndroidManifest-Dateien aus „ui-test-manifest“ und „ui-tooling-data“ sind jetzt mit Android 12 kompatibel (I6f9de, b/184718994)

Version 1.0.0-alpha04

7. April 2021

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

Änderungen an Abhängigkeiten

  • Mit dieser Version können androidx.hilt:hilt-navigation-compose und androidx.navigation:navigation-compose Abhängigkeiten von androidx.compose.compiler:compiler:1.0.0-beta04 und androidx.compose.runtime:runtime:1.0.0-beta04 synchronisieren. Für Version 1.0.0 müssen Compiler und Laufzeit übereinstimmen.

Version 1.0.0-alpha03

10. März 2021

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

API-Änderungen

  • LocalViewModelStoreOwner.current gibt jetzt eine optionale ViewModelStoreOwner zurück, um besser zu bestimmen, ob eine ViewModelStoreOwner in der aktuellen Komposition verfügbar ist. Bei APIs, für die eine ViewModelStoreOwner erforderlich ist, z. B. viewModel() und NavHost, wird weiterhin eine Ausnahme ausgelöst, wenn keine ViewModelStoreOwner festgelegt ist. (Idf39a)

Lifecycle-Viewmodel-Compose Version 1.0.0-alpha02

24. Februar 2021

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

API-Änderungen

  • LocalViewModelStoreOwner hat jetzt provides-Funktionen, die mit CompositionLocalProvider verwendet werden können und die asProvidableCompositionLocal() API ersetzen. (I45d24)

Lifecycle-Viewmodel-Compose Version 1.0.0-alpha01

10. Februar 2021

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

Neue Funktionen

  • Das viewModel()-Komposit und LocalViewModelStoreOwner wurden aus androidx.compose.ui.viewinterop in dieses Artefakt im androidx.lifecycle.viewmodel.compose-Paket verschoben. (I7a374)

Version 2.3.1

Lebenszyklusversion 2.3.1

24. März 2021

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

Fehlerkorrekturen

  • Die NonNullableMutableLiveData-Lint-Regel kann jetzt richtig zwischen Feldvariablen mit unterschiedlicher Nullbarkeit unterscheiden. (b/169249668)

Version 2.3.0

Version 2.3.0

10. Februar 2021

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

Wichtige Änderungen seit Version 2.2.0

  • SavedStateHandle-Unterstützung für nicht paketbare Klassen: SavedStateHandle unterstützt jetzt die Lazy-Serialisierung. Sie können setSavedStateProvider() für einen bestimmten Schlüssel aufrufen und einen SavedStateProvider angeben, der einen Rückruf an saveState() erhält, wenn SavedStateHandle aufgefordert wird, seinen Status zu speichern. Weitere Informationen finden Sie unter Nicht parzellierbare Klassen speichern.
  • Durchsetzung des Lebenszyklusverhaltens:
    • LifecycleRegistry erzwingt jetzt DESTROYED als Endstatus.
    • LifecycleRegistry prüft jetzt, ob seine Methoden im Hauptthread aufgerufen werden. Das war immer eine Anforderung für die Lebenszyklen von Aktivitäten, Fragmenten usw. Das Hinzufügen von Beobachtern aus nicht primären Threads führte zu schwer zu erkennenden Abstürzen bei der Laufzeit. Bei LifecycleRegistry-Objekten, die zu Ihren eigenen Komponenten gehören, können Sie die Prüfungen mithilfe von LifecycleRegistry.createUnsafe(...) explizit deaktivieren. Sie müssen dann jedoch dafür sorgen, dass eine ordnungsgemäße Synchronisierung vorhanden ist, wenn auf dieses LifecycleRegistry aus verschiedenen Threads zugegriffen wird.
  • Lebenszyklusstatus- und Ereignis-Hilfsmethoden: Lifecycle.Event wurde statische Hilfsmethoden von downFrom(State), downTo(State), upFrom(State) und upTo(State) hinzugefügt, um Event anhand von State und Übergangsrichtung zu generieren. Die Methode getTargetState() wurde hinzugefügt. Sie gibt den State an, zu dem der Lebenszyklus direkt nach dem Event übergeht.
  • withStateAtLeast: Es wurden Lifecycle.withStateAtLeast APIs hinzugefügt, die auf einen Lebenszyklusstatus warten und einen nicht angehaltenen Codeblock synchron zum Zeitpunkt des Statuswechsels ausführen und dann mit dem Ergebnis fortfahren. Diese APIs unterscheiden sich von den vorhandenen when*-Methoden, da sie keinen aussetzenden Code ausführen und keinen benutzerdefinierten Dispatcher verwenden. (aosp/1326081)
  • ViewTree APIs: Mit einer neuen ViewTreeLifecycleOwner.get(View)- und ViewTreeViewModelStoreOwner.get(View) API können Sie die enthaltenen LifecycleOwner- bzw. ViewModelStoreOwner-Elemente anhand einer View-Instanz abrufen. Sie müssen auf Activity 1.2.0, Fragment 1.3.0 und AppCompat 1.3.0-alpha01 oder höher umstellen, um diese Informationen korrekt einzugeben. Die Kotlin-Erweiterungen findViewTreeLifecycleOwner und findViewTreeViewModelStoreOwner sind in lifecycle-runtime-ktx bzw. lifecycle-viewmodel-ktx verfügbar.
  • Einstellung der Kotlin-Erweiterung LiveData.observe(): Die Kotlin-Erweiterung LiveData.observe(), die für die Verwendung der Lambda-Syntax erforderlich ist, wird eingestellt, da sie bei der Verwendung von Kotlin 1.4 nicht mehr erforderlich ist.

Version 2.3.0-rc01

16. Dezember 2020

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

Fehlerkorrekturen

  • Die keys()-Methode 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 werden, 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 wird veröffentlicht. Version 2.3.0-beta01 enthält diese Commits.

API-Änderungen

  • Die Kotlin-Erweiterung LiveData.observe(), die für die Verwendung der Lambda-Syntax erforderlich ist, wird jetzt eingestellt, da sie bei der Verwendung von Kotlin 1.4 nicht mehr erforderlich ist. (I40d3f)

Fehlerkorrekturen

Änderungen an der Dokumentation

  • Die Dokumentation für den liveData-Builder und asLiveData() wurde aktualisiert und enthält jetzt Details zum Ändern der angegebenen Zeitüberschreitungswerte. (aosp/1122324)

Version 2.3.0-alpha07

19. August 2020

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

Fehlerkorrekturen

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

Version 2.3.0-alpha06

22. Juli 2020

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

Neue Funktionen

  • Statische Hilfsmethoden von downFrom(State), downTo(State), upFrom(State) und upTo(State) wurden zu Lifecycle.Event hinzugefügt, um Event anhand von State und der Übergangsrichtung zu generieren. Die Methode getTargetState() wurde hinzugefügt. Sie gibt den State an, zu dem der Lebenszyklus direkt nach dem Event übergeht. (I00887)
  • Es wurden Lifecycle.withStateAtLeast APIs hinzugefügt, die auf einen Lebenszyklusstatus warten und einen nicht angehaltenen Codeblock synchron zum Zeitpunkt des Statuswechsels ausführen und dann mit dem Ergebnis fortfahren. Diese APIs unterscheiden sich von den vorhandenen when*-Methoden, da sie keinen aussetzenden Code ausführen und keinen benutzerdefinierten Dispatcher verwenden. (aosp/1326081)

Verhaltensänderungen

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

Fehlerkorrekturen

  • Ein Absturz in NullSafeMutableLiveData wurde behoben. (b/159987480)
  • Ein ObsoleteLintCustomCheck für Lint-Prüfungen wurde behoben, die mit lifecycle-livedata-core-ktx (und insbesondere NullSafeMutableLiveData) gebündelt sind. (b/158699265)

Version 2.3.0-alpha05

24. Juni 2020

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

Fehlerkorrekturen

  • LiveData kann jetzt wiedereintretende Fälle besser verarbeiten und doppelte Aufrufe von onActive() oder onInactive() vermeiden. (b/157840298)
  • Ein Problem wurde behoben, bei dem Lint-Prüfungen bei Verwendung von Android Studio 4.1 Canary 6 oder höher nicht ausgeführt wurden. (aosp/1331903)

Version 2.3.0-alpha04

10. Juni 2020

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

Fehlerkorrekturen

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

Version 2.3.0-alpha03

20. Mai 2020

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

Neue Funktionen

  • SavedStateHandle unterstützt jetzt die Lazy-Serialisierung. Sie können setSavedStateProvider() für einen bestimmten Schlüssel aufrufen und dabei einen SavedStateProvider angeben, der einen Callback an saveState() erhält, wenn der SavedStateHandle aufgefordert wird, seinen Status zu speichern. (b/155106862)
  • Mit einer neuen ViewTreeViewModelStoreOwner.get(View) API können Sie die enthaltene ViewModelStoreOwner anhand einer View-Instanz abrufen. Sie müssen auf Activity 1.2.0-alpha05, Fragment 1.3.0-alpha05 und AppCompat 1.3.0-alpha01 umstellen, um diese Informationen korrekt einfügen zu können. lifecycle-viewmodel-ktx wurde eine findViewModelStoreOwner()-Kotlin-Erweiterung hinzugefügt. (aosp/1295522)

Fehlerkorrekturen

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

Version 2.3.0-alpha02

29. April 2020

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

API-Änderungen

  • Bei SavedStateViewModelFactory können Sie dem Konstruktor jetzt eine Null-Application übergeben, um Fälle besser zu unterstützen, in denen keine Application verfügbar ist und keine Unterstützung für AndroidViewModel erforderlich ist. (aosp/1285740)

Fehlerkorrekturen

  • Die Leistung beim Kaltstart wurde verbessert, da Fehler bei der Klassenüberprüfung auf Geräten mit API 28 und niedrigerer Version vermieden werden. (aosp/1282118)

Version 2.3.0-alpha01

4. März 2020

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

Neue Funktionen

  • Mit einer neuen ViewTreeLifecycleOwner.get(View) API können Sie die enthaltene LifecycleOwner anhand 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 diese Informationen korrekt einfügen zu können. Eine findViewTreeLifecycleOwner-Kotlin-Erweiterung ist in lifecycle-runtime-ktx verfügbar. (aosp/1182361, aosp/1182956)
  • Es wurde eine neue Lint-Prüfung hinzugefügt, die Sie warnt, wenn Sie einen null-Wert für eine MutableLiveData festlegen, die in Kotlin als nicht null definiert wurde. Diese Funktion ist verfügbar, wenn Sie livedata-core-ktx- oder livedata-ktx-Artefakte verwenden. (aosp/1154723, aosp/1159092)
  • Es ist ein neues lifecycle-runtime-testing-Artefakt verfügbar, das eine TestLifecycleOwner bereitstellt, die LifecycleOwner implementiert und eine threadsichere, veränderliche Lifecycle bietet. (aosp/1242438)

Fehlerkorrekturen

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

Version 2.2.0

ViewModel-Savedstate Version 2.2.0

5. Februar 2020

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

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

Version 2.2.0

22. Januar 2020

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

Wichtige Änderungen seit Version 2.1.0

  • Integration von Lifecycle-Coroutinen: Das neue lifecycle-runtime-ktx-Artefakt ermöglicht die Integration von Lifecycle und Kotlin-Coroutinen. Die lifecycle-livedata-ktx wurde außerdem um coroutines erweitert. Weitere Informationen finden Sie unter Kotlin-Coroutinen mit Architekturkomponenten verwenden.
  • Einstellung von ViewModelProviders.of(): ViewModelProviders.of() wurde eingestellt. Sie können dem neuen ViewModelProvider(ViewModelStoreOwner)-Konstruktor ein Fragment oder FragmentActivity übergeben, um dieselbe Funktionalität zu erzielen, wenn Sie Fragment 1.2.0 verwenden.
  • Einstellung des lifecycle-extensions-Artefakts: Durch die oben genannte Einstellung von ViewModelProviders.of() wird mit diesem Release auch die letzte API in lifecycle-extensions eingestellt. Dieses Artefakt sollte jetzt vollständig als eingestellt betrachtet werden. Wir empfehlen Ihnen dringend, je nach den erforderlichen Lebenszyklusartefakten lifecycle-service (wenn Sie LifecycleService verwenden) oder lifecycle-process (wenn Sie ProcessLifecycleOwner verwenden) anstelle von lifecycle-extensions zu verwenden, da es keine zukünftige 2.3.0-Version von lifecycle-extensions geben wird.
  • Gradle Incremental Annotation Processor: Der Lifecycle-Anmerkungs-Prozessor ist standardmäßig inkrementell. Wenn Ihre App in der Programmiersprache Java 8 geschrieben ist, können Sie stattdessen DefautLifecycleObserver verwenden. Wenn sie in der Programmiersprache Java 7 geschrieben ist, können Sie LifecycleEventObserver verwenden.

Version 2.2.0-rc03

4. Dezember 2019

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

Fehlerkorrekturen

  • Ein Fehler wurde behoben, der auftrat, wenn eine gemockte ViewModel in ViewModelStore gespeichert und später mit der Standardfabrik abgefragt wurde.
  • Fehler bei der Verwendung von Dispatchers.Main.immediate in launchWhenCreated und ähnlichen Methoden behoben, die während des entsprechenden Lebenszyklusereignisses synchron aufgerufen werden sollen. (aosp/1156203)

Externe Beiträge

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

Änderungen an Abhängigkeiten

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

Version 2.2.0-rc02

7. November 2019

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

Fehlerkorrekturen

  • Ein Fehler in der ProGuard-Einrichtung der Bibliothek wurde behoben, der Geräte mit API 28 und höher betraf, wenn die Ziel-API unter 29 lag. (b/142778206)

Version 2.2.0-rc01

23. Oktober 2019

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

Fehlerkorrekturen

  • Ein Problem wurde behoben, aufgrund dessen launchWhenCreated und zugehörige Methoden einen Frame später als die zugehörige Lebenszyklusmethode ausgeführt wurden, da Dispatchers.Main anstelle von Dispatchers.Main.immediate verwendet wurde. (aosp/1145596)

Externe Beiträge

  • Vielen Dank an Nicklas Ansman für die Behebung! (aosp/1145596)

Version 2.2.0-beta01

9. Oktober 2019

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

Fehlerkorrekturen

  • Behebung einer Regression, die in Lifecycle 2.2.0-alpha05 bei der Sortierung von ProcessLifecycleOwner und dem Wechsel von LifecycleOwner der Aktivität zu „gestartet“ und „fortgesetzt“ auf Android 10-Geräten aufgetreten ist. (aosp/1128132)
  • Eine Regression wurde behoben, die in Lifecycle 2.2.0-alpha05 eingeführt wurde und bei Verwendung der Version 2.0.0 oder 2.1.0 von lifecycle-process zu einem NullPointerException führte. (b/141536990)

Version 2.2.0-alpha05

18. September 2019

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

Fehlerkorrekturen

  • Es wurde eine Race-Bedingung im LiveData-Builder für Tasks behoben. b/140249349

Version 2.2.0-alpha04

5. September 2019

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

Neue Funktionen

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

Externe Beiträge

  • Vielen Dank an Nicklas Ansman für die Umstellung auf Dispatchers.Main.immediate. (aosp/1106073)

Version 2.2.0-alpha03

7. August 2019

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

Neue Funktionen

API-Änderungen

  • ViewModelProviders.of() wurde eingestellt. Sie können dem neuen Konstruktor ViewModelProvider(ViewModelStoreOwner) eine Fragment oder FragmentActivity übergeben, um dieselbe Funktionalität zu erzielen. (aosp/1009889)

Version 2.2.0-alpha02

2. Juli 2019

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

API-Änderungen

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

Version 2.2.0-alpha01

7. Mai 2019

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

Neue Funktionen

  • Diese Version enthält neue Funktionen, die die Unterstützung von Kotlin-Coroutinen für Lifecycle und LiveData bieten. Eine ausführliche Dokumentation dazu finden Sie hier.

ViewModel-SavedState Version 1.0.0

Version 1.0.0

22. Januar 2020

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

Wichtige Funktionen in 1.0.0

  • Die neue Klasse SavedStateHandle wurde hinzugefügt. So können Ihre ViewModel-Klassen auf den gespeicherten Status zugreifen und zu diesem beitragen. Dieses Objekt kann im Konstruktor der Klasse ViewModel empfangen werden. Die von Fragmenten standardmäßig bereitgestellten Fabriken und AppCompatActivity fügen SavedStateHandle automatisch ein.
  • AbstractSavedStateViewModelFactory wurde hinzugefügt. Sie können damit benutzerdefinierte Fabriken für Ihre ViewModel erstellen und ihnen Zugriff auf SavedStateHandle gewähren.

ViewModel-Savedstate Version 1.0.0-rc03

4. Dezember 2019

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

Änderungen an Abhängigkeiten

  • Der SavedState des Lifecycle ViewModel hängt jetzt vom Lifecycle 2.2.0-rc03 ab.

Viewmodel-Savedstate Version 1.0.0-rc02

7. November 2019

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

Änderungen an Abhängigkeiten

  • Jetzt hängt es vom Lebenszyklus 2.2.0-rc02 ab.

ViewModel-SavedState Version 1.0.0-rc01

23. Oktober 2019

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01 wird ohne Änderungen gegenüber 1.0.0-beta01 veröffentlicht. Version 1.0.0-rc01 enthält diese Commits.

ViewModel-Savedstate Version 1.0.0-beta01

9. Oktober 2019

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

Fehlerkorrekturen

  • Ein Problem wurde behoben, durch das beim ersten Zugriff auf ein SavedState ViewModel in Activity.onActivityResult() eine IllegalStateException zurückgegeben wurde. (b/139093676)
  • Ein Problem mit 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 wird veröffentlicht. Version 1.0.0-alpha05 enthält diese Commits.

API-Änderungen

  • SavedStateViewModelFactory erweitert AbstractSavedStateViewModelFactory nicht mehr und SavedStateHandle wird nur für ViewModels erstellt, für die es angefordert wurde (aosp/1113593)

ViewModel-SavedState Version 1.0.0-alpha03

7. August 2019

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

Wichtige Änderungen

ViewModel-SavedState Version 1.0.0-alpha02

2. Juli 2019

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

Neue Funktionen

  • Überladung von SavedStateHandle.getLiveData() hinzugefügt, die einen Standardwert akzeptiert.

API-Änderungen

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

ViewModel-Savedstate Version 1.0.0-alpha01

13. März 2019

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

Neue Funktionen

  • Jetzt kann ViewModels zu „savedstate“ beitragen. Dazu verwenden Sie die neu eingeführte ViewModel-Factory SavedStateVMFactory und Ihr ViewModel sollte einen Konstruktor haben, der das SavedStateHandle-Objekt als Parameter empfängt.

Version 2.1.0

Wichtige Änderungen seit Version 2.0.0

  • LifecycleEventObserver wurde hinzugefügt, wenn ein Stream von Lebenszyklusereignissen erforderlich ist. Es handelt sich um eine öffentliche API und nicht um eine ausgeblendete 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 sich der Quellwert LiveData geändert hat.
  • Unterstützung für Tasks in ViewModels hinzugefügt, indem die Erweiterungseigenschaft ViewModel.viewModelScope hinzugefügt wurde.

Version 2.1.0

5. September 2019

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

Version 2.1.0-rc01

2. Juli 2019

androidx.lifecycle:*:2.1.0-rc01 wird ohne Änderungen gegenüber androidx.lifecycle:*:2.1.0-beta01 veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Version 2.1.0-beta01

7. Mai 2019

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

Neue Funktionen

  • Lebenszyklen werden in die Betaphase überführt: In früheren Alphaversionen eingeführte APIs wie liveDataErweiterungsfunktionen für Transformationen und Beobachtungen, ViewModelInitialisierung mit Property-Delegierung und andere sind stabil und werden sich nicht ändern.

Version 2.1.0-alpha04

3. April 2019

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

API-Änderungen

  • Wichtige Änderung: Die zugrunde liegende API von by viewModels() und by activityViewModels() wurde geändert, um nicht nur ViewModelStoreOwner, sondern auch ViewModelStore direkt zu unterstützen. (aosp/932932)

Version 2.1.0-alpha03

13. März 2019

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

API-Änderungen

  • "ViewModelProvider.KeyedFactory" wurde entfernt. Die zweite Benutzeroberfläche zusätzlich zu ViewModelProvider.Factory konnte nicht gut mit neuen Funktionen wie der Property-Delegierung in Kotlin by viewmodels {} kombiniert werden. (aosp/914133)

Version 2.1.0-alpha02

30. Januar 2019

androidx.lifecycle 2.1.0-alpha02 wird veröffentlicht.

API-Änderungen

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

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem Mock-ViewModel-Instanzen abstürzten, wenn der enthaltene ViewModelStore gelöscht wurde. b/122273087

Version 2.1.0-alpha01

17. Dezember 2018

androidx.lifecycle 2.1.0-alpha01 wird veröffentlicht.

Neue Funktionen

  • LifecycleEventObserver wurde hinzugefügt, wenn ein Stream von Lebenszyklusereignissen erforderlich ist. Es ist eine öffentliche API und keine ausgeblendete GenericLifecycleObserver-Klasse.
  • KTX-Erweiterungen für LiveData.observe- und Transformations.*-Methoden wurden hinzugefügt.
  • Die Methode Transformations.distinctUntilChanged wurde hinzugefügt. Es wird ein neues LiveData-Objekt erstellt, das erst dann einen Wert ausgibt, wenn sich der Quell-LiveData-Wert geändert hat.
  • Unterstützung für Tasks in ViewModels: Die Erweiterungseigenschaft ViewModel.viewModelScope wurde hinzugefügt.
  • ViewModelProvider.KeyedFactory wurde hinzugefügt, eine Factory für ViewModels, die key und Class in der create-Methode empfängt.

Version 2.0.0

Version 2.0.0

21. September 2018

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

Fehlerkorrekturen

  • Behobene ProGuard-Regel für ViewModel, durch die Konstruktoren fälschlicherweise entfernt wurden b/112230489

Version 2.0.0-beta01

2. Juli 2018

Fehlerkorrekturen

  • Proguard-Regel für LifecycleObserver korrigiert, sodass nur Implementierungen, nicht Unterschnittstellen beibehalten werden b/71389427
  • Proguard-Regeln für ViewModels korrigiert, um Verschleierung und Verkleinerung zu ermöglichen

Versionen vor Android X

Fügen Sie für die folgenden Versionen von Lifecycle vor Android X die folgenden Abhängigkeiten hinzu:

dependencies {
    def lifecycle_version = "1.1.1"

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

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

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

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

Version 1.1.1

21. März 2018

Es gibt nur eine kleine Änderung: android.arch.core.util.Function wird von arch:runtime nach arch:common verschoben. So kann es ohne Laufzeitabhängigkeit verwendet werden, z.B. in paging:common unten.

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

Version 1.1.0

22. Januar 2018

Änderungen an der Verpackung

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

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

API-Änderungen

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