Lebenszyklus

Lebenszyklussensitive 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 schlanken Code erstellen, der einfacher zu verwalten ist.

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

Artefakt Stabile Version Releasekandidat Beta-Ausgabe Alpharelease
Lebenszyklus-* 2.7.0 - - 2.8.0-alpha04
Lebenszyklus-Ansichtsmodell-Zusammensetzung 2.7.0 - - 2.8.0-alpha04
Diese Mediathek wurde zuletzt am 3. April 2024 aktualisiert

Abhängigkeiten deklarieren

Zum Hinzufügen einer Abhängigkeit vom Lebenszyklus müssen Sie Ihrem Projekt das Google Maven-Repository hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.

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

Kotlin

Groovig

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

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

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

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

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

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

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

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

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

Kotlin

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

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

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

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

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

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

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

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

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

Java

Groovig

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

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

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

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

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

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

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

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

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

Kotlin

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

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

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

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

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

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

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

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

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

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

Feedback

Dein Feedback hilft uns, Jetpack zu verbessern. Lassen Sie uns wissen, wenn Sie neue Probleme entdecken oder Ideen zur Verbesserung dieser Bibliothek haben. Sehen Sie sich die vorhandenen Probleme in dieser Bibliothek an, bevor Sie eine neue erstellen. Durch Klicken auf die Stern-Schaltfläche können Sie zu einem vorhandenen Problem abstimmen.

Neues Problem erstellen

Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.

Version 2.8

Version 2.8.0-alpha04

3. April 2024

androidx.lifecycle:lifecycle-*:2.8.0-alpha04 wird freigegeben. Version 2.8.0-alpha04 enthält diese Commits.

Neue Funktionen

  • Das lifecycle-viewmodel-compose-Artefakt ist jetzt mit Kotlin Multiplatform kompatibel. Der Code wird in common verschoben und es wird ein Android-Artefakt ausgeliefert, das der plattformübergreifenden Unterstützung von androidx.compose entspricht. Um diese Änderung zu berücksichtigen, akzeptiert die zusammensetzbare viewModel-Methode jetzt neben einer java.lang.Class auch ein KClass. (b/330323282)

Fehlerkorrekturen

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

Abhängigkeitsupdate

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

Version 2.8.0-alpha03

20. März 2024

androidx.lifecycle:lifecycle-*:2.8.0-alpha03 wird freigegeben. Version 2.8.0-alpha03 enthält diese Commits.

Neue Funktionen

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

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

Kotlin-Kompatibilität mit mehreren Plattformen

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

Um dieser Änderung Rechnung zu tragen, gibt es nun für Methoden wie die für ViewModelProvider, für die ein java.lang.Class<T> verwendet wurde, eine entsprechende Methode, für die ein kotlin.reflect.KClass<T> verwendet wird.

Die Binärkompatibilität unter Android wurde beibehalten, es gibt jedoch einige wichtige Änderungen beim Vergleich der Android-API-Oberfläche mit der allgemeinen API-Oberfläche:

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

Änderungen des Verhaltens

  • InitializerViewModelFactory (einschließlich viewModelFactory-Builder-Funktion) gibt jetzt ein IllegalArgumentException aus, wenn bereits ein 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 zugeordnet ist, wird die alte Ressource ersetzt und sofort geschlossen. (Ibeb67)
  • Der Zugriff auf viewModelScope eines ViewModel ist jetzt Thread-sicher. (If4766, b/322407038)

Externer Beitrag

  • LocalLifecycleOwner wurde von der Compose-UI nach „Lifecycle-runtime-compose“ verschoben, damit die auf Compose basierenden Hilfs-APIs außerhalb der Erstellungs-UI verwendet werden können. Vielen Dank, Jake Wharton für den Beitrag. (I6c41b, b/328263448)

Version 2.8.0-alpha02

21. Februar 2024

androidx.lifecycle:lifecycle-*:2.8.0-alpha02 wird freigegeben. Version 2.8.0-alpha02 enthält diese Commits.

Neue Funktionen

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

Kotlin-Conversions

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

Kotlin-Kompatibilität mit mehreren Plattformen

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

API-Änderungen

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

Externer Beitrag

  • Vielen Dank, Ivan Matkov von Jetbrains hat Lifecycle auf die Kotlin-Multiplattform umgestellt. (aosp/2926690, I0c5ac, If445d)

Version 2.8.0-alpha01

24. Januar 2024

androidx.lifecycle:lifecycle-*:2.8.0-alpha01 wird freigegeben. Version 2.8.0-alpha01 enthält diese Commits.

Neue Funktionen

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

Version 2.7

Version 2.7.0

10. Januar 2024

androidx.lifecycle:lifecycle-*:2.7.0 wird freigegeben. Version 2.7.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.6.0

  • TestLifecycleOwner enthält jetzt die Aussetzenfunktion setCurrentState(), die dafür sorgt, dass die Statusänderung und alle LifecycleObserver-Callbacks vor der Rückkehr abgeschlossen werden. Im Gegensatz zur direkten Festlegung der Eigenschaft currentState wird hier runBlocking nicht verwendet. Daher kann sie ohne Bedenken innerhalb einer Koroutine, wie z. B. einer von runTest bereitgestellten, verwendet werden.
  • Die LiveData-Erweiterungen von map und switchMap spiegeln jetzt das Verhalten von distinctUntilChanged wider. Wenn für LiveData eine value festgelegt ist, wird die map/switchMap-Funktion sofort aufgerufen, um die value der zurückgegebenen LiveData auszufüllen. Dadurch wird sichergestellt, dass der Anfangswert als Teil der ersten Zusammensetzung (wenn sie mit observeAsState() verwendet wird) festgelegt wird, ändert jedoch nicht das Beobachtungsverhalten – aktualisierte Werte aus der Quelle LiveData gelten weiterhin nur, wenn Sie anfangen, den LiveData zu beobachten.
  • In dieser Version wurde ein Problem behoben, bei dem SavedStateHandle benutzerdefinierte Parcelable-Klassen nach dem Tod und der Neuerstellung eines Prozesses nicht richtig wiederhergestellt hat. Da durch das Android-Framework Informationen zu Typen verloren gehen, erfordern Arrays benutzerdefinierter Parcelables zusätzlichen Aufwand (manuelles Erstellen eines typisierten Arrays des richtigen Typs). In der Dokumentation zu get, getLiveData und getStateFlow wird diese Einschränkung jetzt ausdrücklich erwähnt.
  • Die mit LifecycleObserver verknüpften Proguard-Keep-Regeln wurden entfernt. Das bedeutet, dass für geschützten Code, der APIs über Reflexion verwenden möchte (z. B. mit der seit Langem eingestellten Annotation @OnLifecycleEvent), eigene Aufbewahrungsregeln für den jeweiligen Anwendungsfall erstellen muss.

Beobachtbarkeit von Lebenszyklusereignissen

  • Als Alternative zur Verwendung von LifecycleEventObserver kannst du jetzt mit der Erweiterungsmethode Lifecycle.asFlow() ein Flow von Lifecycle.Event 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 – von Anfang bis Ende beendet und wieder pausiert. Diese API spiegelt die API in DisposableEffect wider. Sie eignet sich für Fälle, in denen die beim Anstieg des Status vorgenommene Änderung beim Zurückkehren rückgängig gemacht werden muss.
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {
  LifecycleStartEffect(viewModel) {
    val timeTracking = viewModel.startTrackingTimeOnScreen()
    onStopOrDispose {
      timeTracking.stopTrackingTimeOnScreen()
    }
  }
  // …
}

Weitere Informationen finden Sie unter Code für Lebenszyklusereignisse ausführen.

Beobachtbarkeit des Lebenszyklusstatus

  • Das aktuelle Lifecycle.State kann jetzt über die Lifecycle.currentStateFlow-Property beobachtet werden. Sie gibt eine StateFlow zurück, wobei value der aktuelle Lifecycle.State ist.
  • Jetpack Compose-Nutzer können mit der Erweiterung Lifecycle.currentStateAsState() Lifecycle.State direkt als Compose-State freigeben. Dies entspricht lifecycle.currentStateFlow.collectAsState() und ist eine kürzere Alternative.

Weitere Informationen finden Sie unter Lebenszyklusstatus mit Abläufen erfassen.

Version 2.7.0-rc02

13. Dezember 2023

androidx.lifecycle:lifecycle-*:2.7.0-rc02 wird freigegeben. Version 2.7.0-rc02 enthält diese Commits.

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem SavedStateHandle benutzerdefinierte Parcelable-Klassen nicht richtig wiederhergestellt hat, nachdem der Prozess beendet und neu erstellt wurde. Da durch das Android-Framework Informationen zu Typen verloren gehen, erfordern Arrays benutzerdefinierter Parcelables zusätzlichen Aufwand (manuelles Erstellen eines typisierten Arrays des richtigen Typs). In der Dokumentation 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 freigegeben. Version 2.7.0-rc01 enthält diese Commits.

Fehlerkorrekturen

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

Version 2.7.0-beta01

1. November 2023

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

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

Version 2.7.0-alpha03

18. Oktober 2023

androidx.lifecycle:lifecycle-*:2.7.0-alpha03 wird freigegeben. Version 2.7.0-alpha03 enthält diese Commits.

Neue Funktionen

  • lifecycle-runtime-testing enthält jetzt eine neue Lint-Prüfung, um zu verhindern, dass der Lifecycle.State des TestLifecycleOwner festgelegt wird, indem das Feld currentState in einer Koroutine verwendet wird. Die Lint-Prüfung schlägt jetzt das Anhalten von setCurrentState vor, wodurch das Festlegen von Lifecycle.State ohne Blockierung ermöglicht wird. (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 bei einem nachfolgenden Aufruf verhindert wurde, dass die LiveData-Instanz als Quelle hinzugefügt wurde. (Ibedcba7)

Version 2.7.0-alpha02

6. September 2023

androidx.lifecycle:lifecycle-*:2.7.0-alpha02 wird freigegeben. Version 2.7.0-alpha02 enthält diese Commits.

Neue Funktionen

  • TestLifecycleOwner enthält jetzt die Anhaltenfunktion setCurrentState(), damit Nutzer TestLifecycleOwner innerhalb einer Koroutine, z. B. der von runTest, verwenden können. (I329de, b/259344129)

API-Änderungen

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

Änderungen des Verhaltens

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

Fehlerkorrekturen

  • Aus Lebenszyklus 2.6.2: Ein Problem wurde behoben, bei dem SavedStateHandle nach dem Beenden des Prozesses nicht korrekt wiederhergestellt wurde, wenn der Status wiederhergestellt wurde, save() wurde aufgerufen, ohne den Status tatsächlich im übergeordneten SavedStateRegistry zu speichern, und der Status wurde dann noch einmal wiederhergestellt. 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 freigegeben. Version 2.7.0-alpha01 enthält diese Commits.

API-Änderungen

  • Lifecycle.State kann jetzt über Lifecycle.currentStateFlow beobachtet werden, wodurch ein StateFlow zurückgegeben wird, wobei value der aktuelle Lifecycle.State ist. (Ib212d, b/209684871)
  • Lifecycle.Events können jetzt als Flow mit Lifecycle.asFlow(). beobachtet werden (If2c0f, b/176311030)
  • Die LifecycleResumeEffect API wurde hinzugefügt, um „SideEffect“ zum Schreiben basierend auf den Ereignis-Callbacks Lifecycle.Event.ON_RESUME und Lifecycle.Event.ON_PAUSE auszuführen. (I60386, b/235529345)
  • Die LifecycleStartEffect API wurde hinzugefügt, um SideEffects zum Schreiben basierend auf Lifecycle.Event.ON_START- und Lifecycle.Event.ON_STOP-Ereignis-Callbacks auszuführen. (I5a8d1, b/235529345)
  • Die LifecycleEventEffect API wurde zum Ausführen von SideEffects zum Schreiben auf der Grundlage von Lifecycle.Event hinzugefügt. (Ic9794, b/235529345)
  • Die Erweiterung „Lifecycle.collectAsState()“ wurde hinzugefügt, um Lifecycle.State direkt als „Schreiben“-State freizugeben. Dies entspricht lifecycle.currentStateFlow.collectAsState() und ist eine kürzere Alternative. (I11015, b/235529345)

Fehlerkorrekturen

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

Version 2.6

Version 2.6.2

6. September 2023

androidx.lifecycle:lifecycle-*:2.6.2 wird freigegeben. Version 2.6.2 enthält diese Commits.

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem SavedStateHandle nach dem Beenden des Prozesses nicht korrekt wiederhergestellt wurde, wenn der Status wiederhergestellt wurde, save() aufgerufen wurde, ohne den Status tatsächlich im ü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 freigegeben. Version 2.6.1 enthält diese Commits.

Aktualisierungen von Abhängigkeiten

Version 2.6.0

8. März 2023

androidx.lifecycle:lifecycle-*:2.6.0 wird freigegeben. Version 2.6.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.5.0

  • LiveData enthält jetzt eine neue isInitialized-Eigenschaft, die angibt, ob jemals ein expliziter Wert für LiveData festgelegt wurde. So können Sie zwischen liveData.value, die null zurückgeben, unterscheiden, da bisher kein Wert oder ein expliziter null-Wert festgelegt wurde.
  • MediatorLiveData enthält jetzt einen Konstruktor zum Festlegen eines Anfangswerts.
  • Für StateFlow und Flow von collectAsStateWithLifecycle() wurde eine neue Erweiterung hinzugefügt, die aus Abläufen erfasst und den neuesten Wert als Erstellungsstatus auf Lebenszyklus-orientierte Weise darstellt.
  • Die Methoden Lifecycle.launchWhenX und Lifecycle.whenX werden nicht mehr unterstützt, da die Verwendung eines pausierenden Disponenten in einigen Fällen Ressourcen verschwenden kann. Es wird empfohlen, Lifecycle.repeatOnLifecycle zu verwenden. Weitere Informationen zum einmaligen Sperren von Arbeitsorten finden Sie in dieser Erläuterung dazu, warum dies natursicher ist.
  • Kotlin-Konvertierung: Eine große Anzahl von Lebenszyklusklassen wurde in Kotlin konvertiert. Alle konvertierten Klassen behalten ihre Binärkompatibilität mit früheren Versionen. Bei den folgenden Klassen gibt es nicht mit der Quelle nicht kompatible Änderungen für Klassen, die in Kotlin geschrieben wurden: ViewTreeLifecycleOwner, LiveDataReactiveStreams, HasDefaultViewModelProviderFactory, ViewTreeViewModelStoreOwner, Transformations, ViewModelStoreOwner, LifecycleOwner.

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

Lebenszyklus 2.5 Lebenszyklus 2.5 (KTX) Lebenszyklus 2.6
Transformations.switchMap(liveData) {...} liveData.switchMap {...} liveData.switchMap {...}
Transformations.map(liveData) {...} liveData.map {...} liveData.map {...}
Transformations.distinctUntilChanged(liveData) {...} liveData.distinctUntilChanged{...} liveData.distinctUntilChanged{...}
LiveDataReactiveStreams.fromPublisher(publisher) publisher.toLiveData() publisher.toLiveData()
LiveDataReactiveStreams.toPublisher(lifecycleOwner, liveData) liveData.toPublisher(lifecycleOwner) liveData.toPublisher(lifecycleOwner)
override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory override val defaultViewModelProviderFactory = factory
override fun getDefaultViewModelCreationExtras(): CreationExtras = extras override fun getDefaultViewModelCreationExtras(): CreationExtras = extras override val defaultViewModelProviderCreationExtras = extras
ViewTreeLifecycleOwner.set(view, owner) ViewTreeLifecycleOwner.set(view, owner) view.setViewTreeLifecycleOwner(owner)
ViewTreeLifecycleOwner.get(view) view.findViewTreeLifecycleOwner() view.findViewTreeLifecycleOwner()
override fun getViewModelStore(): ViewModelStore = store override fun getViewModelStore(): ViewModelStore = store override val viewModelStore: ViewModelStore = store
override fun getLifecycle(): Lifecycle = registry override fun getLifecycle(): Lifecycle = registry override val lifecycle: Lifecycle get() = registry
  • Die Null-Zulässigkeit der onChanged-Methode eines in Kotlin erstellten Observer-Objekts entspricht jetzt der Null-Zulässigkeit des generischen Typs. Wenn Observer.onChanged() einen Typ akzeptieren soll, für den Nullwerte zulässig sind, müssen Sie Observer mit einem Typ instanziieren, in dem Nullwerte zulässig sind.
  • Diese Klassen wurden ebenfalls in Kotlin konvertiert, bleiben aber quellkompatibel: DefaultLifecycleObserver, LifecycleEventObserver, Lifecycle, LifecycleRegistry, LifecycleObserver, ViewModelStore, AndroidViewModel, AbstractSavedStateViewModelFactory, LifecycleService, ServiceLifecycleDispatcher und ProcessLifecycleOwner

Version 2.6.0-rc01

22. Februar 2023

androidx.lifecycle:lifecycle-*:2.6.0-rc01 wird freigegeben. Version 2.6.0-rc01 enthält diese Commits.

Fehlerkorrekturen

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

Version 2.6.0-beta01

8. Februar 2023

androidx.lifecycle:lifecycle-*:2.6.0-beta01 wird freigegeben. Version 2.6.0-beta01 enthält diese Commits.

Kotlin-Conversions

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

Version 2.6.0-alpha05

25. Januar 2023

androidx.lifecycle:lifecycle-*:2.6.0-alpha05 wird freigegeben. Version 2.6.0-alpha05 enthält diese Commits.

Kotlin-Conversions

  • Transformations wird jetzt in Kotlin geschrieben. Dies ist eine quellinkompatible Änderung für Klassen, die in Kotlin geschrieben wurden und die direkte Syntax wie Transformations.map verwendet haben. Für Kotlin-Code muss jetzt die Kotlin-Erweiterungsmethode verwendet werden, die zuvor nur bei Verwendung von lifecycle-livedata-ktx verfügbar war. Bei Verwendung der Programmiersprache Java werden die Versionen dieser Methoden, für die die Methode androidx.arch.core.util.Function verwendet wird, verworfen und durch Versionen ersetzt, die eine Kotlin-Function1 verwenden. Durch diese Änderung wird die Binärkompatibilität aufrechterhalten. (I8e14f)
  • ViewTreeViewModelStoreOwner wird jetzt in Kotlin geschrieben. Dies ist eine mit der Quelle nicht kompatible Änderung für Klassen, die in Kotlin geschrieben wurden. Sie müssen jetzt die Kotlin-Erweiterungsmethoden für View von androidx.lifecycle.setViewTreeViewModelStoreOwner und androidx.lifecycle.findViewTreeViewModelStoreOwner direkt importieren und verwenden, um einen zuvor festgelegten Inhaber festzulegen und zu finden. Dies ist binärkompatibel und bleibt für Implementierungen, die in der Programmiersprache Java geschrieben sind, quellkompatibel. (Ia06d8, Ib22d8, b/240298691)
  • Die HasDefaultViewModelProviderFactory-Schnittstelle ist jetzt in Kotlin geschrieben. Dies ist eine mit der Quelle nicht kompatible Änderung für Klassen, die in Kotlin geschrieben wurden. Sie müssen jetzt die Attribute defaultViewModelProviderFactory und defaultViewModelCreationExtras überschreiben, anstatt die vorherigen entsprechenden Funktionen zu implementieren. (Iaed9c, b/240298691)
  • Observer wird jetzt in Kotlin geschrieben. Für seine onChanged()-Methode wird jetzt der Name value als 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 freigegeben. Version 2.6.0-alpha04 enthält diese Commits.

Neue Funktionen

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

API-Änderungen

  • Die collectAsStateWithLifecycle() APIs von lifecycle-runtime-compose befinden sich nicht mehr im Teststatus. (I09d42, b/258835424)
  • Die Methoden Lifecycle.launchWhenX und Lifecycle.whenX werden nicht mehr unterstützt, da die Verwendung eines pausierenden Disponenten in einigen Fällen Ressourcen verschwenden kann. Es wird empfohlen, Lifecycle.repeatOnLifecycle zu verwenden. (Iafc54, b/248302832)

Kotlin-Conversions

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

Fehlerkorrekturen

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

Version 2.6.0-alpha03

24. Oktober 2022

androidx.lifecycle:lifecycle-*:2.6.0-alpha03 wird freigegeben. Version 2.6.0-alpha03 enthält diese Commits.

Fehlerkorrekturen

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

Version 2.6.0-alpha02

7. September 2022

androidx.lifecycle:lifecycle-*:2.6.0-alpha02 wird freigegeben. Version 2.6.0-alpha02 enthält diese Commits.

API-Änderungen

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

Fehlerkorrekturen

  • Lifecycle-Artefakte enthalten jetzt Einschränkungen, die dafür sorgen, dass alle voneinander abhängigen Lebenszyklus-Artefakte dieselbe Version verwenden. Bei einem Upgrade werden andere Abhängigkeiten automatisch aktualisiert. b/242871265
  • FlowLiveData.asFlow() erstellt jetzt eine callbackFlow, anstatt eine eigene Channel-Implementierung zu verwenden, um Threadsicherheit und Kontextaufbewahrung zu gewährleisten. (I4a8b2, b/200596935)
  • Die Funktion asLiveData von FlowLiveData behält jetzt den Anfangswert einer StateFlow bei, wenn das neue LiveData-Objekt erstellt wird. (I3f530, b/157380488)
  • Aus Lebenszyklus 2.5.1: Benutzerdefinierte Implementierungen von AndroidViewModelFactory rufen jetzt die Funktion create(modelClass) korrekt auf, wenn der zustandsorientierte Konstruktor mit Lifecycle 2.4+ (I5b315, b/238011621) verwendet wird.

Version 2.6.0-alpha01

29. Juni 2022

androidx.lifecycle:lifecycle-*:2.6.0-alpha01 wird freigegeben. Version 2.6.0-alpha01 enthält diese Commits.

Neue Funktionen

  • Für StateFlow und Flow von collectAsStateWithLifecycle wurde eine neue Erweiterung hinzugefügt, die aus Abläufen erfasst und deren letzter Wert als Erstellungsstatus auf Lebenszyklus-orientierte Weise darstellt. Der Fluss wird erfasst und die neuen Emissionen werden auf den Wert des Bundesstaates gesetzt, wenn der Lebenszyklus mindestens in einem bestimmten Lifecycle.State liegt. Wenn der Lebenszyklus unter diesen Lifecycle.State fällt, wird die Flusserfassung beendet und der Wert des Status wird nicht aktualisiert. (I1856e, b/230557927)

Version 2.5

Version 2.5.1

27. Juli 2022

androidx.lifecycle:lifecycle-*:2.5.1 wird freigegeben. Version 2.5.1 enthält diese Commits.

Fehlerkorrekturen

  • Benutzerdefinierte Implementierungen von AndroidViewModelFactory rufen jetzt die create(modelClass)-Funktion korrekt auf, wenn der zustandsorientierte AndroidViewModelFactory-Konstruktor mit Lifecycle 2.4+ verwendet wird. (I5b315, b/238011621)

Version 2.5.0

29. Juni 2022

androidx.lifecycle:lifecycle-*:2.5.0 wird freigegeben. Version 2.5.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.4.0

  • SavedStateHandle bietet jetzt eine getStateFlow() API, die als Alternative zur Verwendung von LiveData einen Kotlin-StateFlow für das Monitoring von Wertänderungen zurückgibt.

  • ViewModel CreationExtras: Beim Schreiben einer benutzerdefinierten ViewModelProvider.Factory ist es nicht mehr erforderlich, AndroidViewModelFactory oder AbstractSavedStateViewModelFactory zu erweitern, um Zugriff auf Application bzw. SavedStateHandle zu erhalten. Stattdessen werden diese Felder jeder ViewModelProvider.Factory-Unterklasse als CreationExtras über die neue Überlastung von create bereitgestellt: create(Class<T>, CreationExtras). Diese Extras werden automatisch von deiner Aktivität oder deinem Fragment bereitgestellt, wenn du Aktivität 1.5.0 bzw. Fragment 1.5.0 verwendest.

    class CustomFactory : ViewModelProvider.Factory {
        override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
            return when (modelClass) {
                HomeViewModel::class -> {
                    // Get the Application object from extras
                    val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY])
                    // Pass it directly to HomeViewModel
                    HomeViewModel(application)
                }
                DetailViewModel::class -> {
                    // Create a SavedStateHandle for this ViewModel from extras
                    val savedStateHandle = extras.createSavedStateHandle()
                    DetailViewModel(savedStateHandle)
                }
                else -> throw IllegalArgumentException("Unknown class $modelClass")
            } as T
        }
    }
    
  • lifecycle-viewmodel bietet jetzt eine viewModelFactory Kotlin-DSL, mit der du deine ViewModelProvider.Factory in Bezug auf einen oder mehrere Lambda-Initialisierer definieren kannst, einen für jede ViewModel-Klasse, die deine benutzerdefinierte Factory unterstützt, und verwende CreationExtras als primäre Datenquelle.

    val customFactory = viewModelFactory {
        // The return type of the lambda automatically sets what class this lambda handles
        initializer {
            // Get the Application object from extras provided to the lambda
            val application = checkNotNull(get(ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY))
            HomeViewModel(application)
        }
        initializer {
            val savedStateHandle = createSavedStateHandle()
            DetailViewModel(savedStateHandle)
        }
    }
    
  • lifecycle-viewmodel-compose bietet jetzt eine viewModel() API, die eine Lambda-Factory zum Erstellen einer ViewModel-Instanz verwendet, ohne eine benutzerdefinierte ViewModelProvider.Factory erstellen zu müssen.

    // Within a @Composable, you can now skip writing a custom Factory
    // and instead write a lambda to do the initialization of your ViewModel
    val detailViewModel = viewModel {
      // This lambda is only called the first time the ViewModel is created
      // and all CreationExtras are available inside the lambda
      val savedStateHandle = createSavedStateHandle()
      DetailViewModel(savedStateHandle)
    }
    
  • SavedStateHandle Compose Saver-Integration: Das Artefakt lifecycle-viewmodel-compose enthält jetzt neue experimentelle APIs in SavedStateHandle.saveable, die ein rememberSaveable-ähnliches Verhalten ermöglichen, das durch den SavedStateHandle eines ViewModel-Objekts unterstützt wird.

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

    Um beispielsweise einen Koroutinenbereich zu erstellen, den Sie in ein ViewModel einschleusen, aber durch Tests steuern können, können Sie einen CoroutineScope erstellen, der Closeable implementiert:

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

    Sie kann dann in Ihrem ViewModel-Konstruktor verwendet werden, wobei dieselbe Lebensdauer wie in viewModelScope beibehalten wird:

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

Änderungen des Verhaltens

  • Beim Versuch, Lifecycle.State von INITIALIZED in DESTROYED zu verschieben, wird jetzt immer ein IllegalStateException ausgegeben, unabhängig davon, ob der Lifecycle ein Beobachter zugeordnet ist.
  • LifecycleRegistry löscht jetzt die Beobachter, wenn sie den Status DESTROYED erreichen.

Version 2.5.0-rc02

15. Juni 2022

androidx.lifecycle:lifecycle-*:2.5.0-rc02 wird freigegeben. Version 2.5.0-rc02 enthält diese Commits.

Fehlerkorrekturen

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

Version 2.5.0-rc01

11. Mai 2022

androidx.lifecycle:lifecycle-*:2.5.0-rc01 wird freigegeben. Version 2.5.0-rc01 enthält diese Commits.

Fehlerkorrekturen

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

Version 2.5.0-beta01

20. April 2022

androidx.lifecycle:lifecycle-*:2.5.0-beta01 wird freigegeben. Version 2.5.0-beta01 enthält diese Commits.

API-Änderungen

  • SavedStateHandle.saveable-Property-Delegierte wurden hinzugefügt, um Property-Namen als Schlüssel für den beibehaltenen Status in der SavedStateHandle zu verwenden (I8bb86, b/225014345).

Fehlerkorrekturen

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

Version 2.5.0-alpha06

6. April 2022

androidx.lifecycle:lifecycle-*:2.5.0-alpha06 wird freigegeben. Version 2.5.0-alpha06 enthält diese Commits.

Neue Funktionen

  • Fügen Sie SavedStateHandle.saveable die experimentelle Überlastung MutableState hinzu, damit sie mit rememberSaveable übereinstimmt (I38cfe, b/224565154)

API-Änderungen

  • CreationExtras ist jetzt abstrakt statt versiegelt. (Ib8a7a)

Fehlerkorrekturen

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

Version 2.5.0-alpha05

23. März 2022

androidx.lifecycle:lifecycle-*:2.5.0-alpha05 wird freigegeben. Version 2.5.0-alpha05 enthält diese Commits.

Neue Funktionen

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

API-Änderungen

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

Fehlerkorrekturen

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

Version 2.5.0-alpha04

9. März 2022

androidx.lifecycle:lifecycle-*:2.5.0-alpha04 wird freigegeben. Version 2.5.0-alpha04 enthält diese Commits.

API-Änderungen

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

Version 2.5.0-alpha03

23. Februar 2022

androidx.lifecycle:lifecycle-*:2.5.0-alpha03 wird freigegeben. Version 2.5.0-alpha03 enthält diese Commits.

Neue Funktionen

  • Eine addCloseable() API und eine neue Konstruktorüberlastung wurden hinzugefügt, mit denen Sie ein oder mehrere Closeable-Objekte zu der Datei ViewModel hinzufügen können, die geschlossen wird, wenn die ViewModel gelöscht wird, ohne dass manuelle Maßnahmen in onCleared() erforderlich sind. (I55ea0)
  • lifecycle-viewmodel bietet jetzt eine InitializerViewModelFactory, mit der Sie Lambda für die Verarbeitung bestimmter ViewModel-Klassen hinzufügen können. Dabei wird CreationExtras als primäre Datenquelle verwendet. (If58fc, b/216687549)
  • lifecycle-viewmodel-compose bietet jetzt eine viewModel() API, die eine Lambda-Factory zum Erstellen einer ViewModel-Instanz verwendet, ohne eine benutzerdefinierte ViewModelProvider.Factory erstellen zu müssen. (I97fbb, b/216688927)

API-Änderungen

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

Änderungen des Verhaltens

  • Beim Versuch, Lifecycle.State von INITIALIZED in DESTROYED zu verschieben, wird jetzt immer ein IllegalStateException ausgegeben, unabhängig davon, ob der Lifecycle ein Beobachter zugeordnet ist. (I7c390, b/177924329)
  • LifecycleRegistry löscht jetzt die Beobachter, wenn sie den Status DESTROYED erreichen. (I4f8dd, b/142925860)

Version 2.5.0-alpha02

9. Februar 2022

androidx.lifecycle:lifecycle-*:2.5.0-alpha02 wird freigegeben. Version 2.5.0-alpha02 enthält diese Commits.

API-Änderungen

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

Änderungen des Verhaltens

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

Fehlerkorrekturen

  • Aus Lebenszyklus 2.4.1: lifecycle-process wurde aktualisiert und hängt von Start 1.1.1 ab, damit Korrekturen, die verhindern, dass ProcessLifecycleInitializer keinen 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 versuchen, eine ViewModel zu erstellen. (I340f7, b/177667711)
  • Sie können jetzt mithilfe von CreationExtras ein Ansichtsmodell mit AndroidViewModelFactory erstellen, ohne eine Anwendung festzulegen. (I6ebef, b/217271656)

Version 2.5.0-alpha01

26. Januar 2022

androidx.lifecycle:lifecycle-*:2.5.0-alpha01 wird freigegeben. Version 2.5.0-alpha01 enthält diese Commits.

ViewModel CreationExtras

Mit dieser Version legen wir den Grundstein für die Neustrukturierung der Struktur von ViewModel. Anstelle eines starren Satzes von Unterklassen von ViewModelProvider.Factory, die jeweils zusätzliche Funktionen hinzufügen (ein Application-Konstruktorparameter über AndroidViewModelFactory, ein SavedStateHandle-Konstruktorparameter über SavedStateViewModelFactory und AbstractSavedStateViewModelFactory usw. möglich), wechseln wir zu einer Welt zustandsloser Fabriken, die auf dem neuen Konzept CreationExtras beruhen. (Ia7343, b/188691010, b/188541057)

Mit dieser Änderung führt ViewModelProvider keine direkten Aufrufe mehr an die vorherige create(Class<T>)-Methode von ViewModelProvider.Factory aus. Stattdessen wird eine neue Überlastung von create aufgerufen: create(Class<T>, CreationExtras). Das bedeutet, dass jede direkte Implementierung der ViewModelProvider.Factory-Instanz jetzt auf jede der folgenden neuen CreationExtras zugreifen kann:

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

Diese Extras sind standardmäßig verfügbar, wenn Aktivität 1.5.0-alpha01, Fragment 1.5.0-alpha01 und Navigation 2.5.0-alpha01 verwendet werden. Wenn Sie eine frühere Version dieser Bibliotheken verwenden, ist CreationExtras leer – alle vorhandenen Unterklassen von ViewModelProvider.Factory wurden so umgeschrieben, dass sie sowohl den alten Erstellungspfad von früheren Versionen dieser Bibliotheken als auch den künftig verwendeten CreationExtras-Pfad unterstützen.

Mit diesen CreationExtras können Sie eine ViewModelProvider.Factory konstruieren, die nur die Informationen an jede ViewModel übergibt, die Sie benötigen, ohne eine strenge Hierarchie von Factory-Unterklassen zu verwenden:

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

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

Die benutzerdefinierte CreationExtras kann angegeben werden, indem du getDefaultViewModelCreationExtras() in deiner ComponentActivity oder Fragment überschreibst. So stehen sie deiner benutzerdefinierten ViewModelProvider.Factory als integrierte Form der unterstützten Injektion zur Verfügung. Diese Extras werden Ihrer benutzerdefinierten Factory automatisch zur Verfügung gestellt, wenn sie direkt mit ViewModelProvider oder den Kotlin-Attributerweiterungen by viewModels() und by activityViewModels() verwendet werden. (I79f2b, b/207012584, b/207012585, b/207012490)

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem der Standardwert für ein SavedStateHandle nach dem Tod und der Neuerstellung eines Prozesses wieder angezeigt wurde, selbst wenn er ausdrücklich aus dem SavedStateHandle entfernt wurde. Infolgedessen führt SavedStateHandle die Standardwerte und die wiederhergestellten Werte nicht mehr zusammen. Stattdessen werden nur die wiederhergestellten Werte als zentrale Datenquelle verwendet. (I53a4b)

Version 2.4

Version 2.4.1

9. Februar 2022

androidx.lifecycle:lifecycle-*:2.4.1 wird freigegeben. Version 2.4.1 enthält diese Commits.

Fehlerkorrekturen

  • Aus Lebenszyklus 2.5.0-alpha01 rückportiert: Ein Problem wurde behoben, bei dem der Standardwert für eine SavedStateHandle nach dem Tod und der Neuerstellung eines Prozesses wieder angezeigt wurde, selbst wenn er explizit aus der SavedStateHandle entfernt wurde. Infolgedessen führt SavedStateHandle die Standardwerte und die wiederhergestellten Werte nicht mehr zusammen. Stattdessen werden nur die wiederhergestellten Werte als zentrale Datenquelle verwendet. (I53a4b)
  • lifecycle-process hängt jetzt von Androidx Startup 1.1.1 ab, die eine Regression behoben hat, bei der die Verwendung von ProcessLifecycleInitializer zu einem StartupException führen würde. (b/216490724)

Version 2.4.0

27. Oktober 2021

androidx.lifecycle:lifecycle-*:2.4.0 wird freigegeben. Version 2.4.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.3.0

  • @OnLifecycleEvent“ wurde verworfen. Verwenden Sie stattdessen LifecycleEventObserver oder DefaultLifecycleObserver.
  • Bibliothek „androidx.lifecycle:lifecycle-viewmodel-compose“ wurde hinzugefügt. Er stellt die zusammensetzbare Funktion viewModel() und LocalViewModelStoreOwner bereit.
    • Wichtige Änderung: ViewModelProvider wurde in Kotlin neu geschrieben. Die Methode ViewModelProvider.Factory.create lässt keine generischen Nullwerte mehr zu.
  • Neue Coroutines API wurde zu androidx.lifecycle:lifecycle-runtime-ktx hinzugefügt:
  • Lifecycle.repeatOnLifecycle: API, die einen Codeblock in einer Koroutine ausführt, wenn sich der Lebenszyklus zumindest in einem bestimmten Zustand befindet. Die Blockierung wird abgebrochen und neu gestartet, wenn sich der Lebenszyklus in den Zielstatus hinein- und aus diesem herausbewegt.
  • Flow.flowWithLifecycle, API, die Werte aus dem Upstream-Ablauf ausgibt, wenn sich der Lebenszyklus mindestens in einem bestimmten Zustand befindet.
  • DefaultLifecycleObserver wurde von lifecycle.lifecycle-common-java8 in lifecycle.lifecycle-common verschoben. lifecycle.lifecycle-common-java8 bietet neben lifecycle.lifecycle-common keine zusätzlichen Funktionen mehr. Die Abhängigkeit davon kann also durch lifecycle.lifecycle-common ersetzt werden.
  • Die Nicht-Coroutinen-API von lifecycle-viewmodel-ktx wurde in das lifecycle-viewmodel-Modul verschoben.
  • lifecycle-process verwendet jetzt androidx.startup, um ProcessLifecycleOwner zu initialisieren.

    Zuvor wurde diese Änderung von androidx.lifecycle.ProcessLifecycleOwnerInitializer vorgenommen.

    Wenn Sie in der Vergangenheit tools:node="remove" ContentProvider zum Initialisieren des Prozesslebenszyklus verwendet haben, müssen Sie stattdessen so vorgehen.

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

    (oder)

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

Version 2.4.0-rc01

29. September 2021

androidx.lifecycle:lifecycle-*:2.4.0-rc01 wird ohne Änderungen gegenüber Lebenszyklus 2.4.0-beta01 freigegeben. Version 2.4.0-rc01 enthält diese Commits.

Version 2.4.0-beta01

15. September 2021

androidx.lifecycle:lifecycle-*:2.4.0-beta01 wird freigegeben. Version 2.4.0-beta01 enthält diese Commits.

API-Änderungen

  • @OnLifecycleEvent“ wurde verworfen. Verwenden Sie stattdessen LifecycleEventObserver oder DefaultLifecycleObserver. (I5a8fa)
  • DefaultLifecycleObserver wurde von androidx.lifecycle.lifecycle-common-java8 nach androidx.lifecycle.lifecycle-common verschoben. androidx.lifecycle.lifecycle-common-java8 bietet neben androidx.lifecycle.lifecycle-common keine zusätzlichen Funktionen mehr. Die Abhängigkeit davon kann also durch androidx.lifecycle.lifecycle-common ersetzt werden. (I021aa)
  • Die Nicht-Coroutinen-API von lifecycle-viewmodel-ktx wurde in das Modul lifecycle-viewmodel verschoben. (I6d5b2)

Externer Beitrag

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

Version 2.4.0-alpha03

4. August 2021

androidx.lifecycle:lifecycle-*:2.4.0-alpha03 wird freigegeben. Version 2.4.0-alpha03 enthält diese Commits.

API-Änderungen

  • Wichtige Änderung: ViewModelProvider wurde in Kotlin neu geschrieben. Die Methode ViewModelProvider.Factory.create lässt keine generischen Nullwerte mehr zu. (I9b9f6)

Änderungen des Verhaltens

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

Externer Beitrag

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

Version 2.4.0-alpha02

16. Juni 2021

androidx.lifecycle:lifecycle-*:2.4.0-alpha02 wird freigegeben. Version 2.4.0-alpha02 enthält diese Commits.

Neue Funktionen

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

API-Änderungen

  • Die LifecycleOwner.addRepeatingJob API wird zu Lifecycle.repeatOnLifecycle entfernt, die strukturierte Nebenläufigkeit 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 Lint-Prüfung NullSafeMutableLiveData, wenn das Feld Modifikatoren enthält, wurde behoben. (#147, b/183696616)
  • Ein weiteres Problem mit der Lint-Prüfung NullSafeMutableLiveData bei Verwendung von generischen Elementen wurde behoben. (#161, b/184830263)

Externer Beitrag

Version 2.4.0-alpha01

24. März 2021

androidx.lifecycle:lifecycle-*:2.4.0-alpha01 wird freigegeben. Version 2.4.0-alpha01 enthält diese Commits.

Änderungen des Verhaltens

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

    Zuvor wurde diese Änderung von androidx.lifecycle.ProcessLifecycleOwnerInitializer vorgenommen.

    Wenn Sie in der Vergangenheit tools:node="remove" ContentProvider zum Initialisieren des Prozesslebenszyklus verwendet haben, müssen Sie stattdessen so vorgehen.

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

    (oder)

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

API-Änderungen

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

Fehlerkorrekturen

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

Lebenszyklusansichtsmodell-Compose-Version 1.0.0

Version 1.0.0-alpha07

16. Juni 2021

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

Wichtige API-Änderungen

  • Für viewModel() ist jetzt ein optionales ViewModelStoreOwner erforderlich. Dies vereinfacht die Zusammenarbeit mit anderen Inhabern als dem LocalViewModelStoreOwner. Du kannst jetzt beispielsweise viewModel(navBackStackEntry) verwenden, um ein ViewModel abzurufen, das mit einem bestimmten Navigationsdiagramm verknüpft ist. (I2628d, b/188693123)

Version 1.0.0-alpha06

2. Juni 2021

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

Aktualisiert und mit der Erstellungsfunktion 1.0.0-beta08 kompatibel.

Version 1.0.0-alpha05

18. Mai 2021

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

Neue Funktionen

  • Aktualisiert und mit der Erstellungsfunktion 1.0.0-beta07 kompatibel.

Fehlerkorrekturen

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

Version 1.0.0-alpha04

7. April 2021

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

Änderungen bei Abhängigkeiten

  • Mit dieser Version können androidx.hilt:hilt-navigation-compose 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 1.0.0 müssen der Compiler und die Laufzeit übereinstimmen.

Version 1.0.0-alpha03

10. März 2021

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

API-Änderungen

  • LocalViewModelStoreOwner.current gibt jetzt eine ViewModelStoreOwner zurück, bei der Nullwerte zulässig sind, um besser feststellen zu können, ob eine ViewModelStoreOwner in der aktuellen Zusammensetzung verfügbar ist. APIs, die ein ViewModelStoreOwner erfordern, z. B. viewModel() und NavHost, geben trotzdem eine Ausnahme aus, wenn ViewModelStoreOwner nicht festgelegt ist. (Idf39a)

Lifecycle-Viewmodel-Compose Version 1.0.0-alpha02

24. Februar 2021

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

API-Änderungen

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

Lifecycle-Viewmodel-Compose Version 1.0.0-alpha01

10. Februar 2021

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

Neue Funktionen

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

Version 2.3.1

Lebenszyklus-Version 2.3.1

24. März 2021

androidx.lifecycle:lifecycle-*:2.3.1 wird freigegeben. Version 2.3.1 enthält diese Commits.

Fehlerkorrekturen

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

Version 2.3.0

Version 2.3.0

10. Februar 2021

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

Wichtige Änderungen seit Version 2.2.0

  • SavedStateHandle-Unterstützung für nicht parcelable-Klassen: SavedStateHandle unterstützt jetzt die Lazy-Serialisierung. Sie können damit setSavedStateProvider() für einen bestimmten Schlüssel aufrufen und eine SavedStateProvider bereitstellen, die einen Callback von saveState() erhält, wenn das SavedStateHandle-Element aufgefordert wird, seinen Status zu speichern. Weitere Informationen finden Sie unter Nicht Parzellenfähige Klassen speichern.
  • Durchsetzung des Lebenszyklusverhaltens:
    • LifecycleRegistry erzwingt jetzt DESTROYED als Terminalstatus.
    • LifecycleRegistry prüft jetzt, ob die Methoden im Hauptthread aufgerufen werden. Dies war schon immer eine Voraussetzung für Lebenszyklen von Aktivitäten, Fragmenten usw. Durch das Hinzufügen von Beobachtern aus Nicht-Hauptthreads konnten Abstürze während der Laufzeit nur schwer erkannt werden. Bei LifecycleRegistry-Objekten, die Ihren eigenen Komponenten gehören, können Sie Prüfungen explizit mit LifecycleRegistry.createUnsafe(...) deaktivieren. Sie müssen dann jedoch dafür sorgen, dass eine ordnungsgemäße Synchronisierung erfolgt, wenn auf dieses LifecycleRegistry aus verschiedenen Threads zugegriffen wird.
  • Lebenszyklusstatus und Ereignishelfer: Es wurden statische Hilfsmethoden von downFrom(State), downTo(State), upFrom(State), upTo(State) zu Lifecycle.Event hinzugefügt, um die Event mit State- und Übergangsrichtung zu generieren. Die Methode getTargetState() wurde hinzugefügt, die die State bereitstellt, zu der der Lebenszyklus direkt nach der Event übergeht.
  • withStateAtLeast: Es wurden Lifecycle.withStateAtLeast APIs hinzugefügt, die auf einen Lebenszyklusstatus warten und einen Codeblock ohne Sperrung synchron zum Zeitpunkt der Statusänderung ausführen und dann mit dem Ergebnis fortfahren. Diese APIs unterscheiden sich von den vorhandenen when*-Methoden, da sie das Ausführen von Code zum Anhalten nicht erlauben und keinen benutzerdefinierten Dispatcher verwenden. (aosp/1326081)
  • ViewTree APIs: Mit den neuen APIs ViewTreeLifecycleOwner.get(View) und ViewTreeViewModelStoreOwner.get(View) können Sie bei einer View-Instanz die LifecycleOwner bzw. ViewModelStoreOwner abrufen, in der sie enthalten sind. Sie müssen ein Upgrade auf Activity 1.2.0 und Fragment 1.3.0 sowie AppCompat 1.3.0-alpha01 oder höher ausführen, damit die Felder korrekt ausgefüllt werden. Die Kotlin-Erweiterungen findViewTreeLifecycleOwner und findViewTreeViewModelStoreOwner sind in lifecycle-runtime-ktx bzw. lifecycle-viewmodel-ktx verfügbar.
  • Einstellung der LiveData.observe()-Kotlin-Erweiterung: Die für die Lambda-Syntax erforderliche LiveData.observe()-Kotlin-Erweiterung wurde eingestellt, da sie bei Kotlin 1.4 nicht mehr erforderlich ist.

Version 2.3.0-rc01

16. Dezember 2020

androidx.lifecycle:lifecycle-*:2.3.0-rc01 wird freigegeben. Version 2.3.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Die keys()-Methode von SavedStateHandle ist jetzt vor und nach dem Speichern des Status konsistent. Sie enthält jetzt zusätzlich zu den mit set() und getLiveData() verwendeten Schlüsseln 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 freigegeben. Version 2.3.0-beta01 enthält diese Commits.

API-Änderungen

  • Die zur Verwendung der Lambda-Syntax erforderliche Kotlin-Erweiterung LiveData.observe() wurde eingestellt, da sie bei Kotlin 1.4 nicht mehr erforderlich ist. (I40d3f)

Fehlerkorrekturen

Änderungen an der Dokumentation

  • Der liveData-Builder und die asLiveData()-Dokumentation wurden aktualisiert, um Details zum Ändern der angegebenen Zeitüberschreitungswerte zu enthalten. (aosp/1122324)

Version 2.3.0-alpha07

19. August 2020

androidx.lifecycle:lifecycle-*:2.3.0-alpha07 wird freigegeben. Version 2.3.0-alpha07 enthält diese Commits.

Fehlerkorrekturen

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

Version 2.3.0-alpha06

22. Juli 2020

androidx.lifecycle:lifecycle-*:2.3.0-alpha06 wird freigegeben. Version 2.3.0-alpha06 enthält diese Commits.

Neue Funktionen

  • Statische Hilfsmethoden von downFrom(State), downTo(State), upFrom(State), upTo(State) Lifecycle.Event zum Generieren von Event für bestimmte State- und Übergangsrichtungen wurden hinzugefügt. Die Methode getTargetState() wurde hinzugefügt, die die State bereitstellt, zu der der Lebenszyklus direkt nach der Event übergeht. (I00887)
  • Es wurden Lifecycle.withStateAtLeast APIs hinzugefügt, die auf einen Lebenszyklusstatus warten und einen Codeblock ohne Sperrung synchron zum Zeitpunkt der Statusänderung ausführen und dann mit dem Ergebnis fortfahren. Diese APIs unterscheiden sich von den vorhandenen when*-Methoden, da sie das Ausführen von Code zum Anhalten nicht erlauben und keinen benutzerdefinierten Dispatcher verwenden. (aosp/1326081)

Änderungen des Verhaltens

  • LifecycleRegistry erzwingt jetzt DESTROYED als Terminalstatus. (I00887)
  • LifecycleRegistry prüft jetzt, ob die Methoden im Hauptthread aufgerufen werden. Dies war schon immer eine Voraussetzung für Lebenszyklen von Aktivitäten, Fragmenten usw. Durch das Hinzufügen von Beobachtern aus Nicht-Hauptthreads konnten Abstürze während der Laufzeit nur schwer erkannt werden. Bei LifecycleRegistry-Objekten, die Ihren eigenen Komponenten gehören, können Sie Prüfungen explizit mit LifecycleRegistry.createUnsafe(...) deaktivieren. Sie müssen jedoch dafür sorgen, dass eine ordnungsgemäße Synchronisierung erfolgt, wenn auf diese 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 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 freigegeben. Version 2.3.0-alpha05 enthält diese Commits.

Fehlerkorrekturen

  • LiveData ist nun besser für die Bearbeitung von Fällen, die erneut eintreten, und vermeidet doppelte Aufrufe von onActive() oder onInactive(). (b/157840298)
  • Es wurde ein Problem behoben, bei dem Lint-Prüfungen nicht ausgeführt wurden, wenn Android Studio 4.1 Canary 6 oder höher verwendet wurde. (aosp/1331903)

Version 2.3.0-alpha04

10. Juni 2020

androidx.lifecycle:lifecycle-*:2.3.0-alpha04 wird freigegeben. Version 2.3.0-alpha04 enthält diese Commits.

Fehlerkorrekturen

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

Version 2.3.0-alpha03

20. Mai 2020

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

Neue Funktionen

  • SavedStateHandle unterstützt jetzt Lazy Serialisierung, indem es Ihnen ermöglicht, setSavedStateProvider() für einen bestimmten Schlüssel aufzurufen und ein SavedStateProvider bereitzustellen, das einen Callback von saveState() erhält, wenn SavedStateHandle aufgefordert wird, seinen Status zu speichern. (b/155106862)
  • Mit einer neuen ViewTreeViewModelStoreOwner.get(View) API können Sie die enthaltene ViewModelStoreOwner bei einer View-Instanz abrufen. Sie müssen ein Upgrade auf Activity 1.2.0-alpha05, Fragment 1.3.0-alpha05 und AppCompat 1.3.0-alpha01 ausführen, damit dieses Feld korrekt ausgefüllt wird. lifecycle-viewmodel-ktx wurde die Kotlin-Erweiterung findViewModelStoreOwner() hinzugefügt. (aosp/1295522)

Fehlerkorrekturen

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

Version 2.3.0-alpha02

29. April 2020

androidx.lifecycle:lifecycle-*:2.3.0-alpha02 wird freigegeben. Version 2.3.0-alpha02 enthält diese Commits.

API-Änderungen

  • Mit SavedStateViewModelFactory können Sie jetzt ein Null-Application an seinen Konstruktor übergeben, um besser Fälle zu berücksichtigen, in denen eine solche nicht verfügbar ist und AndroidViewModel keine Unterstützung benötigt. (aosp/1285740)

Fehlerkorrekturen

  • Verbesserte Kaltstartleistung durch Vermeidung von Fehlern bei der Klassenüberprüfung auf Geräten mit API 28 und niedriger. (aosp/1282118)

Version 2.3.0-alpha01

4. März 2020

androidx.lifecycle:lifecycle-*:2.3.0-alpha01 wird freigegeben. Version 2.3.0-alpha01 enthält diese Commits.

Neue Funktionen

  • Mit einer neuen ViewTreeLifecycleOwner.get(View) API können Sie die enthaltene LifecycleOwner bei einer View-Instanz abrufen. Sie müssen ein Upgrade auf Aktivität 1.2.0-alpha01 und Fragment 1.3.0-alpha01 durchführen, um dieses Feld korrekt auszufüllen. In lifecycle-runtime-ktx ist die Kotlin-Erweiterung findViewTreeLifecycleOwner verfügbar. (aosp/1182361, aosp/1182956)
  • Es wurde eine neue Lint-Prüfung hinzugefügt, die Sie warnt, wenn ein null-Wert für eine MutableLiveData festgelegt wird, die in Kotlin als nicht null definiert wurde. Dies ist verfügbar, wenn die Artefakte livedata-core-ktx oder livedata-ktx verwendet werden. (aosp/1154723, aosp/1159092)
  • Es ist ein neues lifecycle-runtime-testing-Artefakt verfügbar, das eine TestLifecycleOwner bereitstellt, die LifecycleOwner implementiert und einen Thread-sicheren änderbaren Lifecycle bietet. (aosp/1242438)

Fehlerkorrekturen

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

Version 2.2.0

ViewModel-Savedstate Version 2.2.0

5. Februar 2020

androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0 wird freigegeben. Version 2.2.0 enthält diese Commits.

„Lifecycle ViewModel“ hat jetzt dieselbe Version wie andere Lebenszyklusartefakte. Das Verhalten von 2.2.0 entspricht dem von 1.0.0.

Version 2.2.0

22. Januar 2020

androidx.lifecycle:lifecycle-*:2.2.0 wird freigegeben. Version 2.2.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.1.0

  • Lebenszyklus-Koroutinenintegration: Das neue lifecycle-runtime-ktx-Artefakt bietet eine Integration zwischen Lebenszyklus- und Kotlin-Coroutinen. lifecycle-livedata-ktx wurde ebenfalls erweitert, um von Koroutinen zu profitieren. Weitere Informationen finden Sie unter Kotlin-Coroutinen mit Architekturkomponenten verwenden.
  • Einstellung von ViewModelProviders.of(): ViewModelProviders.of() wurde eingestellt. Sie können ein Fragment oder FragmentActivity an den neuen ViewModelProvider(ViewModelStoreOwner)-Konstruktor übergeben, um dieselbe Funktionalität zu erreichen, wenn Sie Fragment 1.2.0 verwenden.
  • Einstellung von lifecycle-extensions-Artefakten: Mit der oben genannten Einstellung von ViewModelProviders.of() wird in diesem Release auch die letzte API in lifecycle-extensions eingestellt. Dieses Artefakt sollte jetzt in seiner Gesamtheit als verworfen betrachtet werden. Wir empfehlen dringend, sich an den spezifischen Lebenszyklusartefakten zu orientieren, die Sie benötigen (z. B. lifecycle-service, wenn Sie LifecycleService verwenden, und lifecycle-process, wenn Sie ProcessLifecycleOwner verwenden) und nicht lifecycle-extensions, da es keine zukünftige 2.3.0-Version von lifecycle-extensions geben wird.
  • Gradle Partial Annotation Processor: Der Annotationsprozessor von Lifecycle ist standardmäßig inkrementell. Wenn Ihre Anwendung in der Programmiersprache Java 8 geschrieben ist, können Sie stattdessen DefautLifecycleObserver verwenden. Ist sie in der Programmiersprache Java 7 geschrieben, können Sie LifecycleEventObserver verwenden.

Version 2.2.0-rc03

4. Dezember 2019

androidx.lifecycle:lifecycle-*:2.2.0-rc03 wird freigegeben. Version 2.2.0-rc03 enthält diese Commits.

Fehlerkorrekturen

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

Externe Beiträge

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

Abhängigkeitsänderungen

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

Version 2.2.0-rc02

7. November 2019

androidx.lifecycle:lifecycle-*:2.2.0-rc02 wird freigegeben. Version 2.2.0-rc02 enthält diese Commits.

Fehlerkorrekturen

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

Version 2.2.0-rc01

23. Oktober 2019

androidx.lifecycle:lifecycle-*:2.2.0-rc01 wird freigegeben. Version 2.2.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem launchWhenCreated und ähnliche Methoden einen Frame später als die verknüpfte Lebenszyklusmethode ausgeführt haben, da Dispatchers.Main anstelle von Dispatchers.Main.immediate verwendet wurde. (aosp/1145596)

Externe Beiträge

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

Version 2.2.0-beta01

9. Oktober 2019

androidx.lifecycle:lifecycle-*:2.2.0-beta01 wird freigegeben. Version 2.2.0-beta01 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde eine Regression behoben, die in Lebenszyklus 2.2.0-alpha05 in der Reihenfolge ProcessLifecycleOwner eingeführt wurde und die LifecycleOwner der Aktivität auf Android 10-Geräten zum Beginn und fortgesetzt wurde. (aosp/1128132)
  • Eine im Lebenszyklus 2.2.0-alpha05 eingeführte Regression wurde behoben, die bei Verwendung von 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 freigegeben. Version 2.2.0-alpha05 enthält diese Commits.

Fehlerkorrekturen

  • Eine Race-Bedingung im Livedata-Builder für Coroutine wurde behoben. b/140249349

Version 2.2.0-alpha04

5. September 2019

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

Neue Funktionen

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

Externe Beiträge

  • Vielen Dank an Nicklas Ansman für den Wechsel zu Dispatchers.Main.immediate! (aosp/1106073)

Version 2.2.0-alpha03

7. August 2019

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

Neue Funktionen

API-Änderungen

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

Version 2.2.0-alpha02

2. Juli 2019

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

API-Änderungen

  • LiveDataScope.initialValue wurde durch LiveDataScope.latestValue ersetzt, um den aktuell ausgegebenen Wert des Blocks liveData zu verfolgen.
  • Dem liveData-Builder, der den timeout-Parameter als Typ Duration empfängt, wurde eine neue Überlastung hinzugefügt.

Version 2.2.0-alpha01

7. Mai 2019

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

Neue Funktionen

  • Dieser Release enthält neue Funktionen, die Kotlin-Koroutinen für Lifecycle und LiveData unterstützen. Eine ausführliche Dokumentation finden Sie hier.

ViewModel-SavedState Version 1.0.0

Version 1.0.0

22. Januar 2020

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0 wird freigegeben. Version 1.0.0 enthält diese Commits.

Wichtige Funktionen in Version 1.0.0

  • Die neue Klasse SavedStateHandle wurde hinzugefügt. Damit können Ihre ViewModel-Klassen auf den gespeicherten Status zugreifen und zum gespeicherten Status beitragen. Dieses Objekt kann im Konstruktor der ViewModel-Klasse und Factorys empfangen werden, die standardmäßig von Fragments bereitgestellt werden. AppCompatActivity injiziert SavedStateHandle automatisch.
  • ZusammenfassungSavedStateViewModelFactory wurde hinzugefügt. Damit können Sie benutzerdefinierte Factorys für ViewModel erstellen und ihnen Zugriff auf SavedStateHandle gewähren.

ViewModel-Savedstate Version 1.0.0-rc03

4. Dezember 2019

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

Abhängigkeitsänderungen

  • Der gespeicherte Status von „ViewModel“ im Lebenszyklus hängt jetzt vom Lebenszyklus 2.2.0-rc03 ab.

Viewmodel-Savedstate Version 1.0.0-rc02

7. November 2019

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

Abhängigkeitsänderungen

  • Ist jetzt vom Lebenszyklus 2.2.0-rc02 abhängig.

ViewModel-SavedState Version 1.0.0-rc01

23. Oktober 2019

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc01 wird ohne Änderungen im Vergleich zu 1.0.0-beta01 veröffentlicht. Version 1.0.0-rc01 enthält diese Commits.

ViewModel-Savedstate Version 1.0.0-beta01

9. Oktober 2019

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

Fehlerkorrekturen

  • Es wurde ein Problem behoben, bei dem der erste Zugriff auf eine SavedState ViewModel in Activity.onActivityResult() zu einem IllegalStateException führte. (b/139093676)
  • Ein IllegalStateException bei der Verwendung von AbstractSavedStateViewModelFactory wurde behoben. (b/141225984)

ViewModel-SavedState Version 1.0.0-alpha05

18. September 2019

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha05 wird freigegeben. Version 1.0.0-alpha05 enthält diese Commits.

API-Änderungen

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

ViewModel-SavedState Version 1.0.0-alpha03

7. August 2019

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

Wichtige Änderungen

ViewModel-SavedState Version 1.0.0-alpha02

2. Juli 2019

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

Neue Funktionen

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

API-Änderungen

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

ViewModel-Savedstate Version 1.0.0-alpha01

13. März 2019

androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01 wird freigegeben. Das vollständige Commit-Log für diesen ersten Release finden Sie hier.

Neue Funktionen

  • ViewModels kann jetzt zum gespeicherten Zustand beitragen. Dazu verwenden Sie den neu eingeführten Factory-SavedStateVMFactory von Viewmodel und Ihr ViewModel sollte einen Konstruktor haben, der das SavedStateHandle-Objekt als Parameter empfängt.

Version 2.1.0

Wichtige Änderungen seit Version 2.0.0

  • LifecycleEventObserver wurde für Fälle hinzugefügt, in denen ein Stream von Lebenszyklusereignissen benötigt wird. Es ist eine öffentliche API und keine ausgeblendete GenericLifecycleObserver-Klasse.
  • ktx-Erweiterungen für LiveData.observe-Methoden und Transformations.*-Methoden hinzugefügt.
  • Transformations.distinctUntilChanged wurde hinzugefügt, um ein neues LiveData-Objekt zu erstellen, das erst dann einen Wert ausgibt, wenn der Quellwert LiveData geändert wurde.
  • Die Unterstützung von Koroutinen wurde in ViewModels durch Hinzufügen der Erweiterungseigenschaft ViewModel.viewModelScope hinzugefügt.

Version 2.1.0

5. September 2019

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

Version 2.1.0-rc01

2. Juli 2019

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

Version 2.1.0-beta01

7. Mai 2019

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

Neue Funktionen

  • Die Lebenszyklen sind jetzt in der Betaphase: Die in früheren Alphaversionen eingeführten APIs wie liveData-Erweiterungsfunktionen für Transformationen und Beobachtungen, die ViewModel-Initialisierung mit Attributdelegierung und andere sind stabil und werden sich nicht ändern.

Version 2.1.0-alpha04

3. April 2019

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

API-Änderungen

  • Nicht abwärtskompatible Änderung: Die zugrunde liegende API hinter by viewModels() und by activityViewModels() wurde geändert, sodass ViewModelStore direkt und nicht mehr nur ViewModelStoreOwner unterstützt wird. (aosp/932932)

Version 2.1.0-alpha03

13. März 2019

androidx.lifecycle:*:2.1.0-alpha03 wird freigegeben. Die vollständige Liste der in dieser Version enthaltenen Commits finden Sie hier.

API-Änderungen

  • "ViewModelProvider.KeyedFactory" wurde entfernt. Die zweite Schnittstelle neben ViewModelProvider.Factory bot keine guten Ergebnisse für die neuen Funktionen zur Property-Delegierung in Kotlin by viewmodels {}. (aosp/914133)

Version 2.1.0-alpha02

30. Januar 2019

androidx.lifecycle 2.1.0-alpha02 wird freigegeben.

API-Änderungen

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

Fehlerkorrekturen

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

Version 2.1.0-alpha01

17. Dezember 2018

androidx.lifecycle 2.1.0-alpha01 wird freigegeben.

Neue Funktionen

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

Version 2.0.0

Version 2.0.0

21. September 2018

Lebenszyklus 2.0.0 wurde mit einer Fehlerkorrektur von 2.0.0-rc01 in ViewModel freigegeben.

Fehlerkorrekturen

  • Problem mit einer ViewModel-Proguard-Regel behoben, durch die Konstruktoren b/112230489 fälschlicherweise entfernt wurden

Version 2.0.0-beta01

2. Juli 2018

Fehlerkorrekturen

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

Vor AndroidX-Versionen

Schließen Sie für die folgenden Vor-AndroidX-Versionen von Lifecycle die folgenden Abhängigkeiten ein:

dependencies {
    def lifecycle_version = "1.1.1"

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

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

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

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

Version 1.1.1

21. März 2018

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

lifecycle:common ist eine Abhängigkeit von lifecycle:runtime. Diese Änderung wirkt sich daher nicht direkt auf lifecycle:runtime aus, sondern nur auf Module, die wie die Paginierung direkt von lifecycle:common abhängig sind.

Version 1.1.0

22. Januar 2018

Änderungen bei der Paketerstellung

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

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

API-Änderungen

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