Compose-Laufzeit
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshots
(API-Referenzdokumentation für alle Compose-Pakete ansehen)
Letzte Aktualisierung | Stabile Version | Releasekandidat | Beta-Ausgabe | Alpharelease |
---|---|---|---|---|
2. Juli 2025 | 1.8.3 | - | 1.9.0-beta02 | - |
Struktur
Compose ist eine Kombination aus 7 Maven-Gruppen-IDs innerhalb von androidx
. Jede Gruppe enthält eine bestimmte Teilmenge von Funktionen mit jeweils eigenen Versionshinweisen.
In dieser Tabelle werden die Gruppen erläutert und es sind Links zu den jeweiligen Versionshinweisen enthalten.
Gruppe | Beschreibung |
---|---|
compose.animation | Animationen in Jetpack Compose-Anwendungen erstellen, um die Nutzerfreundlichkeit zu verbessern. |
compose.compiler | @Composable-Funktionen transformieren und Optimierungen mit einem Kotlin-Compiler-Plug-in ermöglichen |
compose.foundation | Mit den einsatzbereiten Bausteinen können Sie Jetpack Compose-Anwendungen schreiben und die Grundlage erweitern, um eigene Designsystemkomponenten zu erstellen. |
compose.material | Jetpack Compose-UIs mit einsatzbereiten Material Design-Komponenten erstellen Dies ist der Einstiegspunkt auf höherer Ebene für Compose. Er soll Komponenten bereitstellen, die den auf www.material.io beschriebenen Komponenten entsprechen. |
compose.material3 | Mit Material Design 3-Komponenten, der nächsten Generation von Material Design, können Sie Jetpack Compose-UIs erstellen. Material 3 umfasst aktualisierte Designs und Komponenten sowie Material You-Personalisierungsfunktionen wie dynamische Farben. Es ist auf den neuen visuellen Stil und die System-UI von Android 12 abgestimmt. |
compose.runtime | Grundlegende Bausteine des Programmiermodells und der Statusverwaltung von Compose sowie die Core-Laufzeit für das Compose Compiler-Plug-in. |
compose.ui | Grundlegende Komponenten der Compose-Benutzeroberfläche, die für die Interaktion mit dem Gerät erforderlich sind, einschließlich Layout, Zeichnen und Eingabe. |
Abhängigkeiten deklarieren
Wenn Sie eine Abhängigkeit von Compose hinzufügen möchten, müssen Sie Ihrem Projekt das Google Maven-Repository hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.
Fügen Sie der Datei build.gradle
für Ihre App oder Ihr Modul die Abhängigkeiten für die benötigten Artefakte hinzu:
Cool
dependencies { implementation "androidx.compose.runtime:runtime:1.8.3" implementation "androidx.compose.runtime:runtime-livedata:1.8.3" implementation "androidx.compose.runtime:runtime-rxjava2:1.8.3" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.runtime:runtime:1.8.3") implementation("androidx.compose.runtime:runtime-livedata:1.8.3") implementation("androidx.compose.runtime:runtime-rxjava2:1.8.3") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Weitere Informationen zu Abhängigkeiten finden Sie unter Build-Abhängigkeiten hinzufügen.
Feedback
Ihr Feedback hilft uns, Jetpack zu verbessern. Lassen Sie es uns wissen, wenn Sie neue Probleme entdecken oder Ideen zur Verbesserung dieser Bibliothek haben. Sehen Sie sich die vorhandenen Probleme in dieser Bibliothek an, bevor Sie ein neues erstellen. Sie können für ein vorhandenes Problem abstimmen, indem Sie auf die Schaltfläche mit dem Stern klicken.
Weitere Informationen finden Sie in der Dokumentation zur Problemverfolgung.
Laufzeit-Tracing Version 1.7
Version 1.7.0-rc01
18. September 2024
androidx.compose.runtime:runtime-tracing:1.7.0-rc01
wird veröffentlicht. Version 1.7.0-rc01 enthält diese Commits.
Laufzeit-Tracing Version 1.0
Version 1.0.0-beta01
29. November 2023
androidx.compose.runtime:runtime-tracing:1.0.0-beta01
wird veröffentlicht. Version 1.0.0-beta01 enthält diese Commits.
Version 1.0.0-alpha05
15. November 2023
androidx.compose.runtime:runtime-tracing:1.0.0-alpha05
wird veröffentlicht. Version 1.0.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
- Abhängigkeiten an die niedrigsten unterstützten stabilen Versionen angepinnt (z. B. compose-runtime und tracing-perfetto). Dadurch wird ein Problem behoben, bei dem durch compose-runtime-tracing eine neuere Version von compose-runtime in die App eingeführt wurde.
Version 1.0.0-alpha04
23. August 2023
androidx.compose.runtime:runtime-tracing:1.0.0-alpha04
wird veröffentlicht. Version 1.0.0-alpha04 enthält diese Commits.
Neue Funktionen
- Kompatibel mit den neuesten Versionen von Benchmark und Tracing Perfetto, wodurch die Unterstützung für Composition Tracing beim App-Start (Kaltstart) z.B. in AndroidX Benchmark und Android Studio (ab Hedgehog Beta 2) ermöglicht wird.
API-Änderungen
androidx.tracing.perfetto.Trace
wurde inandroidx.tracing.perfetto.PerfettoSdkTrace
umbenannt. (I44af8)- Die Perfetto SDK-APIs für das Tracing werden an
android.os.Trace
angepasst. (I73ba0, b/282199917) - Voraussetzungen für das Tracing beim App-Start. (Iad890)
- Zusammenführung von experimentellen und öffentlichen API-Dateien (I0f2e1, b/278769092)
Version 1.0.0-alpha02
8. Februar 2023
androidx.compose.runtime:runtime-tracing:1.0.0-alpha02
wird veröffentlicht. Version 1.0.0-alpha02 enthält diese Commits.
Neue Funktionen
- Keine funktionalen Änderungen. Mehrere Leistungsoptimierungen in nachgelagerten Abhängigkeiten
androidx.tracing:tracing-perfetto*
.
Version 1.0.0-alpha01
7. September 2022
androidx.compose.runtime:runtime-tracing:1.0.0-alpha01
wird veröffentlicht. Version 1.0.0-alpha01 enthält diese Commits.
Neue Funktionen
androidx.compose.runtime:runtime-tracing
ist eine Bibliothek, die – sofern entsprechende Tools verfügbar sind (demnächst) – ein erweitertes Tracing in einer Compose-App ermöglicht. Diese erste Version ist 1.0.0-alpha01.
Version 1.9
Version 1.9.0-beta02
2. Juli 2025
androidx.compose.runtime:runtime-*:1.9.0-beta02
wird veröffentlicht. Version 1.9.0-beta02 enthält diese Commits.
Fehlerkorrekturen
- Die Referenzlebensdauer von Werten in der Slot-Tabelle zwischen Kompositionen wurde verkürzt. In einigen Fällen kann eine Referenz in einer Slot-Tabelle ein Frame länger als nötig dauern. (I49e74, b/418516940)
- Entfernen des Kotlin-Mangle für Hot-Reload-Methoden (Ic56a3, b/426871325)
Version 1.9.0-beta01
18. Juni 2025
androidx.compose.runtime:runtime-*:1.9.0-beta01
wird veröffentlicht. Version 1.9.0-beta01 enthält diese Commits.
API-Änderungen
- Es wurde eine Tooling-API zum Parsen von Quellinformationen hinzugefügt, die vom Compose-Compiler hinzugefügt werden. (Iceaf9, b/408492167)
SnapshotStateSet
implementiert jetztParcelable
auf Android und kann als Teil vonrememberSaveable { ... }
verwendet werden. (I755dd, b/378623803)SnapshotStateList
implementiert jetztParcelable
auf Android und kann als Teil vonrememberSaveable { ... }
verwendet werden. (Id18be, b/378623803)movableContentOf()
ist jetzt mit der Annotation@RememberInComposition
gekennzeichnet, sodass Lint falsche Verwendungen erkennen kann (I2738d).- Die experimentelle API für Kompositionsbeobachter wurde aktualisiert, um eine umfassendere Beobachtung von Recomposition-Ursachen zu ermöglichen (I32b6a).
- Ändern Sie
setDiagnosticStackTraceEnabled
in „experimental“, um die zukünftige Entwicklung dieser Funktion zu berücksichtigen. (I11db3) currentCompositeKeyHash
wurde eingestellt. Verwenden Sie stattdessencurrentCompositeKeyHashCode
. Die Ersatz-API codiert denselben Hash mit mehr Bits, wodurch die Wahrscheinlichkeit, dass zwei zufällige, nicht zusammenhängende Gruppen in der Kompositionshierarchie denselben Hash-Schlüssel haben, exponentiell sinkt. (I4cb6a, b/177562901)- Für Projekte, die mit Kotlin 2.0 veröffentlicht wurden, ist KGP 2.0.0 oder höher erforderlich (Idb6b5).
@Stable
,@Immutable
und@StableMarker
wurden (auf kompatible Weise) in die Laufzeitannotation verschoben. Sie können jetzt von „runtime-annotation“ abhängig sein, wenn Sie diese Anmerkungen aus Bibliotheken verwenden möchten, die nicht von Compose abhängig sind. (I23a16)- Die Überladung
rememberSaveable
, dieKSerializer
akzeptiert, wurde inrememberSerializable
umbenannt. Mit dieser Änderung wird die beabsichtigte Verwendung vonkotlinx.serialization
verdeutlicht. Die direkte Unterstützung allgemeinerkotlinx.Serializable
-Klassen inrememberSaveable
würde einenreified
-Typparameter erfordern, was die Quellkompatibilität beeinträchtigen würde, da alle Aufrufstellen zur Kompilierzeit reifizierte Typinformationen bereitstellen müssten. (Idb875, I38627, b/376028110)
Fehlerkorrekturen
- Kompositionen, die mit pausierbaren Inhalten erstellt wurden und die pausierbaren Inhalte wurden gekündigt, müssen entsorgt werden. Dies wird jetzt durch die Zusammensetzung geprüft und es wird ein Fehler ausgegeben, wenn sie wiederverwendet wird. (I2daa5, b/406792785)
- Die pausierbare Komposition wurde korrigiert, sodass beim Entfernen der pausierbaren Komposition nicht mehr fälschlicherweise ein
onForgotten
an die Observer gesendet wird.RememberObservers
in einer pausierbaren Komposition, die abgebrochen wurde, sollte nur ein „onAbandoned“-Ereignis gesendet werden. (I26f54) - Ein Problem mit verschiebbaren Inhalten wurde behoben. Dabei wurden Invalidierungen, die in späten Phasen der Verarbeitung verschiebbarer Inhalte eintreffen, dem Composer hinzugefügt. Diese Invalidierungen wurden jedoch nicht aktualisiert, wenn die Inhalte verschoben wurden, was dazu führte, dass die Inhalte am falschen Ort neu zusammengesetzt wurden. (Icd2fa, b/409439507)
- Ein Problem wurde behoben, bei dem verschiebbarer Inhalt nach dem Erstellen, aber vor dem Verschieben ungültig wurde. (I99eac, b/229001114)
- Wenn
remove()
eines Listeniterators, der vonSnapshotStateList
erstellt wurde, nach dem Aufrufen vonprevious()
aufgerufen wurde, wurde möglicherweise das falsche Element aus der Liste entfernt. Das Verhalten entsprach nicht dem vonArrayList
bei derselben Aufrufsequenz. (I05ab7, b/417493222) - Ein Problem mit der Reihenfolge beim Senden von
onForgotton
wurde behoben. Dadurch konnte es beispielsweise passieren, dass dieonDispose
von Einweg-Effekten in der falschen Reihenfolge ausgeführt wurden. (Ic1c91, b/417450712) - Problem behoben, das die Wiederverwendung der Statusverwaltung in pausierbaren Composables verhinderte (Ife96e, b/404058957)
- Der Status wird jetzt richtig wiederverwendet, wenn eine Komposition pausiert und neu gestartet wird. Zuvor musste der pausierte Status neu zusammengesetzt werden, weil sich der gelesene Status während der Pause geändert hatte. (I441d1, b/416209738)
- Der Fehler, dass die Dispatch-Funktion bei pausierbaren Composables nicht richtig funktioniert, wurde behoben (b/404058957). Die vorherige Korrektur war unvollständig. (I1afd4, b/404058957)
OffsetApplier
überschreibt jetzt korrektapply()
, das mit der pausierbaren Komposition eingeführt wurde. Wenn dies nicht der Fall ist, kann es bei der Aktualisierung virtueller Knoten zu einer Ausnahme kommen. (Idbf31, b/409291131)- Ein Deadlock wurde behoben, der Molecule-Nutzer betreffen konnte, wenn ein ausgesetzter Aufruf von
FrameClock.withFrameNanos
abgebrochen wurde, während ein Frame gesendet wurde. (I89cab, b/407027032) - Der Recomposer konnte bei verschiebbaren Inhalten in den Leerlauf gehen (Ie5416, b/409267170)
- Die Reihenfolge, in der
onReuse
undonDeactivate
während der pausierbaren Komposition invertiert werden könnten. Sie treten jetzt garantiert in der ReihenfolgeonDeactivate
/onReuse
auf. (I996e4, b/404058957) - Problem mit dem Dispatching von Remember-Beobachtern in pausierbarer Komposition behoben, um zu vermeiden, dass „remembered“/„forgotten“ im selben Apply-Vorgang gesendet wird (I570b2, b/404645679, b/407931790)
LifecycleRegistry
wurde in Compose Multiplatform in den unsicheren Modus versetzt, umMainThread
-Prüfungen zu deaktivieren und Threading-Probleme zu beheben. Weitere Informationen finden Sie unter CMP-8227. (Icee87)
Externe Beiträge
- Ein Fehler wurde behoben, der Molecule-Nutzer betraf und bei dem die Verwendung von
RecompositionMode.Immediate
zu verpassten Neuzusammenstellungen führen konnte. (I9f3a9, b/419527812) - Verfügbare
PausableComposition
-,isApplied
- undisCancelled
-Getter, mit denen der Status derPausableComposition
geprüft werden kann. (I994aa) AnnotationTarget.FUNCTION
wurde der AnnotationFunctionKeyMeta
hinzugefügt. (I08021)
Version 1.9.0-alpha04
4. Juni 2025
androidx.compose.runtime:runtime-*:1.9.0-alpha04
wird veröffentlicht. Version 1.9.0-alpha04 enthält diese Commits.
API-Änderungen
SnapshotStateSet
implementiert jetzt Parcelable unter Android und kann als Teil vonrememberSaveable { ... }
verwendet werden. (I755dd, b/378623803)SnapshotStateList
implementiert jetzt Parcelable unter Android und kann als Teil vonrememberSaveable { ... }
verwendet werden. (Id18be, b/378623803)movableContentOf()
ist jetzt mit der Annotation@RememberInComposition
gekennzeichnet, sodass Lint falsche Verwendungen erkennen kann (I2738d).- Die experimentelle API für Kompositionsbeobachter wurde aktualisiert, um eine umfassendere Beobachtung von Recomposition-Ursachen zu ermöglichen (I32b6a).
Fehlerkorrekturen
- Ein Problem mit der Reihenfolge beim Senden von
onForgotton
wurde behoben. Dadurch konnte es beispielsweise passieren, dass dieonDispose
von Einweg-Effekten in der falschen Reihenfolge ausgeführt wurden. (Ic1c91, b/417450712) - Problem behoben, das die Wiederverwendung der Statusverwaltung in pausierbaren Composables verhinderte (Ife96e, b/404058957)
- Geringfügiger Programmfehler behoben, um die Erkennung veränderlicher Sammlungen sowohl für K1 als auch für K2 kompatibel zu machen (Ie4878)
- Ein kleiner Fehler wurde behoben, damit die Suche nach Anmerkungen für überschriebene Property-Accessoren sowohl mit K1 als auch mit K2 kompatibel ist (I9900d).
Externe Beiträge
- Ein Fehler wurde behoben, der Molecule-Nutzer betraf und bei dem die Verwendung von
RecompositionMode.Immediate
zu verpassten Neuzusammenstellungen führen konnte. (I9f3a9, b/419527812) - Die Getter
PausableComposition
isApplied undisCancelled
sind verfügbar und ermöglichen es, den Status derPausableComposition
zu prüfen. (I994aa)
Version 1.9.0-alpha03
20. Mai 2025
androidx.compose.runtime:runtime-*:1.9.0-alpha03
wird veröffentlicht. Version 1.9.0-alpha03 enthält diese Commits.
API-Änderungen
- Ändern Sie
setDiagnosticStackTraceEnabled
in „experimental“, um die zukünftige Entwicklung dieser Funktion zu berücksichtigen. (I11db3)
Fehlerkorrekturen
- Der Status wird jetzt richtig wiederverwendet, wenn eine Komposition pausiert und neu gestartet wird. Zuvor musste der pausierte Status neu zusammengesetzt werden, weil sich der gelesene Status während der Pause geändert hatte. (I441d1, b/416209738)
- Der Fehler, dass die Dispatch-Funktion für pausierbare Kompositionen nicht richtig funktioniert hat, wurde behoben (b/404058957). Die vorherige Korrektur war unvollständig. (I1afd4, b/404058957)
SaveableStateHolder.SaveableStateProvider
bietet jetzt über die Komposition eineLocalSavedStateRegistryOwner
für seine Inhalte. (Ia2761, b/413108878)androidx.compose.runtime.saveable
ist jetzt vonandroidx.lifecycle.runtime.compose
abhängig. (I53228, b/413108878)
Version 1.9.0-alpha02
7. Mai 2025
androidx.compose.runtime:runtime-*:1.9.0-alpha02
wird veröffentlicht. Version 1.9.0-alpha02 enthält diese Commits.
API-Änderungen
- Die Verwendung von
rememberSaveable
mit einem benutzerdefinierten „key“ ist veraltet. Dadurch wird die positionsbezogene Bereichsbegrenzung umgangen, was zu Statusfehlern und inkonsistentem Verhalten führt (z.B. unbeabsichtigte gemeinsame Nutzung oder Verlust des Status, Probleme in verschachteltenLazyLayouts
). Entfernen Sie den Parameter „key“, um die positionsbezogene Bereichsbegrenzung für einen konsistenten, lokal begrenzten Status zu verwenden. Vollständige Commit-Nachricht (I5e6ff, b/357685851)
Fehlerkorrekturen
OffsetApplier
überschreibt jetzt korrektapply()
, das mit der pausierbaren Komposition eingeführt wurde. Wenn dies nicht der Fall ist, kann es bei der Aktualisierung virtueller Knoten zu einer Ausnahme kommen. (Idbf31, b/409291131)- Ein Deadlock wurde behoben, der Molecule-Nutzer betreffen konnte, wenn ein ausgesetzter Aufruf von
FrameClock.withFrameNanos
abgebrochen wurde, während ein Frame gesendet wurde. (I89cab, b/407027032) - Der Recomposer konnte in den Leerlauf gehen, während der Status für verschiebbare Inhalte noch ausstand. Dies tritt normalerweise nicht auf, da der Status für verschiebaren Inhalt im Hauptloop des Recomposers verworfen wird. Dies kann jedoch bei pausierbaren Kompositionen auftreten, wenn die verschiebbaren Inhalte während
resume()
(Ie5416, b/409267170) verworfen werden. - Die Reihenfolge, in der
onReuse
undonDeactivate
während der pausierbaren Komposition invertiert werden könnten. Sie werden jetzt garantiert in der ReihenfolgeonDeactivate/onReuse
ausgeführt. (I996e4, b/404058957)
Version 1.9.0-alpha01
23. April 2025
androidx.compose.runtime:runtime-*:1.9.0-alpha01
wird veröffentlicht. Version 1.9.0-alpha01 enthält diese Commits.
Geändertes Verhalten
- Für Lint-Prüfungen, die mit Compose ausgeliefert werden, ist jetzt mindestens AGP-Version 8.8.2 erforderlich. Wenn Sie AGP nicht aktualisieren können, können Sie stattdessen Lint aktualisieren, indem Sie
android.experimental.lint.version=8.8.2
(oder eine neuere Version) in Ihrergradle.properties
verwenden. Um Compose-Lint-Prüfungen in der IDE auszuführen, ist Android Studio Ladybug oder höher erforderlich.
API-Änderungen
currentCompositeKeyHash
wurde eingestellt. Verwenden Sie stattdessencurrentCompositeKeyHashCode
. Die Ersatz-API codiert denselben Hash mit mehr Bits, wodurch die Wahrscheinlichkeit, dass zwei zufällige, nicht zusammenhängende Gruppen in der Kompositionshierarchie denselben Hash-Schlüssel haben, exponentiell sinkt. (I4cb6a, b/177562901)- Für Projekte, die mit Kotlin 2.0 veröffentlicht wurden, ist KGP 2.0.0 oder höher erforderlich (Idb6b5).
@Stable
,@Immutable
und@StableMarker
wurden (auf kompatible Weise) in die Laufzeitannotation verschoben. Sie können jetzt von „runtime-annotation“ abhängig sein, wenn Sie diese Anmerkungen aus Bibliotheken verwenden möchten, die nicht von Compose abhängig sind. (I23a16)- Entfernt
onCreating
undonDisposing
, da sie eingestellt und inonPreCreate
undonPreDispose
umbenannt wurden. Damit ist die Umbenennung abgeschlossen. (I97461) - Stellt eine Kompositionslokale zur Verfügung, mit der ein Compose-Stacktrace basierend auf dem Speicherort eines Compose-Knotens in der Komposition angehängt werden kann. (Ie0bda, b/354163858)
- Einführung von diagnostischen Compose-Stacktraces basierend auf Quellinformationen, die in der Komposition gespeichert sind. (I3db9f, b/354163858)
runWithTimingDisabled
wird zugunsten vonrunWithMeasurementDisabled
eingestellt, da das Verhalten dort deutlicher beschrieben wird: Alle Messwerte werden pausiert. Außerdem wird dieMicrobenchmarkScope
-Superklasse verfügbar gemacht, da dierunWithMeasurementDisabled
-Funktion nicht neu deklariert werden kann, um den Zugriff zu öffnen, da sie inline ist. (I9e23b, b/389149423, b/149979716)- Fügt
@FrequentlyChangingValue
hinzu: eine Annotation, mit der Funktionen und Property-Getter markiert werden können, um anzugeben, dass sie nicht direkt in der Komposition aufgerufen werden sollten, da dies zu häufigen Neukompositionen führen kann. Beispielsweise zum Markieren von Werten für die Scrollposition und animierten Werten. Warnungen werden von einer entsprechenden Lint-Prüfung ausgegeben. (I83630, b/234042500) - Fügt
@RememberInComposition
hinzu: Eine Annotation, mit der Konstruktoren, Funktionen und Property-Getter markiert werden können, um anzugeben, dass sie nicht direkt in der Komposition aufgerufen werden dürfen, ohne dass sie gespeichert werden. Fehler werden durch einen entsprechenden Lint-Check gemeldet. Mit dieser Annotation können Deklarationen markiert werden, die statusbehaftete / veränderliche Objekte zurückgeben, Objekte, deren Identität über Kompositionen hinweg beibehalten werden muss, oder Objekte, die teuer zu instanziieren sind und über Kompositionen hinweg im Cache gespeichert werden sollten. (Ie7db0) - Es wurde eine neue
rememberSaveable
-Überladung hinzugefügt, dieKSerializer
für die typsichere Statuspersistenz mit KotlinX Serialization unterstützt. Die vorhandeneSaver
-basierte API wird weiterhin unterstützt. (Iea4ab, b/376028110)
Fehlerkorrekturen
- Problem mit dem Dispatching von Remember-Beobachtern in pausierbarer Komposition behoben, um zu vermeiden, dass „remembered“/„forgotten“ im selben Apply-Vorgang gesendet wird (I570b2, b/404645679, b/407931790)
- Die
SnapshotObserver
-Methoden „onCreating“ wurden inonPreCreate
undonDisposing
inonPreDispose
umbenannt, um den API-Richtlinien zu entsprechen. Die bisherigen Methoden sind veraltet und die neuen Methoden rufen standardmäßig die alten auf. Daher funktionieren bestehende Implementierungen dieser Schnittstelle weiterhin, bis die Methoden entfernt werden. Diese Methoden werden in Version 1.9.0-alpha in einem nachfolgenden CL entfernt, der in Kürze folgt. Sie werden vor der stabilen Version 1.8 aus der Betaversion 1.8 entfernt. (I6d753) - Ein Problem wurde behoben, bei dem gespeicherte Werte fälschlicherweise vergessen und neu berechnet werden konnten, wenn eine ausgeblendete Gruppe, die nach einer verschiebbaren Gruppe angezeigt wird, neu zusammengesetzt wurde (I62cab, b/383769314).
- Unterstützung für Compose-Stapelausgaben in
LaunchedEffect
undrememberCoroutineScope
hinzugefügt (I705c0, b/354163858) - Für Compose-Lint-Prüfungen ist jetzt mindestens AGP 8.8.2 über die Befehlszeile und mindestens Android Studio Ladybug für die IDE-Unterstützung erforderlich. Wenn Sie eine ältere Version von AGP verwenden, können Sie
android.experimental.lint.version=8.8.2
in gradle.properties festlegen, um die Lint-Version zu aktualisieren, ohne AGP zu beeinträchtigen. (I6f2a8)
Externe Beiträge
AnnotationTarget.FUNCTION
wurde der AnnotationFunctionKeyMeta
hinzugefügt. (I08021)
Version 1.8
Version 1.8.3
18. Juni 2025
androidx.compose.runtime:runtime-*:1.8.3
wird veröffentlicht. Version 1.8.3 enthält diese Commits.
Version 1.8.2
20. Mai 2025
androidx.compose.runtime:runtime-*:1.8.2
wird veröffentlicht. Version 1.8.2 enthält diese Commits.
Version 1.8.1
7. Mai 2025
androidx.compose.runtime:runtime-*:1.8.1
wird veröffentlicht. Version 1.8.1 enthält diese Commits.
Version 1.8.0
23. April 2025
androidx.compose.runtime:runtime-*:1.8.0
wird veröffentlicht. Version 1.8.0 enthält diese Commits.
Version 1.8.0-rc03
9. April 2025
androidx.compose.runtime:runtime-*:1.8.0-rc03
wird veröffentlicht. Version 1.8.0-rc03 enthält diese Commits.
Version 1.8.0-rc02
26. März 2025
androidx.compose.runtime:runtime-*:1.8.0-rc02
wird veröffentlicht. Version 1.8.0-rc02 enthält diese Commits.
Version 1.8.0-rc01
12. März 2025
androidx.compose.runtime:runtime-*:1.8.0-rc01
wird veröffentlicht. Version 1.8.0-rc01 enthält diese Commits.
API-Änderungen
- Die
SnapshotObserver
-Methoden „onCreating“ wurden inonPreCreate
undonDisposing
inonPreDispose
umbenannt, um den API-Richtlinien zu entsprechen. Die bisherigen Methoden sind veraltet und die neuen Methoden rufen standardmäßig die alten auf. Daher funktionieren bestehende Implementierungen dieser Schnittstelle weiterhin, bis die Methoden entfernt werden. Diese Methoden werden in Version 1.9.0-alpha in einem nachfolgenden CL entfernt, der in Kürze folgt. Sie werden vor der stabilen Version 1.8 aus der Betaversion 1.8 entfernt. (I6d753)
Version 1.8.0-beta03
26. Februar 2025
androidx.compose.runtime:runtime-*:1.8.0-beta03
wird veröffentlicht. Version 1.8.0-beta03 enthält diese Commits.
Version 1.8.0-beta02
12. Februar 2025
androidx.compose.runtime:runtime-*:1.8.0-beta02
wird veröffentlicht. Version 1.8.0-beta02 enthält diese Commits.
Fehlerkorrekturen
- Erfasste Ausnahme in pausierbarer Komposition noch einmal auslösen .(384486d)
Version 1.8.0-beta01
29. Januar 2025
androidx.compose.runtime:runtime-*:1.8.0-beta01
wird veröffentlicht. Version 1.8.0-beta01 enthält diese Commits.
API-Änderungen
- Ein Problem wurde behoben, bei dem das Auslösen eines Throwables während der Komposition, das nicht von „Exception“ abgeleitet wird, zu einem Fehler vom Typ „Pending composition has not been applied“ (Ausstehende Komposition wurde nicht angewendet) führen konnte. (I356be, b/382094412)
Version 1.8.0-alpha08
15. Januar 2025
androidx.compose.runtime:runtime-*:1.8.0-alpha08
wird veröffentlicht. Version 1.8.0-alpha08 enthält diese Commits.
Version 1.8.0-alpha07
11. Dezember 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha07
wird veröffentlicht. Version 1.8.0-alpha07 enthält diese Commits.
API-Änderungen
- Es wurde eine Tooling-API hinzugefügt, mit der der Layout-Inspector Unterkompositionen mit der übergeordneten Komposition korrelieren kann, wenn kein Knoten zum Überbrücken der Kompositionen verwendet wird. (I4ce3d)
- Die arithmetischen und speziellen Konstanten für
SnapshotId
sind jetzt intern statt öffentlich. Bei Bedarf können Sie arithmetische Operationen für einSnasphotId
ausführen, indem Sie es mittoInt()
bzw.toLong()
in einInt
oderLong
konvertieren. (Ic3a57)
Externe Beiträge
- Speicher für
movableContentOf
-Parameter optimieren (ed87177)
Version 1.8.0-alpha06
13. November 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha06
wird veröffentlicht. Version 1.8.0-alpha06 enthält diese Commits.
API-Änderungen
- Änderungen an der
PausableComposition
API. Diese Änderungen sind nicht abwärtskompatibel mit früheren Releases von 1.8.0-alpha (seit 1.8.0-alpha02). Da es sich jedoch um neue APIs in 1.8.0 handelt, wird die Abwärtskompatibilität nicht aufrechterhalten, da sich die APIs noch in der Alphaphase befinden. (I39819) - Fügt Tooling-APIs hinzu, um die Erstellung neuer Kompositionen in einem Recomposer zu beobachten (Iaeb7e)
snapshotId
vom TypLong
wurde zuSnapshot
hinzugefügt undid
wurde eingestellt. Die ID eines Snapshots wurde vonInt
inLong
geändert, um zu verhindern, dass die Snapshot-ID auf Systemen mit sehr hohen Framerates und Animationen mit langer Ausführungszeit überläuft. Der Typ wurde als „expect/actual“ festgelegt, damit er auf Plattformen, die keinen nativenLong
-Typ haben,Int
oder ein anderer Typ sein kann. Bei Plattformen ohne nativeLong
, z. B. JavaScript, sollten hohe Bildraten (über 1.000 FPS) vermieden werden, daInt
etwa alle 24 Tage einen Überlauf verursachen würde. (I38ac3, b/374821679)
Fehlerkorrekturen
- Die
providesDefault
ist für eine einzelneprovides
festgelegt. (aosp/3318540 b/374263387) ChangeList
optimieren (3318538)
Version 1.8.0-alpha05
30. Oktober 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha05
wird veröffentlicht. Version 1.8.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
- Behebe den Stack-Overflow-Fehler beim Hinzufügen von
Int.MAX_VALUE
zuSnapshotIdSet
. (b/370536104, Ic4179f6) - Mikrooptimierungen zur Laufzeit (I50c60)
- R8 erlauben, Aufrufe von „debugging runtimeCheck“ zu entfernen (I8c44)
compoundKeyOf
iterativ statt rekursiv gestalten (I5817f)
Externe Beiträge
- Stacks mit Sammlungslisten implementieren (I7d47c)
Version 1.8.0-alpha04
16. Oktober 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha04
wird veröffentlicht. Version 1.8.0-alpha04 enthält diese Commits.
Leistungsverbesserungen
- Snapshot-ID für Statusdatensätze im Konstruktor angeben (85c00f)
SnapshotState***
refaktorieren, um Fehler bei der Klassenprüfung zu vermeiden (6ee4a6)- R8-Regeln korrigieren, um das Inlining von „throw“ zu verhindern (5beb92)
- Vorgänge mikrooptimieren (d73c5c)
SynchronizedObject
-Zuweisungen in der JVM optimieren (2b043f)
Version 1.8.0-alpha03
2. Oktober 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha03
wird veröffentlicht. Version 1.8.0-alpha03 enthält diese Commits.
Leistungsverbesserungen
- Untergeordneten Kontext für
rememberCoroutineScope
verzögert erstellen (f61464)rememberCoroutineScope
wird in der Regel verwendet, um als Reaktion auf Ereignisse, die nach der Komposition auftreten, Coroutinen zu starten. In einigen Szenarien treten diese Ereignisse möglicherweise nie auf, was zu zusätzlichen Kosten für die Erstellung und Kündigung von Jobs ohne Nutzen führt.- Der von
rememberCoroutineScope
zurückgegebene Bereich erstellt seinencoroutineContext
verzögert, wenn darauf zugegriffen wird. So werden Job-Erstellung und ‑Abbruch vollständig vermieden, wenn der Bereich nie verwendet wird.
Version 1.8.0-alpha02
18. September 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha02
wird veröffentlicht. Version 1.8.0-alpha02 enthält diese Commits.
Neue Funktionen
PausableComposition
wurde hinzugefügt. Damit kann eine untergeordnete Komposition erstellt werden, die während der Komposition pausiert und asynchron auf die Komposition angewendet werden kann. Für das Pausieren ist Compiler-Unterstützung erforderlich, die derzeit entwickelt wird. (I3394b)
Version 1.8.0-alpha01
4. September 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha01
wird veröffentlicht. Version 1.8.0-alpha01 enthält diese Commits.
Version 1.7
Version 1.7.8
12. Februar 2025
androidx.compose.runtime:runtime-*:1.7.8
wird veröffentlicht. Version 1.7.8 enthält diese Commits.
Version 1.7.7
29. Januar 2025
androidx.compose.runtime:runtime-*:1.7.7
wird veröffentlicht. Keine Änderungen gegenüber Version 1.7.6.
androidx.compose.runtime:runtime-*:1.7.6
wird veröffentlicht. Version 1.7.6 enthält diese Commits.
Version 1.7.5
30. Oktober 2024
androidx.compose.runtime:runtime-*:1.7.5
wird veröffentlicht. Version 1.7.5 enthält diese Commits.
Version 1.7.4
16. Oktober 2024
androidx.compose.runtime:runtime-*:1.7.4
wird veröffentlicht. Version 1.7.4 enthält diese Commits.
Version 1.7.3
2. Oktober 2024
androidx.compose.runtime:runtime-*:1.7.3
wird veröffentlicht. Version 1.7.3 enthält diese Commits.
Version 1.7.2
18. September 2024
androidx.compose.runtime:runtime-*:1.7.2
wird veröffentlicht. Version 1.7.2 enthält diese Commits.
Version 1.7.1
10. September 2024
- An Android-Artefakten wurden keine Änderungen vorgenommen.
-desktop
Artefakte wurden entfernt und-jvmStubs
- und-linuxx64Stubs
-Artefakte wurden hinzugefügt. Keines dieser Ziele ist für die Verwendung vorgesehen. Sie sind Platzhalter, um die Bemühungen von Jetbrains Compose zu unterstützen.
Version 1.7.0
4. September 2024
androidx.compose.runtime:runtime-*:1.7.0
wird veröffentlicht. Version 1.7.0 enthält diese Commits.
Wichtige Änderungen seit Version 1.6.0
- Es wurde die Möglichkeit hinzugefügt, eine Kompositionslokale bereitzustellen, die standardmäßig auf Grundlage der Werte anderer Kompositionslokalen berechnet wird. Dazu kann
compositionLocalWithComputedDefault()
verwendet werden. Alternativ kann auch eine Lambda-Funktion angegeben werden, mit der der Wert berechnet wird. Dazu wirdprovidesComputed
anstelle vonprovides
verwendet. - Der Wert eines Kompositions-Locals kann mit der
currentValue
-Property des Kompositions-Locals abgerufen werden, auf das von der Lambda-Funktion aus zugegriffen werden kann, die den Wert berechnet. Diese Variable wird anstelle voncurrent
verwendet, auf die nur in@Composable
-Funktionen zugegriffen werden kann. (Iadbc0) - Neu erstellte Statusobjekte sind mit ihrem ursprünglichen Status sofort über andere Snapshots, einschließlich des globalen Snapshots, zugänglich. Alle nachfolgenden Änderungen sind erst sichtbar, wenn der Snapshot angewendet wird, in dem das Objekt erstellt wurde.
- Der Ausgangszustand von
mutableStateOf()
sowie der zugehörigen primitiven Versionen ist der Wert, der als Parameter anmutableStateOf()
übergeben wird. Der Anfangsstatus vonmutableStateListOf()
undmutableStateMapOf()
ist leer. Snapshot.isInSnapshot
undSnapshot.PreexistingSnapshotId
wurden hinzugefügt, um zu ermöglichen, dass ein Statusobjekt nach seiner Erstellung sofort über den globalen Snapshot zugänglich ist.- Benutzerdefinierte Statusobjekte können sofort zugänglich sein, wenn sie dem Muster der Änderungen an den integrierten Snapshot-Objekten folgen. (I84a17)
- Aktivieren Sie
nonSkippingGroupOptimization
für Compose-Bibliotheken. Dadurch wird der generierte Code für alle nicht neu startbaren zusammensetzbaren Funktionen in androidx effizienter. In Zukunft soll diese Funktion standardmäßig aktiviert sein. I(acbc08) - Composable-Lambdas in untergeordneten Kompositionen im selben Frame ungültig machen. (98301c)
- Rufen Sie den
onRelease
-Callback in derselben Reihenfolge wieonForgotten
auf. (2cd790) - Modus für starkes Überspringen aktivieren (ed1766)
currentCompoundHashKey
in mehr Fällen eindeutig machen (d4a872)
Version 1.7.0-rc01
21. August 2024
androidx.compose.runtime:runtime-*:1.7.0-rc01
wird veröffentlicht. Version 1.7.0-rc01 enthält diese Commits.
Version 1.7.0-beta07
7. August 2024
androidx.compose.runtime:runtime-*:1.7.0-beta07
wird veröffentlicht. Version 1.7.0-beta07 enthält diese Commits.
Version 1.7.0-beta06
24. Juli 2024
androidx.compose.runtime:runtime-*:1.7.0-beta06
wird veröffentlicht. Version 1.7.0-beta06 enthält diese Commits.
Version 1.7.0-beta05
10. Juli 2024
androidx.compose.runtime:runtime-*:1.7.0-beta05
wird veröffentlicht. Version 1.7.0-beta05 enthält diese Commits.
Version 1.7.0-beta04
26. Juni 2024
androidx.compose.runtime:runtime-*:1.7.0-beta04
wird veröffentlicht. Version 1.7.0-beta04 enthält diese Commits.
Version 1.7.0-beta03
12. Juni 2024
androidx.compose.runtime:runtime-*:1.7.0-beta03
wird veröffentlicht. Version 1.7.0-beta03 enthält diese Commits.
Version 1.7.0-beta02
29. Mai 2024
androidx.compose.runtime:runtime-*:1.7.0-beta02
wird veröffentlicht. Version 1.7.0-beta02 enthält diese Commits.
Version 1.7.0-beta01
14. Mai 2024
androidx.compose.runtime:runtime-*:1.7.0-beta01
wird veröffentlicht. Version 1.7.0-beta01 enthält diese Commits.
Version 1.7.0-alpha08
1. Mai 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha08
wird veröffentlicht. Version 1.7.0-alpha08 enthält diese Commits.
Version 1.7.0-alpha07
17. April 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha07
wird veröffentlicht. Version 1.7.0-alpha07 enthält diese Commits.
Neue Funktionen
- Es wurde die Möglichkeit hinzugefügt, eine Kompositionslokale bereitzustellen, die standardmäßig auf Grundlage der Werte anderer Kompositionslokalen berechnet wird. Dazu kann
compositionLocalWithComputedDefault()
verwendet werden. Alternativ kann auch eine Lambda-Funktion angegeben werden, mit der der Wert berechnet wird. Dazu wirdprovidesComputed
anstelle vonprovides
verwendet. - Der Wert eines Kompositions-Locals kann mit der
currentValue
-Property des Kompositions-Locals abgerufen werden, auf das von der Lambda-Funktion aus zugegriffen werden kann, die den Wert berechnet. Diese Variable wird anstelle voncurrent
verwendet, auf die nur in@Composable
-Funktionen zugegriffen werden kann. (Iadbc0)
API-Änderungen
- Neu erstellte Statusobjekte sind mit ihrem ursprünglichen Status sofort über andere Snapshots, einschließlich des globalen Snapshots, zugänglich. Alle nachfolgenden Änderungen sind erst sichtbar, wenn der Snapshot angewendet wird, in dem das Objekt erstellt wurde.
- Der Ausgangszustand von
mutableStateOf()
sowie der zugehörigen primitiven Versionen ist der Wert, der als Parameter anmutableStateOf()
übergeben wird. Der Anfangsstatus vonmutableStateListOf()
undmutableStateMapOf()
ist leer. Snapshot.isInSnapshot
undSnapshot.PreexistingSnapshotId
wurden hinzugefügt, um zu ermöglichen, dass ein Statusobjekt nach seiner Erstellung sofort über den globalen Snapshot zugänglich ist.- Benutzerdefinierte Statusobjekte können sofort zugänglich sein, wenn sie dem Muster der Änderungen an den integrierten Snapshot-Objekten folgen. (I84a17)
Fehlerkorrekturen
- Das Zusammenführen von
readObserver
in verschachtelten Snapshots wurde korrigiert. Dies führte dazu, dass verschachtelte abgeleitete Status bei Verwendung in einemsnapshotFlow
nicht ausreichend invalidiert wurden. (Idf138)
Version 1.7.0-alpha06
3. April 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha06
wird veröffentlicht. Version 1.7.0-alpha06 enthält diese Commits.
Fehlerkorrekturen
- Behebung der Verarbeitung einzelner Werte
providesDefault
(538f45) - Deadlock beim Zugriff des Recomposers auf die Frame-Clock vermeiden (07e5c6)
Version 1.7.0-alpha05
20. März 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha05
wird veröffentlicht. Version 1.7.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
- Späte Änderungen an deaktivierter Komposition löschen (5950bc)
Version 1.7.0-alpha04
6. März 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha04
wird veröffentlicht. Version 1.7.0-alpha04 enthält diese Commits.
Leistungsverbesserungen
Snapshot.current
einmal pro Auswertung des abgeleiteten Status aufrufen (ee7daf)- Lesen von
currentRecord
einmal pro Beobachtung in der Komposition (b882b2) - Entfernen der versehentlichen Iteratorzuweisung in
snapshotFlow
(231e56) - Aktivieren Sie
nonSkippingGroupOptimization
für Compose-Bibliotheken. Dadurch wird der generierte Code für alle nicht neu startbaren zusammensetzbaren Funktionen in androidx effizienter. In Zukunft soll diese Funktion standardmäßig aktiviert sein. I(acbc08)
Version 1.7.0-alpha03
21. Februar 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha03
wird veröffentlicht. Version 1.7.0-alpha03 enthält diese Commits.
API-Änderungen
- Ersetzen von Gruppen zur Verbesserung der Erkennung von Änderungen (0941b5)
Leistungsverbesserungen
- Speicherzuweisung bei der Erkennung von Änderungen verbessern (53e7fd)
- Behebung eines Speicherlecks im Composer (0e097d)
ScopeMap
verwenden, um Invalidierungen beim Neuzusammenstellen zu übergeben (e19a7e)- Die Karte mit ungültigen Elementen wird optimiert, sodass nur abgeleitete Status beibehalten werden (f11c44).
- Verwendungen von
IdentityArraySet
durchScatterSet
ersetzen (db572e) removeScope
inScopeMap
optimieren (bb0530)
Version 1.7.0-alpha02
7. Februar 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha02
wird veröffentlicht. Version 1.7.0-alpha02 enthält diese Commits.
Fehlerkorrekturen
- Composable-Lambdas in untergeordneten Kompositionen im selben Frame ungültig machen. (98301c)
- Rufen Sie den
onRelease
-Callback in derselben Reihenfolge wieonForgotten
auf. (2cd790) - Filtern Sie nach geänderten Status, die in
snapshotFlow
nicht beobachtet werden. (796b80)
Leistungsverbesserungen
- Snapshot-Beobachter direkt ändern, wenn er bereits transparent ist. (f60f30)
SnapshotIdSet.lowest()
optimieren (7ae149)- Verwenden Sie in
SnapshotIdSet
eine zuweisungsfreiefold()
. (532b7d) - Iteratorzuweisung entfernen (83f96b)
Version 1.7.0-alpha01
24. Januar 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha01
wird veröffentlicht. Version 1.7.0-alpha01 enthält diese Commits.
Leistungsoptimierungen
- Es ist jetzt möglich, Slots hinzuzufügen, nachdem eine untergeordnete Gruppe hinzugefügt wurde (b5960c).
- Aufzeichnung von Änderungen an Snapshot-Zuständen optimieren (28c3fe)
- Modus für starkes Überspringen aktivieren (ed1766)
Fehlerkorrekturen
- Berücksichtigung von Standardparametermetadaten bei der intrinsischen Erinnerung (096665)
currentCompoundHashKey
in mehr Fällen eindeutig machen (d4a872)- Gruppen beim Beenden des Inline-Funktionsaufrufs realisieren (2a90fc)
Version 1.6
Version 1.6.8
12. Juni 2024
androidx.compose.runtime:runtime-*:1.6.8
wird veröffentlicht. Version 1.6.8 enthält diese Commits.
Version 1.6.7
1. Mai 2024
androidx.compose.runtime:runtime-*:1.6.7
wird veröffentlicht. Version 1.6.7 enthält diese Commits.
Version 1.6.6
17. April 2024
androidx.compose.runtime:runtime-*:1.6.6
wird veröffentlicht. Keine Änderungen seit dem letzten Release.
Version 1.6.5
3. April 2024
androidx.compose.runtime:runtime-*:1.6.5
wird veröffentlicht. Version 1.6.5 enthält diese Commits.
Version 1.6.4
20. März 2024
androidx.compose.runtime:runtime-*:1.6.4
wird veröffentlicht. Version 1.6.4 enthält diese Commits.
Version 1.6.3
6. März 2024
androidx.compose.runtime:runtime-*:1.6.3
wird veröffentlicht. Version 1.6.3 enthält diese Commits.
Version 1.6.2
21. Februar 2024
androidx.compose.runtime:runtime-*:1.6.2
wird veröffentlicht. Version 1.6.2 enthält diese Commits.
Version 1.6.1
7. Februar 2024
androidx.compose.runtime:runtime-*:1.6.1
wird veröffentlicht. Version 1.6.1 enthält diese Commits.
Fehlerkorrekturen
- Rufen Sie den
onRelease
-Callback in derselben Reihenfolge wieonForgotten
auf. (2cd790) - Filtern Sie nach geänderten Status, die in
snapshotFlow
nicht beobachtet werden. (796b80)
Version 1.6.0
24. Januar 2024
androidx.compose.runtime:runtime-*:1.6.0
wird veröffentlicht. Version 1.6.0 enthält diese Commits.
Wichtige Änderungen seit Version 1.5.0
Neue Funktionen
- Ausnahmen, die während der Neuzusammenschleife abgefangen werden, noch einmal auslösen (4dff9a)
Leistungsoptimierungen
- Aufzeichnung von Änderungen an Snapshot-Zuständen optimieren (28c3fe)
rememberSaveable
optimieren (f01d79)- Das erneute Lesen abgeleiteter Status wird aufgeschoben, bis Änderungen aufgezeichnet werden (f38099)
- Lokale Werte für die Zusammensetzung besser bereitstellen (a337ea)
Fehlerkorrekturen
- Speicherleck in der Slot-Tabelle beheben (73fcfe)
- Überspringen Sie die Neuzusammenstellung von untergeordneten Kompositionen, die entfernt werden. (Ieeb99, b/254645321)
- Lösen Sie
RememberObserver
-Lebenszyklen nur aus, wenn sie in der Erinnerungsberechnung gespeichert sind. (f6b4dc) - Beschränken Sie die
$dirty
-Erfassung auf Inline-Lambdas. (acfca0) - Es wurde ein Fehler behoben, bei dem verschiebbare Inhalte manchmal die falschen Kompositions-Locales erhalten haben. (035cd6)
Version 1.6.0-rc01
10. Januar 2024
androidx.compose.runtime:runtime-*:1.6.0-rc01
wird veröffentlicht. Version 1.6.0-rc01 enthält diese Commits.
Version 1.6.0-beta03
13. Dezember 2023
androidx.compose.runtime:runtime-*:1.6.0-beta03
wird veröffentlicht. Version 1.6.0-beta03 enthält diese Commits.
Version 1.6.0-beta02
29. November 2023
androidx.compose.runtime:runtime-*:1.6.0-beta02
wird veröffentlicht. Version 1.6.0-beta02 enthält diese Commits.
Version 1.6.0-beta01
15. November 2023
androidx.compose.runtime:runtime-*:1.6.0-beta01
wird veröffentlicht. Version 1.6.0-beta01 enthält diese Commits.
API-Änderungen
- Bestimmte Stabilitätswerte in Anmerkungen weitergeben. (274a4c)
Fehlerkorrekturen
- Verwenden Sie die referenzielle Richtlinie für den lokalen Status der Zusammensetzung im Kontext. (83361c)
- Beschränken Sie die Erfassung von $dirty auf Inline-Lambdas. (acfca0)
- Es wurde ein Fehler behoben, bei dem verschiebbare Inhalte manchmal die falschen Kompositions-Locales erhalten haben. (035cd6)
- Schnellere Hashmaps ohne Zuweisung in
RecomposeScopeImpl
verwenden. (d79494) ObjectIntMap
inDerivedState
verwenden. (21862e)- Verwenden Sie
IntRef
für den GanzzahltypSnapshotThreadLocal
inDerivedState
. (04eaf4)
Version 1.6.0-alpha08
18. Oktober 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha08
wird veröffentlicht. Version 1.6.0-alpha08 enthält diese Commits.
Fehlerkorrekturen
- Lösen Sie
RememberObserver
-Lebenszyklen nur aus, wenn sie in der Erinnerungsberechnung gespeichert sind. (f6b4dc) - Die Sortierung der Zuweisungen in der Liste der Ungültigmachungen wurde verbessert. (954d63)
- Neue nicht zuweisende Karten in
SnapshotStateObserver
verwenden (4303ce) - Ungültigmachungen löschen, wenn die Komposition deaktiviert ist. (e001be)
Version 1.6.0-alpha07
4. Oktober 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha07
wird veröffentlicht. Version 1.6.0-alpha07 enthält diese Commits.
API-Änderungen
SnapshotStateList
ist jetzt alsRandomAccess
gekennzeichnet, damit die Version mit direkter Indexierung der Listen-Helfer verwendet werden kann. (I5210c, b/219554654)
Version 1.6.0-alpha06
20. September 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha06
wird veröffentlicht. Version 1.6.0-alpha06 enthält diese Commits.
Version 1.6.0-alpha05
6. September 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha05
wird veröffentlicht. Version 1.6.0-alpha05 enthält diese Commits.
Version 1.6.0-alpha04
23. August 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha04
wird veröffentlicht. Version 1.6.0-alpha04 enthält diese Commits.
Neue Funktionen
- Ausnahmen, die während der Neuzusammenschleife abgefangen werden, noch einmal auslösen (4dff9a)
API-Änderungen
- Es wurde eine Methode zum Deaktivieren von
ReusableComposition
hinzugefügt, mit der Beobachtungen entfernt, Knoten aber beibehalten werden. Die deaktivierte Komposition kann durch Aufrufen vonsetContent
wieder aktiviert werden. (Ib7f31) - Die
ReusableComposition
-Schnittstelle zum Verwalten des Lebenszyklus und der Wiederverwendung von Unterkompositionen wurde hinzugefügt. (I812d1, b/252846775)
Version 1.6.0-alpha03
9. August 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha03
wird veröffentlicht. Version 1.6.0-alpha03 enthält diese Commits.
Fehlerkorrekturen
- Fehlerbehebung bei der neuen
CompositionLocalProvider
-Optimierung (3118e88) - Korrigieren Sie, wie verschiebbare Inhaltsknoten zerlegt werden. (5e3d59b)
Version 1.6.0-alpha02
26. Juli 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha02
wird veröffentlicht. Version 1.6.0-alpha02 enthält diese Commits.
Neue Funktionen und Leistungsverbesserungen
rememberSaveable
optimieren (f01d79)- Das erneute Lesen abgeleiteter Status wird aufgeschoben, bis Änderungen aufgezeichnet werden (f38099)
- Lokale Werte für die Zusammensetzung besser bereitstellen (a337ea)
SideEffect
ist als@ExplicitGroupsComposable
markiert, um die Erstellung einer Gruppe zu vermeiden. (I74815)- Vergleich von lokalen Karten mit Komposition bei der Wiederverwendung vermeiden (782071)
API-Änderungen
- Es wurde eine spezielle Fallüberladung für
CompositionLocalProviders
hinzugefügt, die den Overhead vermeidet, der zum schnelleren Bereitstellen mehrerer Werte verwendet wird, aber Overhead verursacht, wenn ein einzelner Wert bereitgestellt wird. (I6d640, b/288169379)
Fehlerkorrekturen
- Speicherleck in der Slot-Tabelle beheben (73fcfe)
- Beheben Sie, wie
rememberSaveable
wiederhergestellt wird, wennstateSaver
„null“ zurückgibt (90748c).
Version 1.6.0-alpha01
21. Juni 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha01
wird veröffentlicht. Version 1.6.0-alpha01 enthält diese Commits.
Fehlerkorrekturen
- Überspringen Sie die Neuzusammenstellung von untergeordneten Kompositionen, die entfernt werden. (Ieeb99, b/254645321)
- Weniger Zuweisungen beim Anwenden von Snapshots. (I65c09)
- Berechnung von
readableHash
inDerivedState
vermeiden, wenn der Snapshot nicht geändert wurde (68c565)
Version 1.5
Version 1.5.4
18. Oktober 2023
androidx.compose.runtime:runtime-*:1.5.4
wird veröffentlicht. Version 1.5.4 enthält diese Commits.
Version 1.5.3
4. Oktober 2023
androidx.compose.runtime:runtime-*:1.5.3
wird veröffentlicht. Version 1.5.3 enthält diese Commits.
Version 1.5.2
27. September 2023
androidx.compose.runtime:runtime-*:1.5.2
wird veröffentlicht. Version 1.5.2 enthält diese Commits.
Version 1.5.1
6. September 2023
androidx.compose.runtime:runtime-*:1.5.1
wird veröffentlicht. Version 1.5.1 enthält diese Commits.
Version 1.5.0
9. August 2023
androidx.compose.runtime:runtime-*:1.5.0
wird veröffentlicht. Version 1.5.0 enthält diese Commits.
API-Änderungen
- Zuweisungen in der Neuzusammensetzung, Farbanimationen und
AndroidComposeView
wurden entfernt. (Ib2bfa) - Die Annotation
@StateFactoryMarker
wurde hinzugefügt, um Funktionen zu kennzeichnen, die Status erstellen und in einenremember
-Aufruf eingeschlossen werden müssen. (I64550) - Primitive Versionen von „State“ und
MutableState
hinzufügen (fb3d89) Snapshot.isApplyObserverNotificationPending
hinzugefügt (I672a5)- Es wurden primitive Versionen der
State
API hinzugefügt, mit denen Int-, Long-, Float- und Double-Werte inState
-Objekten erfasst werden können, ohne dass Strafen für das automatische Boxing anfallen. Verwenden Sie die neuen Factory-MethodenmutableIntState(Int)
,mutableFloatStateOf(Float)
usw., um diese zu nutzen. (I48e43)
Fehlerkorrekturen
- Überspringen Sie die Neuzusammenstellung von untergeordneten Kompositionen, die entfernt werden. (Ieeb99, b/254645321)
- Snapshot-Referenz in
ComposerImpl
nicht beibehalten (0206f7) - Zusammensetzung nicht zweimal anwenden (f5791b)
- Ungültigmachung für nicht initialisierte abgeleitete Statuswerte sicherstellen (aa2a92)
- Rufe
onEndChanges
während der Kompositionsentsorgung auf. (62cc8c) - Problem beim Verschieben von Inhalten in eine Unterkomposition behoben (4beb41)
- Mögliche Deadlocks beheben (c1a425 und 8edce0)
- Der für ein Android-Fenster erstellte Recomposer blockiert jetzt nur noch Aufrufe von
withFrameNanos
anstelle der gesamten Komposition, wenn er eine ON_STOP-Benachrichtigung erhält. Das bedeutet, dass Fenster, die mit beendeten Aktivitäten verknüpft sind, weiterhin neu zusammengesetzt werden, wenn sich Daten ändern. Die Animationen oder andere Aufrufer vonwithFrameNanos
werden jedoch blockiert. (Id9e7f, b/240975572) - Deaktivierungs-Callbacks für
LayoutNode
vor dem Entfernen von Effekten ausführen 3784073 - Geänderte Flags für neu gestartete Lambdas korrigieren ea81df9
- Regression bei der Live-Bearbeitung für Composable mit Knoten beheben 73fd4d8
- ON_STOP sollte die Übertragungen der Frame-Clock anhalten, anstatt die Komposition ae276f1
SnapshotStateObserver
-Bereiche für unveränderte abgeleitete Status ungültig machen 84d9b1c- Möglichen Deadlock beim Schließen von Kompositionen beheben 28761fc
- Fehler beim Verschieben von Inhalten in eine Unterkomposition beheben 92d4156
- Geänderte Flags für neu gestartete Lambdas korrigieren (8a03e9)
- Deaktivierungs-Callbacks für
LayoutNode
vor dem Entfernen von Effekten ausführen (8b0fa4) - Fehler
endToMarker()
beim Beenden von Knotengruppen behoben. (d71d980) - Aktuelle
SlotWriter
-Gruppe für die Prüfung bei der Deaktivierung verwenden (a0b518b) - Entferne die
fill
inSlotTable.moveSlotGapTo()
und verschiebe sie in den Bereich „Schließen“ (81f9935). - Fehlende Entwertungen beheben, während sich verschiebbarer Inhalt bewegt (1d7c024)
- Sofortige Ungültigmachung für verschobene bewegliche Inhalte beheben (8676618)
Leistungsverbesserungen
- Vermeiden Sie die Berechnung von
readableHash
inDerivedState
, wenn der Snapshot nicht geändert wurde. (307102) - Reduzierte Zuweisungen (I65c09, d7ea77, 727974 und 445808)
- Schnelles Abbrechen des Verfassens von
CoroutineScopes
(a55362 und bd382f) - Datensätze von Statusobjekten mit nicht zugänglichen Statusdatensätzen überschreiben (c986960)
- Composer mit dem richtigen Bereich verwenden, wenn Gruppen realisiert werden (9a5e5b6)
IdentityArraySet
zum Speichern von Snapshot-Ungültigmachungen verwenden (7f60cca)- Zuweisungen für Snapshot-Beobachtungen reduzieren (5bc535f)
Version 1.5.0-rc01
26. Juli 2023
androidx.compose.runtime:runtime-*:1.5.0-rc01
wird veröffentlicht. Version 1.5.0-rc01 enthält diese Commits.
Fehlerkorrekturen
Das erneute Lesen abgeleiteter Status wird aufgeschoben, bis Änderungen aufgezeichnet werden (f38099)
Es ist eine optionale Prüfung verfügbar, mit der empfohlen wird,
mutableStateOf()
-Aufrufe zu den entsprechenden spezialisierten Typen für Primitiven zu migrieren. Die Lint-ID lautetAutoboxingStateCreation
. Bisher war diese Prüfung standardmäßig für alle Projekte aktiviert. Wenn Sie diese Warnung im Editor von Android Studio und in den Lint-Ausgaben Ihres Projekts sehen möchten, ändern Sie den Schweregrad von „Informational“ (Information) zu „Warning“ (Warnung) oder höher. Dazu deklarieren Siewarning "AutoboxingStateCreation"
in der build.gradle- oder build.gradle.kts-Konfiguration Ihres Moduls, wie unten gezeigt (I34f7e):android { lint { warning "AutoboxingStateCreation" } ... }
Version 1.5.0-beta03
28. Juni 2023
androidx.compose.runtime:runtime-*:1.5.0-beta03
wird veröffentlicht. Version 1.5.0-beta03 enthält diese Commits.
Fehlerkorrekturen
- Überspringen Sie die Neuzusammenstellung von untergeordneten Kompositionen, die entfernt werden. (Ieeb99, b/254645321)
Version 1.5.0-beta02
7. Juni 2023
androidx.compose.runtime:runtime-*:1.5.0-beta02
wird veröffentlicht. Version 1.5.0-beta02 enthält diese Commits.
Leistungsverbesserungen
- Vermeiden Sie die Berechnung von
readableHash
inDerivedState
, wenn der Snapshot nicht geändert wurde. (307102)
Version 1.5.0-beta01
24. Mai 2023
androidx.compose.runtime:runtime-*:1.5.0-beta01
wird veröffentlicht. Version 1.5.0-beta01 enthält diese Commits.
API-Änderungen
- Zuweisungen in der Neukomposition, Farbanimationen und
AndroidComposeView
(Ib2bfa) entfernt - Die Annotation
@StateFactoryMarker
wurde hinzugefügt, um Funktionen zu kennzeichnen, die Status erstellen und in einenremember
-Aufruf eingeschlossen werden müssen. (I64550) - Primitive Versionen von „State“ und
MutableState
hinzufügen (fb3d89) Snapshot.isApplyObserverNotificationPending
hinzugefügt (I672a5)
Fehlerkorrekturen
- Reduzierte Zuweisungen (I65c09, d7ea77, 727974 und 445808)
- Snapshot-Referenz in
ComposerImpl
nicht beibehalten (0206f7) - Schnelles Abbrechen des Verfassens von
CoroutineScopes
(a55362 und bd382f) - Zusammensetzung nicht zweimal anwenden (f5791b)
- Ungültigmachung für nicht initialisierte abgeleitete Statuswerte sicherstellen (aa2a92)
- Rufe
onEndChanges
während der Kompositionsentsorgung auf. (62cc8c) - Problem beim Verschieben von Inhalten in eine Unterkomposition behoben (4beb41)
- Mögliche Deadlocks beheben (c1a425
- ON_STOP sollte die Übertragungen der Frame-Clock anstelle der Komposition pausieren (f4a2d1)
- Geänderte Flags für neu gestartete Lambdas korrigieren (8a03e9)
- Deaktivierungs-Callbacks für
LayoutNode
vor dem Entfernen von Effekten ausführen (8b0fa4)
Externe Beiträge
Snapshot.isApplyObserverNotificationPending
hinzugefügt (I672a5)
Version 1.5.0-alpha04
10. Mai 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha04
wird veröffentlicht. Version 1.5.0-alpha04 enthält diese Commits.
API-Änderungen
- Es wurden primitive Versionen der
State
API hinzugefügt, mit denen Int-, Long-, Float- und Double-Werte inState
-Objekten erfasst werden können, ohne dass Strafen für das automatische Boxing anfallen. Verwenden Sie die neuen Factory-MethodenmutableIntState(Int)
,mutableFloatStateOf(Float)
usw., um diese zu nutzen. (I48e43)
Fehlerkorrekturen
Rufe
onEndChanges
während der Kompositionsentsorgung auf. Fokus-Knoten, die währendComposition.dispose
entfernt wurden, abonnierenonEndChanges
, um den Fokus zurückzusetzen.(03d4a47)Sorgen Sie für die Ungültigmachung von nicht initialisierten abgeleiteten Statuswerten. Jeder abgeleitete Status ist mit einer Liste seiner Abhängigkeiten in
SnapshotStateObserver
verknüpft. Diese Liste wird verwendet, um Bereiche zu invalidieren, die mit dem abgeleiteten Status verknüpft sind, wenn sich eine Abhängigkeit ändert. Die Abhängigkeitsänderung wird beim Fortschreiten des Snapshots registriert, was nach dem Lesen des abgeleiteten Status (aufgrund des Aufrufs vonSnapshot.notifyObjectsInitialized()
) erfolgen kann.Bei der bisherigen Logik für abgeleitete Statusbeobachtungen in
SnapshotStateObserver
wurden alte Abhängigkeiten bereinigt und dann der neue Wert gelesen. Dies führte zu einem Race Condition mit einer Invalidierung in einem bereinigten Zustand, in dem die Invalidierung der Abhängigkeit nicht registriert wurde.Durch diese Änderung werden das Lesen des abgeleiteten Status und die Bereinigung von Abhängigkeiten neu angeordnet. So wird sichergestellt, dass die Ungültigmachung immer in einem gültigen Status erfolgt. (c472be6)
Version 1.5.0-alpha03
19. April 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha03
wird veröffentlicht. Version 1.5.0-alpha03 enthält diese Commits.
API-Änderungen
- Der für ein Android-Fenster erstellte Recomposer blockiert jetzt nur noch Aufrufe von
withFrameNanos
anstelle der gesamten Komposition, wenn er eine ON_STOP-Benachrichtigung erhält. Das bedeutet, dass Fenster, die mit beendeten Aktivitäten verknüpft sind, weiterhin neu zusammengesetzt werden, wenn sich Daten ändern. Die Animationen oder andere Aufrufer vonwithFrameNanos
werden jedoch blockiert. (Id9e7f, b/240975572)
Fehlerkorrekturen
- Möglichen Deadlock in Snapshot-Liste und ‑Karte behoben 5c1a425
- Deaktivierungs-Callbacks für
LayoutNode
vor dem Entfernen von Effekten ausführen 3784073 - Geänderte Flags für neu gestartete Lambdas korrigieren ea81df9
- Regression bei der Live-Bearbeitung für Composable mit Knoten beheben 73fd4d8
- ON_STOP sollte die Übertragungen der Frame-Clock anhalten, anstatt die Komposition ae276f1
SnapshotStateObserver
-Bereiche für unveränderte abgeleitete Status ungültig machen 84d9b1c- Möglichen Deadlock beim Schließen von Kompositionen beheben 28761fc
- Fehler beim Verschieben von Inhalten in eine Unterkomposition beheben 92d4156
Version 1.5.0-alpha02
5. April 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha02
wird veröffentlicht. Version 1.5.0-alpha02 enthält diese Commits.
Neue Funktionen
- Der
getValue
-Operator von Kotlin kann jetzt zusammensetzbar sein (f174f6e)
Fehlerkorrekturen, Leistungsverbesserungen
- Datensätze von Statusobjekten mit nicht zugänglichen Statusdatensätzen überschreiben (c986960)
- Composer mit dem richtigen Bereich verwenden, wenn Gruppen realisiert werden (9a5e5b6)
- Fehler
endToMarker()
beim Beenden von Knotengruppen behoben. (d71d980) - Aktuelle
SlotWriter
-Gruppe für die Prüfung bei der Deaktivierung verwenden (a0b518b) IdentityArraySet
zum Speichern von Snapshot-Ungültigmachungen verwenden (7f60cca)- Entferne die
fill
inSlotTable.moveSlotGapTo()
und verschiebe sie in den Bereich „Schließen“ (81f9935). - Fehlende Entwertungen beheben, während sich verschiebbarer Inhalt bewegt (1d7c024)
- Sofortige Ungültigmachung für verschobene bewegliche Inhalte beheben (8676618)
- Zuweisungen für Snapshot-Beobachtungen reduzieren (5bc535f)
Version 1.5.0-alpha01
22. März 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha01
wird veröffentlicht. Version 1.5.0-alpha01 enthält diese Commits.
Neue Funktionen
- Fügt
Modifier.Node#coroutineScope
hinzu, damitModifier.Nodes
Koroutinen starten kann (I76ef9) - Ermöglichen Sie
Modifier.Nodes
,CompositionLocals
zu lesen, indem Sie dieCompositionLocalConsumerModifierNode
-Schnittstelle implementieren. (Ib44df)
Version 1.4
Version 1.4.3
3. Mai 2023
androidx.compose.runtime:runtime-*:1.4.3
wird ohne Änderungen veröffentlicht.
Version 1.4.2
19. April 2023
androidx.compose.runtime:runtime-*:1.4.2
wird veröffentlicht. Version 1.4.2 enthält diese Commits.
Fehlerkorrekturen
Möglichen Deadlock in Snapshot-Liste und Karte 2eb6570 behoben
Wenn Sie Inhalte zu einem
SnapshotStateList
oderSnapshotStateMap
hinzufügen, kann es zu einem Deadlock kommen, wenn die Änderung gleichzeitig mit einem direkten Schreiben in den Statusdatensatz erfolgt. Dieses Problem tritt seit den Änderungen in 93fcae828b, bei denen nicht verwendete Datensätze direkt freigegeben werden, deutlich häufiger auf.Die Sperren sind jetzt so angeordnet, dass niemals versucht wird, eine Snapshot-Sperre zu setzen, wenn eine Karten- oder Listensperre aktiv ist.
Version 1.4.1
5. April 2023
androidx.compose.runtime:runtime-*:1.4.1
wird veröffentlicht. Version 1.4.1 enthält diese Commits.
Fehlerkorrekturen
- Fehler beim Beenden von Knotengruppen behoben. d71d980
endToMarker()
Version 1.4.0
22. März 2023
androidx.compose.runtime:runtime-*:1.4.0
wird veröffentlicht. Version 1.4.0 enthält diese Commits.
Wichtige Änderungen seit Version 1.3.0
- Verwende den initialisierten Wert aus
LiveData
für die erste Komposition 3680e25. - Fügen Sie
ComposeNodeLifecycleCallback
hinzu, um den Lebenszyklus von Compose-Knoten zu beobachten. 8b6a258 - Attribut
parameterTypes
zuComposableMethod
7b6c7ad hinzufügen
Fehlerkorrekturen und Leistungsverbesserungen
- Löschen Sie beide Bereichsindexe in
SnapshotStateObserver
29f4a3e. - Gruppen hinzufügen, die im Hauptteil von nicht überspringbaren Lambdas benötigt werden 7d06752
- Speicherreferenzeigenschaften des Snapshot-Status 93fcae8 verbessern
- Entfernen von Umrahmungen bei lokalen Kompositions-Lookups 0875717
- Richtigen Schlüssel für nicht wiederverwendbare Knotengruppen verwenden 6388d8d
SnapshotStateObserver
vor rekursiven und gleichzeitigen Anwendungen schützen 98cb6ba- In der Methode
IdentityArraySet
„get“ wurde eine Prüfung auf Indexgrenzen hinzugefügt. 35a77d3 - Compose-Modul aktualisieren, um
ViewTreeLifecycleOwner
-Erweiterungen zu verwenden 21c2122 - Benachrichtigungen zum Anwenden senden, nachdem Recomposer den Frame fertiggestellt hat. 98f2641
- Absturz aufgrund von Indexüberschreitung beim Abbrechen des Recomposers behoben 8f8656f
- Neuzusammenstellung immer erzwingen, wenn sich übergeordnete Anbieter der Komposition geändert haben 9526fcc
- Toleranz des Recomposers für abgebrochene Jobs a55f7ed
- Verbesserte Verarbeitung von Invalidierungen für eine große Anzahl von Komponisten 9b7ed67
- Fehler beim Generieren von Abschlussgruppen für nicht lokale Rückgaben behoben b6f590c
Version 1.4.0-rc01
8. März 2023
androidx.compose.runtime:runtime-*:1.4.0-rc01
wird veröffentlicht. Version 1.4.0-rc01 enthält diese Commits.
Fehlerkorrekturen
Version 1.4.0-beta02
22. Februar 2023
androidx.compose.runtime:runtime:1.4.0-beta02
und androidx.compose.runtime:runtime-saveable:1.4.0-beta02
werden veröffentlicht. Version 1.4.0-beta02 enthält diese Commits.
Version 1.4.0-beta01
8. Februar 2023
androidx.compose.runtime:runtime-*:1.4.0-beta01
wird veröffentlicht. Version 1.4.0-beta01 enthält diese Commits.
API-Änderungen
ComposeNodeLifecycleCallback
wurde hinzugefügt, um den Lebenszyklus von Compose-Knoten zu beobachten (I3731b).@TestOnly
wurde zuComposer.disableSourceInformation()
hinzugefügt, da diese Funktion nur in einem Test sicher aufgerufen werden kann. (I896c8)
Fehlerkorrekturen
- Entfernen von Umrandungen bei lokalen Kompositions-Lookups (62f66a)
- Speicherreferenzmerkmale des Snapshot-Status verbessern (dfb451)
Version 1.4.0-alpha05
25. Januar 2023
androidx.compose.runtime:runtime:1.4.0-alpha05
und androidx.compose.runtime:runtime-saveable:1.4.0-alpha05
werden veröffentlicht. Version 1.4.0-alpha05 enthält diese Commits.
API-Änderungen
- Weitere Typen/Nullwerte von Inline-/eingestellten/ausgeblendeten Funktionen (I24f91)
Version 1.4.0-alpha04
11. Januar 2023
androidx.compose.runtime:runtime-*:1.4.0-alpha04
wird veröffentlicht. Version 1.4.0-alpha04 enthält diese Commits.
API-Änderungen
TestMonotonicFrameClock
verwendet jetzt die korrekte Anmerkung für Tests. (I95c9e)
Fehlerkorrekturen
SnapshotStateObserver
vor rekursiven und gleichzeitigen Anträgen schützen (d902fb)
Version 1.4.0-alpha03
7. Dezember 2022
androidx.compose.runtime:runtime-*:1.4.0-alpha03
wird veröffentlicht. Version 1.4.0-alpha03 enthält diese Commits.
API-Änderungen
- Hinzufügen einer neuen öffentlichen Methode zur Klasse
ComposableMethod
, analog zujava.lang.reflect.Method#getParameterTypes()
(Iab0c3)
Fehlerkorrekturen
- Benachrichtigungen zum Anwenden von Snapshots werden jetzt gesendet, nachdem
Recomposer
die Änderungen angewendet hat. (Iad6c0, b/222093277)
Version 1.4.0-alpha02
9. November 2022
androidx.compose.runtime:runtime-*:1.4.0-alpha02
wird veröffentlicht. Version 1.4.0-alpha02 enthält diese Commits.
Version 1.4.0-alpha01
24. Oktober 2022
androidx.compose.runtime:runtime-*:1.4.0-alpha01
wird veröffentlicht. Version 1.4.0-alpha01 enthält diese Commits.
API-Änderungen
SnapshotStateList
undSnapshotStateMap
haben jetzt explizite Implementierungen vontoList()
bzw.toMap()
. Diese Methoden geben ihren aktuellen Inhalt zurück, ohne eine Kopie zu erstellen, da sie die internen unveränderlichen Daten zurückgeben, die zum Speichern ihres Inhalts verwendet werden. Dieser Wert kann beispielsweise verwendet werden, um mitsnapshotFlow
einen Wertefluss zu erzeugen, ohne dass die Daten kopiert werden müssen. (Ica2bd)
Version 1.3
Version 1.3.3
11. Januar 2023
androidx.compose.runtime:runtime-*:1.3.3
wird veröffentlicht. Version 1.3.3 enthält diese Commits.
- Keine Änderungen seit Version 1.3.2
Version 1.3.2
7. Dezember 2022
androidx.compose.runtime:runtime-*:1.3.2
wird veröffentlicht. Version 1.3.2 enthält diese Commits.
Fehlerkorrekturen
- Aktualisiert zur Unterstützung von androidx.compose.ui 1.3.2
Version 1.3.1
9. November 2022
androidx.compose.runtime:runtime-*:1.3.1
wird veröffentlicht. Version 1.3.1 enthält diese Commits.
Version 1.3.0
24. Oktober 2022
androidx.compose.runtime:runtime-*:1.3.0
wird veröffentlicht. Version 1.3.0 enthält diese Commits.
Wichtige Änderungen seit Version 1.2.0
Ausnahmebehandlung / Unterstützung für Live-Bearbeitung
- Zur besseren Unterstützung der Livebearbeitung wurden APIs hinzugefügt, mit denen Ausnahmen während der Komposition behandelt werden können.
- Fehlerbehandlung bei der Zusammensetzung für Hot Reload
- Fehler bei der Live-Bearbeitung beim Speichern/Wiederherstellen behandeln
Composition-Tracing
- Es wurden APIs für das Laufzeittracing hinzugefügt, um neue Tools für das Zusammensetzungstracing zu unterstützen.
- Zusammensetzbare Start-/Endaufrufe für Trace-Ereignisse generieren
- ComposerKt.traceEventStart(Int, String) wurde wieder hinzugefügt
Composable Reflection APIs
- Es wurde eine neue
ComposableMethod
-API hinzugefügt, um zuverlässigere auf Reflexion basierende Aufrufe von zusammensetzbaren APIs zu ermöglichen. - invokeComposable in die Compose-Laufzeit verschieben
- API überarbeiten, um zusammensetzbare Methode aufzurufen
Laufzeitkorrekturen
- Fehlerhaften Bereichstest für die Slot-Tabelle behoben, bei dem nach Markierungen gesucht wurde
- Verschieben von Inhalten in und aus SubcomposeLayout zulassen
- Problem beim Verschieben von Inhalten in neue Inhalte einer Unterkomposition behoben
Snapshot-System
- Das Snapshot-System wurde in Bezug auf Speicherverwaltung, Leistung und Richtigkeit verbessert.
- Entfernen von Bereichen in SnapshotStateObserver optimieren
- Verschachtelte Snapshots, die aus transparenten Snapshots erstellt wurden, löschen
- Wettlaufsituation beim Lesen des Status aus dem globalen Snapshot behoben
- DerivedState in SnapshotStateObserver unterstützen
- Verhindern, dass abgeleiteter Status aus der Komposition entfernt wird, wenn er in anderen Bereichen gelesen wird
- IdentityArrayMap anstelle von HashMap in DerivedState verwenden
- Abgeleitete Statusbeobachter für die Verwendung von veränderlichen Vektoren aktualisieren
- Bereinigung des SnapshotStateObserver-Status aktualisieren
- SnapshotStateObserver.invalidated durch ArraySet ersetzen
- Wettlaufsituation beim Lesen des Status aus dem globalen Snapshot behoben
- Verwendung eines alten Datensatzes bei der Berechnung des DerivedState-Hashwerts korrigieren
- Problem mit Race Condition beim Aktualisieren des globalen Snapshots behoben
- Bereinigung von Bereichsbeobachtungen in SnapshotStateObserver beschleunigen
Version 1.3.0-rc01
5. Oktober 2022
androidx.compose.runtime:runtime-*:1.3.0-rc01
wird veröffentlicht. Version 1.3.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Der Fehler
ArrayIndexOutOfBoundsException
aus der Slot-Tabelle wurde behoben (b/249076084).
Version 1.3.0-beta03
21. September 2022
androidx.compose.runtime:runtime-*:1.3.0-beta03
wird veröffentlicht. Version 1.3.0-beta03 enthält diese Commits.
Funktionsgefährdende Verhaltensänderung
- Der Parameter für
remember
undrememberCoroutineScope
wurde incrossinline
geändert. Dadurch wird ein Fehler für vorzeitige Rückgaben gemeldet, anstatt eine vorzeitige Rückgabe zuzulassen, die später zu einem internen Fehler führt. - Diese Änderung kann möglicherweise zu neuen Compilerfehlern führen, die gemeldet werden und bei denen nicht lokale Rückgaben aus den an diese Funktionen übergebenen Lambdas entfernt werden müssen. (Ibea62)
Version 1.3.0-beta02
7. September 2022
androidx.compose.runtime:runtime-*:1.3.0-beta02
wird veröffentlicht. Version 1.3.0-beta02 enthält diese Commits.
Fehlerkorrekturen
- Aktualisierte API (I64ca0)
Version 1.3.0-beta01
24. August 2022
androidx.compose.runtime:runtime-*:1.3.0-beta01
wird veröffentlicht. Version 1.3.0-beta01 enthält diese Commits.
API-Änderungen
- Der Klasse
CompositionData
wurde einefind
-Methode hinzugefügt, damit Entwicklertools, die diese API verwenden, schnell eine Untergruppe einer Komposition anhand ihrer Identität finden können. (I5794f)
Version 1.3.0-alpha03
10. August 2022
androidx.compose.runtime:runtime-*:1.3.0-alpha03
wird veröffentlicht. Version 1.3.0-alpha03 enthält diese Commits.
Version 1.3.0-alpha02
27. Juli 2022
androidx.compose.runtime:runtime-*:1.3.0-alpha02
wird veröffentlicht. Version 1.3.0-alpha02 enthält diese Commits.
API-Änderungen
ComposerKt.traceEventStart(Int, String)
wurde aus Gründen der Abwärtskompatibilität wieder hinzugefügt (I6e6de).
Version 1.3.0-alpha01
29. Juni 2022
androidx.compose.runtime:runtime-*:1.3.0-alpha01
wird veröffentlicht. Version 1.3.0-alpha01 enthält diese Commits.
API-Änderungen
- Dienstfunktionen in die Laufzeit verschieben (I4f729)
Version 1.2
Version 1.2.1
10. August 2022
androidx.compose.runtime:runtime-*:1.2.1
wird veröffentlicht. Version 1.2.1 enthält diese Commits.
Fehlerkorrekturen
- Behebung eines Speicherlecks: Verschachtelte Snapshots, die aus transparenten Snapshots erstellt wurden, werden verworfen. b/239603305
Version 1.2.0
27. Juli 2022
androidx.compose.runtime:runtime-*:1.2.0
wird veröffentlicht. Version 1.2.0 enthält diese Commits.
Wichtige Änderungen seit 1.1.0
In Compose Runtime wurden in Version 1.2.0 einige Funktionen eingeführt und viele stabilisierende Fehlerkorrekturen vorgenommen. Die wichtigste Neuerung war die Einführung der
movableContentOf
API, mit der sich komplexe Benutzeroberflächen wie Übergänge zwischen gemeinsamen Elementen ermöglichen lassen. DiemovableContentOf
API konvertiert ein zusammensetzbares Lambda in ein Lambda, das seinen Status und die entsprechenden Knoten an jeden neuen Speicherort verschiebt, an dem es aufgerufen wird. Wenn der vorherige Aufruf die Komposition verlässt, wird der Status vorübergehend beibehalten. Wenn ein neuer Aufruf des Lambda in die Komposition eintritt, werden der Status und die zugehörigen Knoten an den Ort des neuen Aufrufs verschoben. Wenn kein neuer Anruf hinzugefügt wird, wird der Status dauerhaft entfernt und die Remember-Beobachter werden benachrichtigt.Wenn ein
movableContentOf
-Lambda in derselben Komposition mehrmals aufgerufen wird, werden für jeden Aufruf neue Status und Knoten erstellt. Wenn Aufrufe die Komposition verlassen und neue Aufrufe eingehen, wird der Status in der Reihenfolge, in der sie aufgerufen werden, von den ersten verlassenen Aufrufen zu den eingehenden Aufrufen verschoben. Alle Zustände, die nicht durch neue Aufrufe beansprucht werden, werden dauerhaft entfernt.Neben dieser und einigen anderen neuen Funktionen wurde viel Zeit darauf verwendet, das Laufzeit- und Snapshot-Status-System zu stabilisieren. Verschiedene Speicherlecks wurden behoben und Codepfade optimiert.
Eine zusammengefasste Liste der Änderungen finden Sie unten:
Neue Funktionen in 1.2
- Experimentellen Snapshot „unsafeEnter/Leave“ hinzufügen
- Experimentelle API „Snapshot.asContextElement“ hinzufügen
- Snapshot.withoutReadObservation einführen
- Zulassen, dass sich der Status innerhalb einer Komposition ändert
- Recompositions in Compose nachverfolgen
Leistung in 1.2
- Lokale Leistung der Komposition verbessern
- Baseline-Profile für Compose sollten anhand von Benchmarks abgeleitet werden.
Fehlerkorrekturen in 1.2
- Tracking-Informationen aus Bereichen für die Neuzusammenstellung von Releases entfernen
- Verhindern, dass abgeleiteter Status aus der Komposition entfernt wird, wenn er in anderen Bereichen gelesen wird
- Effizienteres removeScope() in SnapshotStateObserver verwenden
- Abgeleitete Statusabhängigkeiten in der Komposition bereinigen
- Problem behoben, bei dem sich „currentCompositeKeyHash“ nach der inneren Neuzusammenstellung in verschiebaren Inhalten ändert
- Ungültige Kompositionen bei der Entsorgung bereinigen
- Problem mit dem Lesen des abgeleiteten Status während der Neuzusammensetzung behoben
- Speicherleck beim Beobachten abgeleiteter Statusobjekte behoben
- Der zusammengesetzte Hash-Schlüssel für „movableContent“ wurde korrigiert, um Konsistenz zu gewährleisten.
- Eckfall behoben, in dem der Composer abstürzte
- Sicherstellen, dass die erzwungene Ungültigmachung einer Gruppe eine Neuzusammensetzung erzwingt
- Fehler behoben, bei dem „rememberSaveable“ mit Eingabe in der falschen Reihenfolge wiederhergestellt wurde
Version 1.2.0-rc03
29. Juni 2022
androidx.compose.runtime:runtime-*:1.2.0-rc03
wird veröffentlicht. Version 1.2.0-rc03 enthält diese Commits.
Fehlerkorrekturen
- Abgeleitete Statusbeobachtungen wurden zuvor bedingungslos aus dem Recompose-Bereich und der Komposition entfernt, was andere Bereiche beeinträchtigte, die möglicherweise weiterhin den abgeleiteten Status beobachten. Durch diese Änderung werden abgeleitete Statusinstanzen nur entfernt, wenn sie nicht mehr von anderen Bereichen beobachtet werden. (b/236618362)
Version 1.2.0-rc02
22. Juni 2022
androidx.compose.runtime:runtime-*:1.2.0-rc02
wird veröffentlicht. Version 1.2.0-rc02 enthält diese Commits.
Version 1.2.0-rc01
15. Juni 2022
androidx.compose.runtime:runtime-*:1.2.0-rc01
wird veröffentlicht. Version 1.2.0-rc01 enthält diese Commits.
API-Änderungen
- Schnittstellen in Compose-Bibliotheken werden jetzt mit den Standard-Schnittstellenmethoden von JDK8 erstellt (I5bcf1).
Version 1.2.0-beta03
1. Juni 2022
androidx.compose.runtime:runtime-*:1.2.0-beta03
wird veröffentlicht. Version 1.2.0-beta03 enthält diese Commits.
Version 1.2.0-beta02
18. Mai 2022
androidx.compose.runtime:runtime-*:1.2.0-beta02
wird veröffentlicht. Version 1.2.0-beta02 enthält diese Commits.
Version 1.2.0-beta01
11. Mai 2022
androidx.compose.runtime:runtime-*:1.2.0-beta01
wird veröffentlicht. Version 1.2.0-beta01 enthält diese Commits.
Neue Funktionen
- Dies ist die erste Betaversion von 1.2.
API-Änderungen
- Experimentelle
Snapshot.unsafeEnter/unsafeLeave
hinzugefügt (I108f3) - Experimentelle
Snapshot.asContextElement()
API hinzugefügt (Iff072) - Die Annotation
@ComposableTarget
und mit@ComposableTargetMarker
gekennzeichnete Annotationen können jetzt mit dem Präfix@file
auf Dateiebene verwendet werden. Wenn Sie eine Zielanmerkung auf Dateiebene verwenden, geht der Compiler davon aus, dass alle zusammensetzbaren Funktionen in der Datei für den zugehörigen Applier vorgesehen sind. Wenn Sie beispielsweise@file:UiComposable
verwenden, wird deklariert, dass alle@Composable
-Funktionen auf den Compose-UI-Applier ausgerichtet sind. Eine Funktion, die auf einen anderen Applier ausgerichtet werden muss, muss die Zielmarkierungsanmerkung für den gewünschten Applier explizit angeben. (I40804)
Version 1.2.0-alpha08
20. April 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha08
wird veröffentlicht. Version 1.2.0-alpha08 enthält diese Commits.
API-Änderungen
TracingInProgress
wurde der SchnittstelleCompositionTracer
hinzugefügt. (Ic6f12)recomposeScopeIdentity
zu Composer hinzufügen (I0c873)- Eingeschränkte Tracing-APIs (Composer.setTracer) auf
OptIn(InternalComposeTracingApi)
. (I9187f) ResuableContentHost
wurde hinzugefügt, um die Lebensdauer des Status, der für wiederverwendbare Inhalte erstellt wird, besser steuern zu können. Wenn eine untergeordnete Komposition beispielsweise vorübergehend nicht verwendet wird, kann der Inhalt deaktiviert werden. Dadurch wird der gesamte gespeicherte Status in der Komposition vergessen und beispielsweise alle Einweg-Effekte werden ausgelöst. (I2c0f2, b/220322704)
Version 1.2.0-alpha07
6. April 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha07
wird veröffentlicht. Version 1.2.0-alpha07 enthält diese Commits.
API-Änderungen
- Die neue Funktion
Snapshot.withoutReadObservation { ... }
wurde hinzugefügt. Damit können Nutzer das übergebene Lambda ausführen, ohne die Änderungen der Statuswerte zu abonnieren, die während dieses Blocks gelesen werden. Das kann in Anwendungsfällen nützlich sein, in denen Sie von den auf Snapshots basierenden threadsicheren Lese-/Schreibvorgängen profitieren möchten, den Wert aber lesen möchten, ohne unnötige Neukompositionen oder ‑messungen zu verursachen. (I9f365, b/214054486)
Version 1.2.0-alpha06
23. März 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha06
wird veröffentlicht. Version 1.2.0-alpha06 enthält diese Commits.
Version 1.2.0-alpha05
9. März 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha05
wird veröffentlicht. Version 1.2.0-alpha05 enthält diese Commits.
Externe Beiträge
- Aktualisiert auf Kotlinx-Coroutines 1.6.0 (I3366d)
Version 1.2.0-alpha04
23. Februar 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha04
wird veröffentlicht. Version 1.2.0-alpha04 enthält diese Commits.
API-Änderungen
Die Funktionen
ComposableTarget
,ComposableTargetMarker
undComposableOpenTarget
wurden hinzugefügt, mit denen zur Kompilierzeit gemeldet werden kann, wenn eine zusammensetzbare Funktion für einen Applier aufgerufen wird, für den sie nicht vorgesehen ist.In den meisten Fällen können die Annotationen vom Compose-Compiler-Plug-in abgeleitet werden. Die direkte Verwendung dieser Annotationen sollte daher selten sein. Die Fälle, die nicht abgeleitet werden können, umfassen das Erstellen und Verwenden eines benutzerdefinierten Appliers, abstrakte zusammensetzbare Funktionen (z. B. Schnittstellenmethoden), Felder oder globale Variablen, die zusammensetzbare Lambdas sind (lokale Variablen und Parameter werden abgeleitet), oder wenn
ComposeNode
oder eine zugehörige zusammensetzbare Funktion verwendet wird.Bei benutzerdefinierten Appliern muss für die zusammensetzbaren Funktionen, die
ComposeNode
oderReusableComposeNode
aufrufen, die AnnotationCompoableTarget
für die Funktion und alle zusammensetzbaren Lambda-Parametertypen hinzugefügt werden. Es wird jedoch empfohlen, eine Annotation zu erstellen, die mitComposableTargetMarker
annotiert ist, und dann die markierte Annotation anstelle vonComposableTarget
direkt zu verwenden. Eine mitComposableTargetMarker
markierte zusammensetzbare Annotation entspricht einemComposbleTarget
mit dem vollständig qualifizierten Namen der Attributklasse als „applier“-Parameter. Ein Beispiel für die Verwendung vonComposableTargetMarker
finden Sie unteranroidx.compose.ui.UiComposable
. (I38f11)
Version 1.2.0-alpha03
9. Februar 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha03
wird veröffentlicht. Version 1.2.0-alpha03 enthält diese Commits.
API-Änderungen
movableContentOf
wurde hinzugefügt. Damit wird ein zusammensetzbares Lambda in ein Lambda umgewandelt, das seinen Status und die entsprechenden Knoten an jeden neuen Ort verschiebt, an dem es aufgerufen wird. Wenn der vorherige Aufruf die Komposition verlässt, wird der Status vorübergehend beibehalten. Wenn ein neuer Aufruf des Lambda in die Komposition eintritt, werden der Status und die zugehörigen Knoten an den Ort des neuen Aufrufs verschoben. Wenn kein neuer Anruf hinzugefügt wird, wird der Status dauerhaft entfernt und die Remember-Beobachter werden benachrichtigt.Wenn ein
movableContentOf
-Lambda in derselben Komposition mehrmals aufgerufen wird, werden für jeden Aufruf neue Status und Knoten erstellt. Wenn Aufrufe die Komposition verlassen und neue Aufrufe eingehen, wird der Status in der Reihenfolge, in der sie aufgerufen werden, von den ersten verlassenen Aufrufen zu den eingehenden Aufrufen verschoben. Alle Zustände, die nicht durch neue Aufrufe beansprucht werden, werden dauerhaft entfernt. (Ib4850)Der Komposition wurde eine Tracing-API hinzugefügt, damit Tools detailliertere Tracing-Informationen zu zusammensetzbaren Funktionen bereitstellen können. Der Compiler generiert jetzt Aufrufe der Tracing API, die Quellinformationen enthalten. (Ib0eb5)
Wenn Sie diese Aufrufe und die zugehörigen Quellinformationen aus einem Release-Build entfernen möchten, fügen Sie die folgende Proguard-Regel hinzu:
-assumenosideeffects public class androidx.compose.runtime.ComposerKt { boolean isTraceInProgress(); void traceEventStart(int,java.lang.String); void traceEventEnd(); }
Fügen Sie
InternalComposeScope
hinzu, damit Tools ein Composable bei Neukompositionen identifizieren können. (I07a3f)
Version 1.2.0-alpha02
26. Januar 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha02
wird veröffentlicht. Version 1.2.0-alpha02 enthält diese Commits.
Version 1.2.0-alpha01
12. Januar 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha01
wird veröffentlicht. Version 1.2.0-alpha01 enthält diese Commits.
API-Änderungen
- Das Feld
identity
wurdeCompositionData
hinzugefügt, um im Layout Inspector unveränderliche IDs zu generieren. (Ic116e)
Abhängigkeitsupdates
- Jetzt von Kotlin
1.6.10
abhängig.
Version 1.1
Version 1.1.1
23. Februar 2022
androidx.compose.runtime:runtime-*:1.1.1
wird veröffentlicht. Version 1.1.1 enthält diese Commits.
Fehlerkorrekturen
- Fehler bei
NullPointerException
unterandroidx.compose.ui.platform.RenderNodeLayer.updateDisplayList
beheben (aosp/1947059, b/206677462) - Ein Absturz, der durch Zwischenablageinhalte beim Lesen aus der Zwischenablage unter Android verursacht wurde, wurde behoben. (I06020, b/197769306)
- RTL-Problem in
LazyVerticalGrid
behoben (aosp/1931080, b/207510535)
Version 1.1.0
9. Februar 2022
androidx.compose.runtime:runtime-*:1.1.0
wird veröffentlicht. Version 1.1.0 enthält diese Commits.
Wichtige Änderungen seit Version 1.0.0
- Stabile Unterstützung für den Overscroll-Effekt von Android 12
- Verbesserungen bei der Größe von Berührungszielen
- Im Vergleich zu Compose 1.0 wird der Layoutbereich von Material-Komponenten erweitert, um den Richtlinien für Bedienungshilfen in Material Design für die Größe von Berührungszielen zu entsprechen. Der Berührungszielbereich einer Schaltfläche wird beispielsweise auf eine Mindestgröße von
48x48dp
erweitert, auch wenn Sie die Größe der Schaltfläche kleiner festlegen. Dadurch wird Compose Material an das Verhalten von Material Design Components angepasst. So ist das Verhalten konsistent, wenn Sie Views und Compose mischen. Diese Änderung sorgt auch dafür, dass beim Erstellen der Benutzeroberfläche mit Compose Material-Komponenten die Mindestanforderungen für die Barrierefreiheit von Touch-Zielen erfüllt werden. - Stabile Unterstützung für Navigation Rail
- Eine Reihe zuvor experimenteller APIs wird auf stabil umgestellt.
- Unterstützung für neuere Versionen von Kotlin
Version 1.1.0-rc03
26. Januar 2022
androidx.compose.runtime:runtime-*:1.1.0-rc03
wird veröffentlicht. Version 1.1.0-rc03 enthält diese Commits.
Fehlerkorrekturen
- Aktualisiert, um Compose Material
1.1.0-rc03
zu unterstützen
Version 1.1.0-rc01
15. Dezember 2021
androidx.compose.runtime:runtime-*:1.1.0-rc01
wird veröffentlicht. Version 1.1.0-rc01 enthält diese Commits.
Version 1.1.0-beta04
1. Dezember 2021
androidx.compose.runtime:runtime-*:1.1.0-beta04
wird veröffentlicht. Version 1.1.0-beta04 enthält diese Commits.
Neue Funktionen
- Aktualisiert, um mit Kotlin
1.6.0
kompatibel zu sein
Version 1.1.0-beta03
17. November 2021
androidx.compose.runtime:runtime-*:1.1.0-beta03
wird veröffentlicht. Version 1.1.0-beta03 enthält diese Commits.
Version 1.1.0-beta02
3. November 2021
androidx.compose.runtime:runtime-*:1.1.0-beta02
wird veröffentlicht. Version 1.1.0-beta02 enthält diese Commits.
API-Änderungen
- Der Snapshot-Code wurde in mehrere Dateien aufgeteilt, befindet sich aber weiterhin in derselben JVM-Klasse. (Ic6c98)
Version 1.1.0-beta01
27. Oktober 2021
androidx.compose.runtime:runtime-*:1.1.0-beta01
wird veröffentlicht. Version 1.1.0-beta01 enthält diese Commits.
Version 1.1.0-alpha06
13. Oktober 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha06
wird veröffentlicht. Version 1.1.0-alpha06 enthält diese Commits.
API-Änderungen
InternalCompilerApi
aus Composer-Methoden entfernt, die modulübergreifend aufgerufen werden müssen (I1aa0b)Recomposer.state
wurde eingestellt und durchRecomposer.currentState
ersetzt, um den Typ in einen StateFlow zu ändern (Ic2ab3, b/197773820).
Version 1.1.0-alpha05
29. September 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha05
wird veröffentlicht. Version 1.1.0-alpha05 enthält diese Commits.
Version 1.1.0-alpha04
15. September 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha04
wird veröffentlicht. Version 1.1.0-alpha04 enthält diese Commits.
Version 1.1.0-alpha03
1. September 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha03
wird veröffentlicht. Version 1.1.0-alpha03 enthält diese Commits.
Neue Funktionen
- Der Compose-Compiler unterstützt jetzt ältere Versionen der Compose-Laufzeit (1.0). Vor dieser Änderung war der Compose-Compiler nur mit der Compose-Laufzeit derselben Version oder einer späteren Version kompatibel. Nach dieser Änderung ist der Compose-Compiler mit einer älteren Version der Compose-Laufzeit (1.0) kompatibel. (aosp/1796968)
- Compose
1.1.0-alpha03
wurde aktualisiert und hängt jetzt von Kotlin1.5.30
ab. (I74545)
Version 1.1.0-alpha02
18. August 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha02
wird veröffentlicht. Version 1.1.0-alpha02 enthält diese Commits.
Version 1.1.0-alpha01
4. August 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha01
wird veröffentlicht. Version 1.1.0-alpha01 enthält diese Commits.
Version 1.0
Version 1.0.5
3. November 2021
androidx.compose.runtime:runtime-*:1.0.5
wird veröffentlicht. Version 1.0.5 enthält diese Commits.
Fehlerkorrekturen
- Ein Absturz beim Tracking von „derivedStateOf“-Instanzen wurde behoben. (aosp/1792247)
Version 1.0.4
13. Oktober 2021
androidx.compose.runtime:runtime-*:1.0.4
wird veröffentlicht. Version 1.0.4 enthält diese Commits.
Abhängigkeitsupdates
- Aktualisiert, um von Kotlin
1.5.31
abhängig zu sein
Version 1.0.3
29. September 2021
androidx.compose.runtime:runtime-*:1.0.3
wird veröffentlicht. Version 1.0.3 enthält diese Commits.
Abhängigkeitsupdates
- Aktualisiert, um von Kotlin
1.5.30
abhängig zu sein
Version 1.0.2
1. September 2021
androidx.compose.runtime:runtime-*:1.0.2
wird veröffentlicht. Version 1.0.2 enthält diese Commits.
Aktualisiert zur Unterstützung der Compose-Version 1.0.2
. Compose 1.0.2
ist weiterhin mit Kotlin 1.5.21
kompatibel.
Version 1.0.1
4. August 2021
androidx.compose.runtime:runtime-*:1.0.1
wird veröffentlicht. Version 1.0.1 enthält diese Commits.
Abhängigkeitsupdates
- Die Abhängigkeit wurde auf Kotlin
1.5.21
aktualisiert.
Version 1.0.0
28. Juli 2021
androidx.compose.runtime:runtime-*:1.0.0
wird veröffentlicht. Version 1.0.0 enthält diese Commits.
Wichtige Funktionen von Version 1.0.0
Dies ist die erste stabile Version von Compose. Weitere Informationen finden Sie im offiziellen Compose-Release-Blog.
Bekannte Probleme
Wenn Sie Android Studio Bumblebee Canary 4 oder AGP
7.1.0-alpha04
/7.1.0-alpha05
verwenden, kann es zu folgendem Absturz kommen:java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
Um das Problem zu beheben, erhöhen Sie vorübergehend die minSdkVersion in Ihrer
build.gradle
-Datei auf 24 oder höher. Dieses Problem wird in der nächsten Version von Android Studio Bumblebee und AGP7.1
behoben. (b/194289155)
Version 1.0.0-rc02
14. Juli 2021
androidx.compose.runtime:runtime-*:1.0.0-rc02
wird veröffentlicht. Version 1.0.0-rc02 enthält diese Commits.
- Race-Bedingungen in SnapshotStateObserver wurden behoben, die zu sporadischen NullPointerExceptions geführt haben. (aosp/1763445, aosp/1758105, b/192677711)
- Probleme mit Laufzeit-Snapshots, die zu
java.lang.IllegalStateException: Reading a state that was created after the snapshot was taken or in a snapshot that has not yet been applied
-Abstürzen geführt haben, wurden behoben. (b/193006595, b/192570897)
Version 1.0.0-rc01
1. Juli 2021
androidx.compose.runtime:runtime-*:1.0.0-rc01
wird veröffentlicht. Version 1.0.0-rc01 enthält diese Commits.
Version 1.0.0-beta09
16. Juni 2021
androidx.compose.runtime:runtime-*:1.0.0-beta09
wird veröffentlicht. Version 1.0.0-beta09 enthält diese Commits.
Hinzugefügte Profilregeln
In dieser Version werden den folgenden Compose-Modulen Profilregeln hinzugefügt (I14ed6):
- androidx.compose.animation
- androidx.compose.animation-core
- androidx.compose.foundation
- androidx.compose.foundation-layout
- androidx.compose.material
- androidx.compose.material-ripple
- androidx.compose.runtime
- androidx.compose.ui
- androidx.compose.ui.geometry
- androidx.compose.ui.graphics
- androidx.compose.ui.text
- androidx.compose.ui.text
- androidx.compose.ui.unit
- androidx.compose.ui.util
Was sind Profilregeln?
Profilregeln für eine Bibliothek werden in einer Textdatei
baseline-prof.txt
angegeben, die sich im Verzeichnissrc/main
oder einem entsprechenden Verzeichnis befindet. In der Datei wird eine Regel pro Zeile angegeben. Eine Regel ist in diesem Fall ein Muster, das mit Methoden oder Klassen in der Bibliothek abgeglichen wird. Die Syntax für diese Regeln ist eine Obermenge des menschenlesbaren ART-Profilformats, das bei der Verwendung vonadb shell profman --dump-classes-and-methods ...
verwendet wird. Diese Regeln können entweder auf Methoden oder auf Klassen ausgerichtet sein.Eine Methodenregel hat das folgende Muster:
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
Eine Klassenregel hat das folgende Muster:
<CLASS_DESCRIPTOR>
Dabei ist
<FLAGS>
eines oder mehrere der ZeichenH
,S
undP
, um anzugeben, ob diese Methode als „Hot“, „Startup“ oder „Post Startup“ gekennzeichnet werden soll.<CLASS_DESCRIPTOR>
ist der Deskriptor für die Klasse, zu der die Zielmethode gehört. Die Klasseandroidx.compose.runtime.SlotTable
hätte beispielsweise den DeskriptorLandroidx/compose/runtime/SlotTable;
.<METHOD_SIGNATURE>
ist die Signatur der Methode und enthält den Namen, die Parametertypen und die Rückgabetypen der Methode. Die Methodefun isPlaced(): Boolean
fürLayoutNode
hat beispielsweise die SignaturisPlaced()Z
.Diese Muster können Platzhalter (
**
,*
und?
) enthalten, damit eine einzelne Regel mehrere Methoden oder Klassen abdeckt.
Was bewirken die Regeln?
Eine Methode mit dem Flag
H
ist eine „heiße“ Methode und sollte vorab kompiliert werden.Eine Methode mit dem Flag
S
wird beim Start aufgerufen und sollte vorab kompiliert werden, um die Kosten für die Kompilierung und Interpretation der Methode beim Start zu vermeiden.Eine Methode mit dem Flag
P
wird nach dem Start aufgerufen.Eine Klasse, die in dieser Datei vorhanden ist, wird beim Start verwendet und sollte im Heap vorab zugewiesen werden, um die Kosten für das Laden der Klasse zu vermeiden.
So funktioniert's
- Bibliotheken können diese Regeln definieren, die in AAR-Artefakten enthalten sind. Wenn dann eine App erstellt wird, die diese Artefakte enthält, werden diese Regeln zusammengeführt und die zusammengeführten Regeln werden verwendet, um ein kompaktes binäres ART-Profil zu erstellen, das spezifisch für die App ist. ART kann dieses Profil dann verwenden, wenn die App auf Geräten installiert wird, um ein bestimmtes Subset der Anwendung vorab zu kompilieren und so die Leistung der Anwendung zu verbessern, insbesondere beim ersten Ausführen. Hinweis: Dies hat keine Auswirkungen auf debugfähige Anwendungen.
Version 1.0.0-beta08
2. Juni 2021
androidx.compose.runtime:runtime-*:1.0.0-beta08
wird veröffentlicht. Version 1.0.0-beta08 enthält diese Commits.
API-Änderungen
State<T>
heißt jetztState<out T>
(I69049)ControlledComposition
API-Änderung, um das Neuzusammenstellen von Änderungen in einem einzigen Durchlauf zu ermöglichen. (Iaafd1, b/184173932)
Version 1.0.0-beta07
18. Mai 2021
androidx.compose.runtime:runtime-*:1.0.0-beta07
wird veröffentlicht. Version 1.0.0-beta07 enthält diese Commits.
API-Änderungen
- Es wurden neue Compose-Compiler-APIs hinzugefügt, mit denen die vom Compiler generierten Quellinformationen während der Quellcode-Minimierung entfernt werden können. (Ia34e6)
Führt
ReusableContent
ein, mit dem versucht wird, die Knoten im Inhalt wiederzuverwenden, anstatt sie zu ersetzen, wenn der Schlüssel geändert wird. Wenn der Schlüssel geändert wird, werden die vorherigen Werte in der Slot-Tabelle für den Inhalt ignoriert. Das gilt nicht für die generierten Knoten und die Werte, die zum Aktualisieren der Knoten verwendet wurden.Führt
ReusableComposeNode
ein, mit dem der ausgegebene Knoten wiederverwendet wird, anstatt ihn wie beiComposeNode
zu ersetzen. (I1dd86)@ComposeCompilerApi
nicht mehr@RequiresOptIn
(Iab690)
Fehlerkorrekturen
- Bei LazyColumn/Row bleiben jetzt bis zu zwei zuvor sichtbare Elemente aktiv (werden nicht verworfen), auch wenn sie bereits herausgescrollt wurden. So kann die Komponente die aktiven Unterkompositionen wiederverwenden, wenn ein neues Element zusammengesetzt werden muss. Das verbessert die Scrollleistung. (Ie5555)
Version 1.0.0-beta06
5. Mai 2021
androidx.compose.runtime:runtime-*:1.0.0-beta06
wird veröffentlicht. Version 1.0.0-beta06 enthält diese Commits.
API-Änderungen
@ComposeCompilerApi
nicht mehr@RequiresOptIn
(Iab690)
Version 1.0.0-beta05
21. April 2021
androidx.compose.runtime:runtime-*:1.0.0-beta05
wird veröffentlicht. Version 1.0.0-beta05 enthält diese Commits.
API-Änderungen
@InternalComposeApi
für das Lesen und Schreiben von Aufzeichnungssnapshots entfernt (Id134d)
Fehlerkorrekturen
- Die AndroidManifest-Dateien aus „ui-test-manifest“ und „ui-tooling-data“ sind jetzt mit Android 12 kompatibel (I6f9de, b/184718994).
Version 1.0.0-beta04
7. April 2021
androidx.compose.runtime:runtime-*:1.0.0-beta04
wird veröffentlicht. Version 1.0.0-beta04 enthält diese Commits.
Fehlerkorrekturen
Vor dieser Änderung konnten lokale zusammensetzbare Funktionen basierend auf ihren Parametern übersprungen werden. Nach dieser Änderung werden keine lokalen zusammensetzbaren Funktionen mehr übersprungen. Diese Änderung wurde vorgenommen, weil es üblich und zu erwarten ist, dass lokale Funktionen Parameter vom übergeordneten Element erfassen. Das Überspringen von Parametern ist eine häufige Fehlerquelle.
Zusammenfassend lässt sich sagen:
@Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) { @Composable fun ShowCount() { Text("Count: $count") } ShowCount() Button(onClick={ onCountChange(count + 1) }) { Text("Increment") } }
Vor dieser Änderung wurde die zusammensetzbare Funktion
ShowCount
immer übersprungen, auch nachdem der Parametercount
aktualisiert wurde. Diese Änderungen haben wir jedoch nicht vorgenommen (I5648a)Das Problem, dass
rememberSaveable()
den alten Wert wiederhergestellt hat, wenn es mit Eingabeparametern (I1b110, b/182403380) verwendet wurde, wurde behoben.
Version 1.0.0-beta03
24. März 2021
androidx.compose.runtime:runtime-*:1.0.0-beta03
wird veröffentlicht. Version 1.0.0-beta03 enthält diese Commits.
API-Änderungen
DefaultMonotonicFrameClock
ist veraltet. Wenn SiewithFrameNanos
oderRecomposer.runRecomposeAndApplyChanges
ohneMonotonicFrameClock
aufrufen, wird jetztIllegalStateException
ausgegeben. (I4eb0d)
Version 1.0.0-beta02
10. März 2021
androidx.compose.runtime:runtime-*:1.0.0-beta02
wird veröffentlicht. Version 1.0.0-beta02 enthält diese Commits.
Fehlerkorrekturen
- Einschränkungen für die öffentliche Nutzung experimenteller APIs erzwingen (I6aa29, b/174531520)
- Fehler behoben:
rememberSaveable { mutableStateOf(0) }
funktioniert nicht mehr, wenn es in einem Ziel von „navigation-compose“ verwendet wird. (I1312b, b/180042685, b/180701630)
Version 1.0.0-beta01
24. Februar 2021
androidx.compose.runtime:runtime-*:1.0.0-beta01
wird veröffentlicht. Version 1.0.0-beta01 enthält diese Commits.
Dies ist die erste Version von Compose 1.0.0 Beta.
API-Änderungen
- Füge
Recomposer.runRecomposeConcurrentlyAndApplyChanges
hinzu, eine experimentelle API zum Neuzusammenstellen ungültiger Kompositionen außerhalb der Haupt-Frame-Schleife. (I342d0) - Alle Composables, die mit @ReadOnlyComposable gekennzeichnet sind, werden jetzt zur Kompilierungszeit validiert, um sicherzustellen, dass sie nur andere @ReadOnlyComposables aufrufen (I58961).
Die
defaultFactory
fürcompositionLocalOf
undstaticCompositionLocalOf
ist jetzt erforderlich und nicht mehr optional.Durch diese Änderung wird ein potenzieller Typfehler für nicht nullable-Typen entfernt, für die keine Standardfactory angegeben wurde. Bisher wurde dadurch eine Nullreferenz für einen Typ zurückgegeben, der keine Nullwerte zulässt.
Für Typen mit zulässigen Nullwerten sollten Sie
{ null }
als Standard-Factory angeben.Wir empfehlen, keine lokalen Variablen mit nicht nullable-Typen zu verwenden, es sei denn, es kann ein sinnvoller Standardwert angegeben werden. Wenn kein sinnvoller Standardwert vorhanden ist, sollte die Lambda-Funktion
defaultFactory
eine Ausnahme auslösen. Wenn jedoch eine Ausnahme ausgelöst wird, haben die Nutzer des Lokals eine implizite Abhängigkeit davon, dass es bereitgestellt wird, die nicht vom Typsystem erzwungen wird. (Ifbd2a)Veraltete Symbole wurden aus der Compose-Laufzeit entfernt (I3252c)
Die verworfene Funktion
emptyContent()
wurde entfernt. Verwenden Sie stattdessen{}
. (Idb33f, b/179432510)„Providers“ wurde in „CompositionLocalProvider“ umbenannt.
- Der Konstruktor „Composition“ akzeptiert keinen Schlüsselparameter mehr und wurde eingestellt.
- currentCompositeKeyHash wurde in eine zusammensetzbare Property auf oberster Ebene anstelle einer zusammensetzbaren Funktion auf oberster Ebene umgewandelt.
- „CompositionData“ und „CompositionGroup“ wurden in den Namespace „androidx.compose.runtime.tooling“ verschoben.
- ComposableLambda ist jetzt eine Schnittstelle anstelle einer konkreten Klasse und hat keine Typparameter mehr.
- ComposableLambdaN ist jetzt eine Schnittstelle anstelle einer konkreten Klasse und hat keine Typparameter mehr.
- Die Funktion „snapshotFlow“ wurde in den Namespace „androidx.compose.runtime“ verschoben.
- Die Zusammenführungsmethode von SnapshotMutationPolicy ist nicht mehr experimentell.
- Die Funktion „clearRoots“ auf oberster Ebene mit dem Hinweis „@TestOnly“ wurde entfernt. Das ist nicht mehr erforderlich.
- Die Funktionen „keySourceInfoOf“ und „resetSourceInfo“ wurden entfernt. Sie sind nicht mehr erforderlich.
- Composer.collectKeySourceInformation wurde entfernt. Das ist nicht mehr erforderlich.
- Die Methoden „isJoinedKey“, „joinedKeyLeft“ und „joinedKeyRight“ wurden entfernt. Sie sind nicht mehr erforderlich.
- Verschiedene APIs der obersten Ebene wurden verschoben und in verschiedenen Dateien neu organisiert. Aufgrund der Dateiklassensemantik von Kotlin wird dadurch die binäre Kompatibilität, nicht aber die Quellkompatibilität beeinträchtigt. Für die meisten Nutzer sollte das kein Problem darstellen.
- (I99b7d, b/177245490)
SnapshotStateObserver ist nicht mehr experimentell (Id2e6a)
Einige zuvor verworfene APIs wurden gelöscht (Ice5da, b/178633932)
Folgende Änderungen an der Material API wurden vorgenommen:
- Der Parameter „contentPadding“ wurde der Top-/BottomAppBar hinzugefügt, um das Anpassen des Standardabstands zu ermöglichen.
- Die Parameter in BackdropScaffold wurden neu angeordnet, um den API-Richtlinien zu entsprechen, nach denen erforderliche Parameter vor optionalen Parametern stehen müssen.
- Der Parameter
icon
in BottomNavigationItem wurde nachselected
undonClick
verschoben. - Der Parameter
alwaysShowLabels
in BottomNavigationItem wurde inalwaysShowLabel
umbenannt. bodyContent
-Parameter in einigen Komponenten wurden incontent
umbenannt.- Die Reihenfolge der Parameter in
ButtonDefaults.buttonColors()
wurde geändert. Da sich der Typ der Parameter nicht geändert hat, führt dies nicht zu einem Fehler in Ihrem Code. Sie müssen jedoch entweder benannte Parameter verwenden oder die Reihenfolge manuell aktualisieren, da Ihr Code sonst nicht wie bisher funktioniert. - Der Parameter
secondaryVariant
wurde zudarkColors()
hinzugefügt. Diese Farbe ist im dunklen Design in der Regel dieselbe wiesecondary
. Sie wird jedoch zur Konsistenz und für weitere Anpassungen hinzugefügt. - ElevationDefaults und animateElevation() wurden aus der öffentlichen API entfernt, da sie nicht häufig verwendet wurden.
onValueChangeEnd
inSlider
wurde inonValueChangeFinished
umbenannt und kann jetzt auch null sein.- Der Parameter
text
inSnackbar
wurde aus Konsistenzgründen incontent
umbenannt. - Der Parameter
contentPadding
wurde zuDropdownMenuItem
hinzugefügt, um das Anpassen des Standardabstands zu ermöglichen. Außerdem istcontent
jetzt eine Erweiterung vonRowScope
. ModalDrawerLayout
wurde inModalDrawer
umbenannt.BottomDrawerLayout
wurde inBottomDrawer
umbenannt.- (I1cc66)
Version 1.0.0-alpha12
10. Februar 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha12
wird veröffentlicht. Version 1.0.0-alpha12 enthält diese Commits.
API-Änderungen
- Die Unterstützung für ViewGroups wurde aus UiApplier entfernt. Die verworfenen emitView-Composables wurden entfernt. (Ifb214)
- CompositionReference in CompositionContext umbenannt (I53fcb)
- ComponentActivity.setContent wurde in das Modul androidx.activity:activity-compose verschoben und befindet sich jetzt unter androidx.activity.compose.setContent. (Icf416)
- Die Snapshot API wurde aktualisiert, um den API-Richtlinien besser zu entsprechen und interne Implementierungsklassen in der öffentlichen API auszublenden. (Id9e32)
- Umgebungen wurden umbenannt, um der Umbenennung von „Ambient“ in „CompositionLocal“ zu entsprechen. Ambients hießen früher „AmbientFoo“, jetzt heißen CompositionLocals „LocalFoo“. (I2d55d)
- „Ambient“ wurde in „CompositionLocal“ und „ambientOf“ / „staticAmbientOf“ in „compositionLocalOf“ / „staticCompositionLocalOf“ umbenannt. Durch diese Änderung wird der Zweck von CompositionLocal deutlicher: ein Mechanismus zum Bereitstellen / Abrufen von Werten, die für eine Komposition lokal sind. CompositionLocal-Instanzen sollten das Präfix
Local
haben, z. B. val LocalFoo = compositionLocalOf { Foo() }. (Ia55b6) - takeMutableSnapshot und takeSnapshot sind jetzt Companion-Methoden von Snapshot. (I91f19)
@ComposableContract
wurde zugunsten von drei spezifischeren Anmerkungen eingestellt.@ComposableContract(restartable = false)
wurde zu@NonRestartableComposable
.@ComposableContract(readonly = true)
wurde zu@ReadOnlyComposable
.@ComposableContract(preventCapture = true)
wurde zu@DisallowComposableCalls
.@ComposableContract(tracked = true)
wurde entfernt. (I60a9d)Die Hilfsprogramme „emptyContent()“ und „(@Composable () -> Unit).orEmpty()“ sind veraltet, da sie keine positiven Auswirkungen auf die Leistung mehr haben (I0484d).
snapshotFlow
undwithMutableSnapshot
sind nicht mehr experimentell (I6a45f)Recomposers können jetzt geschlossen werden. Geschlossene Recomposers führen die Recomposition so lange fort, bis die untergeordneten Coroutinen der Komposition abgeschlossen sind. „Recomposer.shutDown“ wurde in „cancel“ umbenannt, um es von „close“ abzugrenzen. (Ib6d76)
Das
compose:runtime-dispatch
-Artefakt wird nicht mehr unterstützt. MonotonicFrameClock befindet sich jetzt in compose:runtime und AndroidUiDispatcher in compose:ui. (Ib5c36)Die API, auf die das Compose-Compiler-Plug-in ausgerichtet ist, wurde umgestaltet, sodass anstelle einer konkreten Klasse eine Schnittstelle verwendet wird. Außerdem wird in der Schnittstelle kein Typparameter mehr verwendet.
Dies ist eine interne Änderung, die sich nicht auf die Quellcodekompatibilität auswirken sollte, aber eine binäre funktionsgefährdende Änderung ist. (I3b922, b/169406779)
SnapshotMutableState wurde eingeführt (Icfd03)
DisposableEffectDisposable wurde in DisposaleEffectResult umbenannt (Ica7c6)
Recomposer.current() wurde entfernt. [Abstract]ComposeView-Recomposers werden jetzt standardmäßig verzögert erstellt und sind auf das Fenster beschränkt. Sie werden vom ViewTreeLifecycleOwner für das Fenster gesteuert. Die Recomposition und auf „withFrameNanos“ basierende Animations-Ticks werden pausiert, während der Lebenszyklus des Hosts angehalten wird. (I38e11)
Recomposer.runningRecomposers bietet jetzt einen globalen StateFlow von schreibgeschützten RecomposerInfo-Objekten, mit denen der laufende Kompositionsstatus im Prozess beobachtet werden kann. Diese API sollte gegenüber Recomposer.current() bevorzugt werden, da diese jetzt als eingestellt gilt. (If8ebe)
„DisposableEffectDisposable“ wurde in „DisposaleEffectResult“ umbenannt (I3ea68)
Version 1.0.0-alpha11
28. Januar 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha11
wird veröffentlicht. Version 1.0.0-alpha11 enthält diese Commits.
API-Änderungen
- Die APIs „onCommit“, „onDispose“ und „onActive“ wurden zugunsten der APIs „SideEffect“ und „DisposableEffect“ eingestellt (If760e).
- Die emit()-API und alle Überladungen sind jetzt veraltet und wurden in ComposeNode umbenannt. Die APIs sind identisch, nur der Name ist anders, um den Namenskonventionen von Compose zu entsprechen (I4137b).
- invalidate und compositionReference() sind jetzt zugunsten von currentRecomposeScope bzw. rememberCompositionReference veraltet. (I583a8)
RememberObserver ersetzt CompositionLifecycleObserver und CompositionLifecycleObserver ist jetzt veraltet.
RememberObserver
ist ein Ersatz fürCompositionLifecycleObserver
mit geänderter Semantik und umbenannten Methoden. Die Umstellung auf die neue API kann mechanisch für Objekte erfolgen, die nur einmal gespeichert werden. Das ist und bleibt die empfohlene Vorgehensweise. Wenn jedoch in einer Komposition mehr als einmal auf eine Referenz verwiesen wurde, wirdonRemembered
für jeden Verweis aufgerufen, währendonEnter
nur einmal aufgerufen wird.onEnter
wurde mehrmals aufgerufen, wenn das Objekt in untergeordneten Kompositionen wieWithConstraints
undScaffold
verwendet wurde. Dadurch war die Garantie für den einzelnenonEnter
-Aufruf nicht zuverlässig und wurde fürRememberObserver
entfernt.RememberObserver
fügtonAbandoned
hinzu, das aufgerufen wird, wenn dieRememberObserver
-Instanz vom Callback zurückgegeben wird, der anremember
übergeben wurde, aber nicht im Kompositionsstatus gespeichert wurde und daher nieonRemembered
aufgerufen wird. Das kann passieren, wenn die Komposition aufgrund einer Ausnahme vorzeitig beendet wird oder wenn die Komposition verworfen wird, weil der Status, für den sie erstellt wurde, nicht mehr aktuell oder anderweitig nicht mehr erforderlich ist. Wenn die Instanz vonRememberObserver
, die der Empfehlung für einzelne Referenzen oben folgt, eine externe Ressource verfolgt, weisen sowohlonForgotten
als auchonAbandoned
darauf hin, dass die Ressource nicht mehr benötigt wird. Wenn das Objekt die inonRemembered
begonnene Arbeit oder zugewiesene Ressourcen verfolgt, kannonAbandoned
ignoriert werden, da es nicht aufgerufen wird, wennonRemembered
aufgerufen wird. (I02c36)Markieren Sie
collectAsState()
-Funktionen nicht als Inline-Funktionen (Ia73e4).
Fehlerkorrekturen
- „WithConstraints“ wurde als „BoxWithConstraints“ überarbeitet und nach „foundation.layout“ verschoben. (I9420b, b/173387208)
- TestCoroutineDispatcher in Tests verwenden (I532b6)
Version 1.0.0-alpha10
13. Januar 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha10
wird veröffentlicht. Version 1.0.0-alpha10 enthält diese Commits.
Funktionsgefährdende Änderung
Durch die Umstrukturierung der internen Compiler-API können Änderungen an den Knoten, die als Ergebnis der Komposition generiert werden, in der Phase „apply changes“ (Änderungen anwenden) der Komposition zusammengefasst werden, nachdem alle
@Composable
-Funktionen abgeschlossen sind.Dies ist eine Verhaltensänderung, die sich auf Anwendungscode auswirken kann, da Knoten erst nach der Anwendung von Änderungen über interne und experimentelle APIs verfügbar sind. In der Regel lässt sich das Problem umgehen, indem Sie Code mit solchen Abhängigkeiten in ein
SideEffect
-Composable einschließen, um die Ausführung des Codes aufzuschieben, bis die Knoten erstellt und initialisiert wurden. (I018da)
API-Änderungen
- Es wurde eine Möglichkeit hinzugefügt, um zu verfolgen, ob der Recomposer Änderungen angewendet hat. (I1b3e2)
Erweitern Sie die [Abstract]ComposeView-APIs, um das Wiederverwenden von Compose-basierten Ansichten zu ermöglichen. Dabei wird die Komposition verworfen, um sie später neu zu erstellen. APIs zum Installieren und Ermitteln von Recomposern mit Fensterbereich und CompositionReferences zum Erstellen von untergeordneten Kompositionen hinzugefügt.
Fügen Sie ViewCompositionStrategy hinzu, um die Strategie für die Kompositionsentsorgung von [Abstract]ComposeViews zu konfigurieren. Das Standardverhalten ist die Entsorgung beim Trennen des Fensters. (I860ab)
Fehlerkorrekturen
- Recomposer stellt jetzt einen Flow seines aktuellen Status zur Verfügung, sodass seine Aktivität und die Aktivität zugehöriger Effekte überwacht werden können. (Ifb2b9)
- Auf das native „keyEvent“ kann jetzt über „keyEvent.nativeKeyEvent“ zugegriffen werden (I87c57, b/173086397).
Version 1.0.0-alpha09
16. Dezember 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha09
wird veröffentlicht. Version 1.0.0-alpha09 enthält diese Commits.
API-Änderungen
SlotTable, SlotReader und SlotWriter wurden aus der öffentlichen API entfernt. Diese wurden zuvor als „InternalComposeAPI“ gekennzeichnet. Sie sind jetzt intern im Compose-Modul.
CompositionData und CompositionGroup wurden als Ersatz für die ui-tooling API hinzugefügt, um Kompositionsinformationen zu extrahieren. Diese sind öffentlich, aber nicht für die Verwendung außerhalb der UI-Tooling-API vorgesehen, da sie die Rohinformationen liefern, die die UI-Tooling-API interpretiert (I31a9c).
Die Applier-Klasse wird nicht mehr als (Id85b0) betrachtet.
Die
Applier
-Schnittstelle wurde geändert, um das Erstellen von Bäumen von unten nach oben statt von oben nach unten zu vereinfachen.Die Methode
insert()
wurde ininsertTopDown()
umbenannt.Die neue Methode
insertBottomUp()
wurde hinzugefügt.Ein Applier fügt Knoten in den Baum ein, den er bearbeitet, indem er je nach Leistung
insertTopDown()
oderinsertBottomUp()
verwendet.Einige Bäume, z. B.
LayoutNode
undView
, lassen sich viel effizienter von unten nach oben als von oben nach unten erstellen. Vor dieser Änderung war ein Stapel von Einfügungen erforderlich, um Bottom-up zu implementieren. Dieser musste in jeden Applier kopiert werden, der aus Leistungsgründen eine Bottom-up-Konstruktion benötigte. Mit dieser Änderung wirdinsertBottomUp()
durchApplier
überschrieben, um einen Baum von unten nach oben zu erstellen, undinsertTopDown()
, um den Baum von oben nach unten zu erstellen. (Icbdc2)Compose unterstützt Property-Getter, die Aufrufe von Composables ermöglichen. Die Unterstützung dafür wird nicht eingestellt, aber die Syntax zum Deklarieren eines Property-Getters als @Composable ändert sich.
Die jetzt eingestellte Syntax dafür bestand darin, das Attribut selbst zu kommentieren:
@Composable val someProperty: Int get() = ...
Die jetzt korrekte Syntax dafür besteht darin, den Getter der Property zu annotieren:
val someProperty: Int @Composable get() = ...
Beide Syntaxen funktionieren noch eine Weile, aber die eingestellte Syntax führt irgendwann zu einem Kompilierungsfehler. (Id9197)
Fehlerkorrekturen
- AndroidOwner made internal (Ibcad0, b/170296980)
- subcomposeInto(LayoutNode) wurde intern (Id724a)
Version 1.0.0-alpha08
2. Dezember 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha08
wird veröffentlicht. Version 1.0.0-alpha08 enthält diese Commits.
API-Änderungen
- Es wurde eine Lint-Prüfung für die Benennung und Position von zusammensetzbaren Lambda-Parametern hinzugefügt, um die Einhaltung der Compose-Richtlinien zu prüfen.
Außerdem wurden einige APIs, die
children
als Namen für ihr nachgestelltes Lambda verwenden, gemäß Lint-Prüfung und Anleitung zucontent
migriert. (Iec48e) - Recomposer akzeptiert keinen EmbeddingContext mehr. Erforderliche Planungsabhängigkeiten werden aus dem effectCoroutineContext abgerufen. FrameManager ist veraltet. Plattformintegrationen sollten ihre eigene globale Snapshot-Verarbeitung initialisieren. (I02369)
- Die Funktion „RestorableStateHolder.withRestorableState“ wurde in „RestorableStateProvider“ umbenannt (I66640).
Fehlerkorrekturen
- Wir haben die verworfenen Ambients mit dem Suffix
Ambient
ersetzt und neue Eigenschaften mit dem Präfix „Ambient“ eingeführt, die anderen Ambients und den Compose-API-Richtlinien entsprechen. (I33440) - Altes ui-test-Modul und seine Stubs entfernen (I3a7cb)
Version 1.0.0-alpha07
11. November 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha07
wird veröffentlicht. Version 1.0.0-alpha07 enthält diese Commits.
Neue Funktionen
API-Änderungen
- Die Anmerkung „
@UnionType
“ wurde eingestellt (I57cde) - „provideDefault“ wurde als Alternative zu „provide“ zum Bereitstellen von Umgebungen hinzugefügt. Damit können Sie Umgebungswerte angeben, die nur festgelegt werden, wenn noch kein Umgebungswert vorhanden ist. (Id6635, b/171024925)
- „LaunchedTask“ wurde in „LaunchedEffect“ umbenannt, um die Konsistenz mit den APIs „SideEffect“ und „DisposableEffect“ zu wahren. LaunchedEffect ohne Subject-Parameter ist nicht zulässig, um Best Practices zu fördern. (Ifd3d4)
- „Applier“ hat jetzt die Callbacks „onBeginChanges“/„onEndChanges“, die aufgerufen werden, wenn ein Composer mit dem Anwenden von Änderungen am Baum beginnt bzw. damit fertig ist. Diese können bei Bedarf für die Batchverarbeitung der Ressourcenverwaltung verwendet werden. (Icf476)
- Recomposer erfordert jetzt einen CoroutineContext bei der Erstellung (Ic4610)
- Änderungen an der internen SlotTable-Implementierung, die sich nicht auf die öffentliche API auswirken sollten. (If9828)
- Die eingestellten rxjava2-Adapter, die den Anfangswert nicht berücksichtigen, wurden entfernt (Idb72f).
Fehlerkorrekturen
- foundation.Text wurde eingestellt und durch material.Text ersetzt. Eine einfache, neutrale Text-API, die keine Werte aus einem Theme verwendet, finden Sie unter androidx.compose.foundation.BasicText. (If64cb)
- BaseTextField wurde eingestellt. Verwenden Sie stattdessen BasicTextField. (I896eb)
- Mehrere layoutbezogene Symbole wurden von androidx.compose.ui nach androidx.compose.layout.ui verschoben. (I0fa98, b/170475424)
Externe Beiträge
- Das Modul
runtime-rxjava3
für Compose wurde hinzugefügt. Ähnlich wieruntime-rxjava2
(I02cbf)
Version 1.0.0-alpha06
28. Oktober 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha06
wird veröffentlicht. Version 1.0.0-alpha06 enthält diese Commits.
API-Änderungen
- „Recomposer“ ist jetzt eine „CompositionReference“ und ein gültiges übergeordnetes Element für die Komposition. Der explizite Recomposer ist jetzt an weniger Stellen erforderlich. (I4036f)
- Es wurde eine DisposableEffect-Counterpart-API für SideEffect hinzugefügt, die die Rolle von onCommit-with-params übernimmt, aber ein erforderliches onDispose hat.
- Die API „rememberUpdatedState“ wurde hinzugefügt, um Daten aus der Neuzusammensetzung in laufenden oder langlebigen Prozessen wie „DisposableEffects“ oder „LaunchedTasks“ zu veröffentlichen.
- (Id50b9)
- MutableVector implementiert jetzt RandomAccess (I85d73, b/170461551)
- Die zusammensetzbare Funktion „SideEffect“ wurde hinzugefügt, um Nebeneffekte der Komposition auf Objekte anzuwenden, die von der Komposition verwaltet werden. SideEffect soll das Composable „onCommit“ ersetzen. (Ia77c2)
- Neue experimentelle API „RestorableStateHolder“ Damit kann der mit [savedInstanceState] und [rememberSavedInstanceState] definierte Status für den Teilbaum gespeichert werden, bevor er verworfen wird. So kann er beim nächsten Mal mit dem wiederhergestellten Status neu zusammengesetzt werden. (I66884, b/166586419)
Fehlerkorrekturen
- Übergänge in ComposeTestRule aktivieren; Option zum Aktivieren des blinkenden Cursors aus ComposeTestRule entfernen. (If0de3)
Version 1.0.0-alpha05
14. Oktober 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha05
wird veröffentlicht. Version 1.0.0-alpha05 enthält diese Commits.
API-Änderungen
- Experimenteller Modifikator für die Unterbrechung von Zeigereingaben (Ia77d2)
- Die Scrollleistung von LazyColumn/Row wird verbessert, indem bei jedem Scrollvorgang weniger Arbeit in der Unterkomposition anfällt. Die neue Methode „hasInvalidations()“ wurde für die Klasse „Composition“ hinzugefügt. Die Methode „hasPendingChanges()“ aus „Recomposer“ wurde in „hasInvalidations()“ umbenannt (Ib2f32, b/168293643, b/167972292, b/165028371).
- Die API „produceState“ wurde hinzugefügt, um Coroutinen aus der Komposition heraus zu starten, die einen einzelnen
State<T>
-Wert im Zeitverlauf aktualisieren (Id4a57). - „launchInComposition“ wurde in „LaunchedTask“ umbenannt, um den Compose-API-Richtlinien zu entsprechen (I99a8e).
- Die Reihenfolge der place()-Aufrufe in benutzerdefinierten Layouts bestimmt jetzt die Zeichenreihenfolge für die untergeordneten Elemente (Ibc9f6).
Version 1.0.0-alpha04
1. Oktober 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha04
wird veröffentlicht. Version 1.0.0-alpha04 enthält diese Commits.
API-Änderungen
- „OwnerScope“ wurde hinzugefügt, um die Erfassung von Beobachtungsbereichen für Layout und Zeichnung zu ermöglichen, sobald sie nicht mehr gültig sind. (Ic4cf8)
- Die API „derivedStateOf“ wurde hinzugefügt, um State-Objekte auf Grundlage einer Berechnung zu erstellen, bei der andere State-Objekte gelesen und abgeleitet werden können (If758b).
- TestOnly-API für SnapshotStateObserver hinzugefügt (I6e2a9)
Fehlerkorrekturen
- foundation.Box wurde eingestellt. Verwenden Sie stattdessen foundation.layout.Box. (Ie5950, b/167680279)
Version 1.0.0-alpha03
16. September 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha03
wird veröffentlicht. Version 1.0.0-alpha03 enthält diese Commits.
API-Änderungen
CompositionCoroutineScope
implementiertMonotonicFrameClock
nicht mehr. Aufrufer vonwithFrameNanos
sollten die Funktion der obersten Ebene explizit importieren. (Icb642, b/166778123)
Fehlerkorrekturen
- Globale Testfunktionen wie
onNode
oderwaitForIdle
sind jetzt veraltet. Migrieren Sie zu den neuen Gegenstücken, die in ComposeTestRule definiert sind (I7f45a). launchInComposition
startet Koroutinen nicht mehr ohne Dispatcher (Ief6af, b/166486000)
Version 1.0.0-alpha02
2. September 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha02
wird veröffentlicht. Version 1.0.0-alpha02 enthält diese Commits.
API-Änderungen
snapshotFlow
- undwithMutableSnapshot
-APIs zum Abrufen und Erstellen von Snapshot-Datenänderungen hinzufügen. (I3e722)Die Aufrufkonvention für zusammensetzbare Funktionen hat sich geändert. Dies ist eine binäre funktionsgefährdende Änderung. Alle Bibliotheken müssen neu kompiliert werden, damit sie mit dieser Version des Compose-Compiler-Plug-ins funktionieren.
Diese Änderung führt nicht zu einer Quellcode-Inkompatibilität, da nur Compiler-APIs geändert wurden, für die eine explizite Einwilligung erforderlich ist. (I7afd2, b/158123185)
Planungsmethoden aus EmbeddingContext entfernt (I7b9be)
onPreCommit ist eingestellt. onCommit hat jetzt das Verhalten von onPreCommit.
„onCommit“ und „onActive“ werden jetzt im selben Choreographer-Frame ausgeführt, in dem die Änderungen an der Komposition übernommen werden, und nicht am Anfang des nächsten Choreographer-Frames. (I70403)
Version 1.0.0-alpha01
26. August 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha01
wird veröffentlicht. Version 1.0.0-alpha01 enthält diese Commits.
Version 0.1.0-dev
Version 0.1.0-dev17
19. August 2020
androidx.compose.runtime:runtime-*:0.1.0-dev17
wird veröffentlicht. Version 0.1.0-dev17 enthält diese Commits.
API-Änderungen
- Bei benutzerdefinierten Emits kann jetzt deklariert werden, dass einer oder mehrere Setter übersprungen und unabhängig vom Emit neu zusammengesetzt werden können. (Ibbd13)
Nicht mehr weitergeführte FrameManager-Aufrufe wurden entfernt.
Interne Compose-APIs wurden geändert, um den Aufwand für die Nachverfolgung von Statusobjekten wie
mutableStateof()
zu reduzieren (I80ba6).Die zusammensetzbare Funktion
state { ... }
ist jetzt zugunsten expliziter Aufrufe vonremember { mutableStateOf(...) }
eingestellt. Dadurch wird die gesamte API-Oberfläche und die Anzahl der Konzepte für die Statusverwaltung reduziert und dasby mutableStateOf()
-Muster für die Delegierung von Klasseneigenschaften wird eingehalten. (Ia5727)Bei „Flow.collectAsState“ wird der Standard-Dispatcher jetzt aus der Komposition selbst abgeleitet, anstatt standardmäßig „Dispatchers.Main“ zu verwenden. (I9c1d9)
Ein Absturz, der auftrat, wenn in der For-Schleife etwas verwendet wurde, das den Status speichert, wurde behoben. Da nun derselbe Schlüssel in „savedInstanceState()“ zulässig ist, wurde die API von „UiSavedStateRegistry“ an diese neue Anforderung angepasst (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561).
Fehlerkorrekturen
emitView
wurde eingestellt. Verwenden Sie nach MöglichkeitAndroidView
, um Views in Compose auszugeben. Das direkte Zusammensetzen von Views und ViewGroups wird in Zukunft nicht mehr unterstützt, es sei denn, sie sind Blätter im Kompositionsbaum. In diesem Fall kann dies mit AndroidView erreicht werden. (I29b1e, b/163871221)
Version 0.1.0-dev16
5. August 2020
androidx.compose.runtime:runtime-*:0.1.0-dev16
wird veröffentlicht. Version 0.1.0-dev16 enthält diese Commits.
API-Änderungen
Die Standardrichtlinie für Mutationen von
mutableStateOf()
,ambientOf()
undsavedInstanceStateOf()
wurde vonreferentialEqualityPolicy()
instructuralEqualityPolicy()
geändert.Die Standardeinstellung für die Entscheidung, ob ein neuer Wert, der einer
mutableStateOf()
-Instanz zugewiesen wird, als Änderung betrachtet wird, ist jetzt==
anstelle von===
.Weitere Informationen finden Sie unter https://kotlinlang.org/docs/reference/equality.html.
ambientOf()
undsavedInstanceStateOf()
verwendenmutableStateOf()
in ihren Implementierungen. Sie wurden geändert, um mitmutableStateOf()
konsistent zu sein.Die Verwendung der strukturellen Gleichheit entspricht eher den Erwartungen von Entwicklern.
Beispiel:
val state = mutableStateOf(1f)
gefolgt von
state.value = 1f
wird nicht mehr als Änderung an
state
betrachtet und die Verwendung vonstate
während der Komposition muss nicht mehr neu zusammengesetzt werden.Dies ist eine wichtige Änderung, die in den meisten Fällen (z. B. bei Verwendung von Klassen, die
equals()
nicht überschreiben) keine spürbaren Auswirkungen auf eine Anwendung hat.Bei Klassen, die
equals()
überschreiben, z. B.data
-Klassen, kann es zu einer Leistungsminderung kommen, da ihreequals()
-Methoden jetzt standardmäßig aufgerufen werden, wenn sie einemmutableStateOf()
zugewiesen sind.Das bisherige Verhalten kann wiederhergestellt werden, indem Sie den Richtlinienparameter
policy = referentialEqualityPolicy()
zu Aufrufen vonmutableStateOf()
,ambientOf()
undsavedInstanceStateOf()
hinzufügen. (Ic21a7)Row
undColumn
sind jetzt Inline-Funktionen, wodurch der Aufwand für die Verwendung erheblich reduziert wird. (I75c10)
Fehlerkorrekturen
- setViewContent wurde eingestellt. Verwenden Sie stattdessen setContent. (I7e497, b/160335130)
Es wurde MonotonicFrameAnimationClock hinzugefügt, mit der Sie eine MonotonicFrameClock als AnimationClockObservable verwenden können, um die Lücke zwischen den neuen auf Coroutinen basierenden Taktgebern und APIs zu schließen, die weiterhin die alten auf Callbacks basierenden Taktgeber verwenden.
Die MonotonicFrameClock-Entsprechung von ManualAnimationClock ist jetzt ManualFrameClock. (I111c7, b/161247083)
Modifier.stateDraggable wurde komplett überarbeitet und in Modifier.swipeable umbenannt. Es wurde eine neue SwipeableState-Klasse eingeführt und DrawerState und BottomDrawerState wurden so umgestaltet, dass sie von ihr erben. [Modal/Bottom]DrawerLayout akzeptiert keinen onStateChange-Parameter mehr. (I72332, b/148023068)
„Modifier.plus“ wurde eingestellt. Verwenden Sie stattdessen „Modifier.then“. „Dann“ ist ein stärkeres Signal für die Reihenfolge und verhindert gleichzeitig die Eingabe von
Modifier.padding().background() + anotherModifier
, was die Kette unterbricht und die Lesbarkeit erschwert (Iedd58, b/161529964).SubcomposeLayout wird hinzugefügt. Es handelt sich um ein Low-Level-Primitive, mit dem die untergeordneten Elemente während der Messung zusammengesetzt werden können, wenn wir einige Werte verwenden möchten, die erst später während der Messung für die Unterbaumstrukturkomposition verfügbar sind. WithConstraints wird beispielsweise nicht mit SubcomposeLayout implementiert. (I25cc8)
„Material FilledTextField“ wurde in „TextField“ umbenannt und „foundational TextField“ in „BaseTextField“, um die einfachste gewünschte API leichter auffindbar und nutzbar zu machen (Ia6242, b/155482676).
Modifier.drawBackground wurde in Modifier.background umbenannt (I13677)
Version 0.1.0-dev15
22. Juli 2020
androidx.compose.runtime:runtime-*:0.1.0-dev15
wird veröffentlicht. Version 0.1.0-dev15 enthält diese Commits.
Abhängigkeiten aktualisieren
- Wenn Sie die
0.1.0-dev15
-Version von Compose verwenden möchten, müssen Sie Ihre Abhängigkeiten gemäß den neuen Code-Snippets oben unter Abhängigkeiten deklarieren aktualisieren.
API-Änderungen
Die Anmerkung „
@Model
“ wurde eingestellt. Verwenden Sie stattdessen „state“ und „mutableStateOf“. Diese Entscheidung wurde nach sorgfältiger Überlegung getroffen.Begründung
Die Begründung umfasst unter anderem:
- Reduziert die API-Oberfläche und die Konzepte, die wir vermitteln müssen
- Bessere Abstimmung mit anderen vergleichbaren Toolkits (Swift UI, React, Flutter)
- Die Entscheidung kann rückgängig gemacht werden. Wir können
@Model
später jederzeit wieder einführen. - Entfernt Grenzfälle und schwer zu beantwortende Fragen zur Konfiguration von
@Model
als Dinge, die wir berücksichtigen müssen @Model
-Datenklassen, „equals“, „hashcode“ usw.- Wie kann ich festlegen, dass einige Eigenschaften beobachtet werden und andere nicht?
- Wie lege ich fest, ob die strukturelle oder die referenzielle Gleichheit in der Beobachtung verwendet werden soll?
- Reduziert die „Magie“ im System. Dadurch wird die Wahrscheinlichkeit verringert, dass jemand annimmt, das System sei intelligenter als es ist (d. h., dass es weiß, wie man eine Liste vergleicht).
- Die Granularität der Beobachtung wird intuitiver.
- Verbessert die Refaktorierbarkeit von Variable → Eigenschaft in der Klasse
- Möglicherweise ergeben sich dadurch Möglichkeiten für individuelle Optimierungen auf Bundesstaatsebene.
- Es entspricht besser dem Rest des Ökosystems und reduziert die Unklarheit in Bezug auf unveränderliche oder „veränderliche“ Zustände.
Hinweise zur Migration
Fast alle vorhandenen Verwendungen von
@Model
lassen sich auf zwei Arten relativ einfach transformieren. Im folgenden Beispiel wird eine@Model
-Klasse mit zwei Attributen verwendet, nur um das Beispiel zu veranschaulichen. Sie wird in einer zusammensetzbaren Funktion verwendet.@Model class Position( var x: Int, var y: Int ) @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }
Alternative 1:
State<OriginalClass>
verwenden und Kopien erstellenDieser Ansatz wird durch die Datenklassen von Kotlin erleichtert. Machen Sie im Grunde alle bisherigen
var
-Properties zuval
-Properties einer Datenklasse und verwenden Sie dannstate
anstelle vonremember
. Weisen Sie den Statuswert den geklonten Kopien des Originals mithilfe dercopy(...)
-Hilfsmethode der Datenklasse zu.Dieser Ansatz funktioniert nur, wenn die einzigen Änderungen an dieser Klasse im selben Bereich vorgenommen wurden, in dem die
State
-Instanz erstellt wird. Wenn die Klasse sich intern außerhalb des Anwendungsbereichs ändert und Sie sich darauf verlassen, dass dies beobachtet wird, sollten Sie den nächsten Ansatz verwenden.data class Position( val x: Int, val y: Int ) @Composable fun Example() { var p by state { Position(0, 0) } PositionChanger( position=p, onXChange={ p = p.copy(x=it) } onYChange={ p = p.copy(y=it) } ) }
Alternative 2: mutableStateOf und Property Delegates verwenden
Dieser Ansatz wird durch die Property Delegates von Kotlin und die
mutableStateOf
API erleichtert, mit der Sie MutableState-Instanzen außerhalb der Komposition erstellen können. Ersetzen Sie im Wesentlichen allevar
-Attribute der ursprünglichen Klasse durchvar
-Attribute mitmutableStateOf
als Attribut-Delegate. Das hat den Vorteil, dass sich die Verwendung der Klasse überhaupt nicht ändert, sondern nur die interne Implementierung. Das Verhalten ist jedoch nicht völlig identisch mit dem ursprünglichen Beispiel, da jede Eigenschaft jetzt einzeln beobachtet bzw. abonniert wird. Die Re-Compositions, die nach dieser Umgestaltung auftreten, könnten also eingeschränkter sein (was gut ist).class Position(x: Int, y: Int) { var x by mutableStateOf(x) var y by mutableStateOf(y) } // source of Example is identical to original @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }
(I409e8, b/152050010, b/146362815, b/146342522, b/143413369, b/135715219, b/143263925, b/139653744)
Ändert die Strategie zur Codegenerierung des Compose-Compilers. Vor der Änderung hat der Compose-Compiler Aufrufe von zusammensetzbaren Funktionen transformiert. Durch diese Änderung wird jetzt der Text einer zusammensetzbaren Funktion transformiert, während der Aufrufort (größtenteils) unverändert bleibt.
Das bedeutet, dass die meiste Logik, die mit der Compose-Laufzeit kommuniziert, am Anfang des Funktionsblocks statt am Aufrufort stattfindet.
Diese Änderung sollte für alle Verwendungen von Compose quellenkompatibel sein. Die meisten Nutzer von Compose müssen aufgrund dieser Änderung keinen Code aktualisieren.
Zur Unterstützung dieser Arbeit hat sich die JVM-Signatur aller zusammensetzbaren Funktionen geändert. Eine zusammensetzbare Funktion, die einen einzelnen Parameter akzeptiert, wird in eine Funktion mit drei Parametern umgewandelt. Die zusätzlichen Parameter sind der Composer, ein „key“-Integer und ein Bitmasken-Integer, der zum Weitergeben von Metadaten durch Aufrufe verwendet wird.
Compose transformiert jetzt auch Standardargumente in eine zusammensetzbare Funktion. Dabei wird keine zusätzliche synthetische Standardüberladung der Funktion eingeführt. Durch diese Änderung werden also weniger Funktionen definiert.
Bekannte beabsichtigte Verhaltensänderungen, die sich daraus ergeben:
- Bei einigen Anrufen wird die Funktion „Überspringen“ verwendet, obwohl das zuvor nicht der Fall war.
- Zusammensetzbare Ausdrücke in Standardargumentausdrücken werden jetzt korrekt abonniert und verarbeitet.
Diese Arbeit umfasste einige Optimierungen: 1. Das Ergebnis von Parametervergleichen wird über den Aufrufgraphen an andere zusammensetzbare Funktionen weitergegeben. Dies führt zu weniger Vergleichen zur Laufzeit, einer kleineren Slot-Tabelle und dazu, dass mehr zusammensetzbare Funktionen übersprungen werden, die zuvor nicht übersprungen wurden.2 Parameter, die zur Kompilierzeit als „statisch“ eingestuft werden, werden nicht mehr verglichen oder in der Laufzeit gespeichert. Dadurch wird die Anzahl der Vergleiche und die Größe der Slot-Tabelle reduziert. 3. Die Kontrollflussstruktur des Funktionsrumpfs wird verwendet, um die Anzahl der generierten Gruppen zu minimieren. Dadurch wird die Größe der Slot-Tabelle reduziert und es ist weniger Arbeit für die Laufzeit 4 erforderlich. Nicht verwendete Dispatch- und Empfängerparameter für Funktionen werden bei der Bestimmung der Überspringbarkeit der Funktion nicht berücksichtigt, wenn sie nicht im Hauptteil der Funktion verwendet werden.
Die meisten Breaking Changes betrafen APIs, auf die der Compiler direkt abzielt. Die typische Verwendung von Compose ist davon nicht betroffen: 1. Composer::startExpr wurde entfernt 2. Composer::endExpr wurde entfernt 3. Composer::call wurde eingestellt 4. Die Nicht-Varargs-Überladungen von
key
wurden entfernt. Verwenden Sie ab sofort die Versionvararg
. 5. Die Pivotal-Anmerkung wurde eingestellt. Verwenden Sie stattdessenkey
. 6. ScopeUpdateScope::updateScope wurde so geändert, dass anstelle von Function1 eine Function3 erwartet wird. 7. restartableFunction und restartableFunctionN wurden aktualisiert, um zusätzliche Kompilierzeitparameter zu enthalten (I60756, b/143464846).„sortWith“ und „removeRange“ zu „MutableVector“ hinzugefügt (Icccf7)
Standardmethodenimplementierungen für CompositionLifecycleObserver hinzugefügt (I24289)
Für die Anwendung ist jetzt eine clear()-Methode zum Entfernen von Kompositionen erforderlich (Ibe697).
„asMutableList()“ wurde „MutableVector“ hinzugefügt, damit es an die öffentliche API übergeben werden kann, ohne dass die gesamte Liste kopiert werden muss. (I298df)
rememberCoroutineScope() wurde hinzugefügt, um in der Komposition einen verwalteten CoroutineScope zum Starten von Jobs als Reaktion auf Ereignisse zu erhalten. (I0e264)
MutableVector ist eine neue Sammlung, die keine der Standard-Collection-Schnittstellen implementiert. Diese Sammlung bietet Geschwindigkeit über andere Anforderungen hinweg und ist nur für die interne Implementierung vorgesehen. (I8ebd6)
StableMutableList
undStableMutableMap
wurden vorübergehend entfernt, um ein Problem in der Version von Kotlin Compose zu vermeiden, die erforderlich ist. Diese Schnittstellen werden wieder eingeführt, sobald Compose auf eine Kotlin-Version aktualisiert wird, in der das Problem nicht auftritt.SnapshotStateList
undSnapshotStateMap
sind jetzt öffentlich, werden aber eingestellt, sobaldStableMutableList
undStableMutableMap
wiederhergestellt sind. (Ia7769)Funktion „withFrameNanos“ auf oberster Ebene für das Timing von Animationen hinzugefügt (Ie34c5)
Die Anmerkung „@Untracked“ wurde eingestellt. Durch @ComposableContract(tracked=false) ersetzen (Id211e)
RestartableFunction und zugehörige APIs wurden in ComposableLambda usw. umbenannt. Diese APIs wurden nur vom Compiler verwendet, daher sollte sich dies normalerweise nicht auf die Quellcodekompatibilität auswirken. Die Umbenennung erfolgte hauptsächlich, um zu verdeutlichen, was diese Klasse ist, wenn sie in Stacktraces angezeigt wird (I7eb25).
Die Annotation „@Composable“ ist für Klassen nicht mehr gültig (Ia5f02)
Ambient<T>
ist jetzt @Stable anstelle von @Immutable (I0b4bb)Vor dieser Änderung hat das Compose-Compiler-Plug-in Aufrufe von Konstruktoren innerhalb einer @Composable-Funktion nicht trivial abgefangen, wenn es einen (I5205a, b/158123804)
Die Recompose-Composable-Funktion ist keine nützliche Abstraktion mehr. Die meisten Neuzusammenstellungen sollten durch Zuweisungen von MutableState erfolgen. Für alles darüber hinaus wird empfohlen, die Funktion
invalidate
zu verwenden, um eine Neuzusammensetzung des aktuellen Bereichs auszulösen. (Ifc992)„Observe“ ist keine nützliche Abstraktion mehr. Wenn Sie sie replizieren müssen, kann ihre Implementierung repliziert werden, indem Sie einfach eine zusammensetzbare Funktion erstellen, die einen zusammensetzbaren Lambda-Parameter ausführt. Beispiel:
@Composable fun Observe(body: @Composable () -> Unit) = body()
(I40d37)@Direct wurde zugunsten von @ComposableContract(restartable=false) verworfen (If4708)
Es wurde ein Adapter für den neu eingeführten StateFlow hinzugefügt, mit dem der Anfangswert vorab festgelegt werden kann, sodass der zurückgegebene Status nicht nullfähig ist (I61dd8, b/156233789).
Es wurde ein Adapter für Flow hinzugefügt. Beispiel für die Verwendung: val value by flow.collectAsState() (If2198, b/153375923)
[Mutable]State-Property-Delegatenoperatoren wurden in Erweiterungen verschoben, um die Optimierungen für Property-Delegaten in Kotlin 1.4 zu unterstützen. Anrufer müssen Importe hinzufügen, um
by state { ... }
oderby mutableStateOf(...)
weiterhin verwenden zu können. (I5312c)androidx.compose.ViewComposer wurde nach androidx.ui.node.UiComposer verschoben. androidx.compose.Emittable wurde entfernt. Sie war redundant mit ComponentNode. androidx.compose.ViewAdapters wurde entfernt. Sie werden nicht mehr unterstützt. Die Funktion „Compose.composeInto“ wurde eingestellt. Verwenden Sie stattdessen
setContent
odersetViewContent
. Die Funktion „Compose.disposeComposition“ wurde eingestellt. Verwenden Sie stattdessen die Methodedispose
für das vonsetContent
zurückgegebeneComposition
. androidx.compose.Compose.subcomposeInto wurde zu androidx.ui.core.subcomposeInto verschoben. ComponentNode#emitInsertAt wurde in ComponentNode#insertAt umbenannt. ComponentNode#emitRemoveAt wurde in ComponentNode#removeAt umbenannt. ComponentNode#emitMode wurde in ComponentNode#move umbenannt (Idef00).Das Flag
ComposeFlags.COMPOSER_PARAM
wurde intrue
geändert. Dadurch ändert sich die Strategie für die Codegenerierung für das Compose-Plug-in. Auf hoher Ebene führt dies dazu, dass @Composable-Funktionen mit einem zusätzlichen synthetischen Parameter generiert werden, der an nachfolgende @Composable-Aufrufe übergeben wird, damit die Laufzeit die Ausführung richtig verwalten kann. Dies ist eine erhebliche binäre Breaking Change, sollte aber die Quellcodekompatibilität bei allen zulässigen Verwendungen von Compose beibehalten. (I7971c)Funktionsgefährdende Änderungen an der Ambient-API. Weitere Informationen finden Sie im Log und in der
Ambient<T>
-Dokumentation (I4c7ee, b/143769776).„ui-livedata“ wurde hinzugefügt – ein neues Artefakt mit einem Adapter für LiveData. Beispiel für die Verwendung: val value by liveData.observeAsState() (Ie9e8c, b/150465596)
Rx-Adapter ohne expliziten Anfangswert sind veraltet. Die Verwendung von „null“ ist nicht immer die beste Standardeinstellung, z. B. wenn Sie eine Liste haben. In diesem Fall ist es besser, mit „emptyList()“ oder einer anderen angemessenen Standardeinstellung zu beginnen (I00025, b/161348384).
„ui-rxjava2“ hinzugefügt – neues Artefakt mit Adaptern für RxJava2. Beispiel für die Verwendung: val value by observable.subscribeAsState() (Ifab4b, b/153369097)
savedInstanceState()
kann jetzt mit Nullable-Typen verwendet werden (I6847f, b/153532190)Neue listSaver() und mapSaver(), um das Schreiben benutzerdefinierter Saver-Objekte zu vereinfachen (I8cf68, b/152331508)
Neue Funktionen: savedInstanceState() und rememberSavedInstanceState(). Sie ähneln state() und remember(), haben aber eine integrierte Unterstützung für den gespeicherten Instanzstatus (If1987, b/152025209).
Fehlerkorrekturen
runOnIdleCompose
wurde inrunOnIdle
umbenannt (I83607)- LayoutNode-API als experimentell gekennzeichnet (I4f2e9)
- „androidx.ui.foundation.TextFieldValue“ und „androidx.ui.input.EditorValue“ sind veraltet. Die Composables TextField, FilledTextField und CoreTextField, die diesen Typ verwenden, sind ebenfalls veraltet. Verwenden Sie stattdessen androidx.ui.input.TextFieldValue (I4066d, b/155211005).
- Die eingestellte DrawBackground-API wurde zugunsten der drawBackground-Erweiterungs-APIs für Modifier entfernt. Die Implementierungen von „color“, „brush“ und „paint“ für „drawBackground“ wurden überarbeitet, um die Anzahl der Codepfade zu reduzieren und die Anforderung zu entfernen, dass Modifier als Teil der Komposition erstellt werden müssen. (I0343a)
- Aktualisierte Compose-APIs auf höherer Ebene, die anstelle von CanvasScope ein Canvas-Objekt bereitstellen. Dadurch müssen Nutzer keine eigenen Paint-Objekte mehr verwalten. Für Nutzer, die weiterhin Zugriff auf ein Canvas benötigen, kann die drawCanvas-Erweiterungsmethode verwendet werden. Sie bietet einen Callback zum Ausgeben von Zeichenbefehlen mit dem zugrunde liegenden Canvas. (I80afd)
- Die WithConstraints-Trailing-Lambda-API wurde geändert. Anstelle von zwei Parametern gibt es jetzt einen Empfängerbereich, der zusätzlich zu Einschränkungen und „layoutDirection“ die Eigenschaften „minWidth“, „maxWidth“, „minHeight“ und „maxHeight“ in Dp bietet (I91b9a, b/149979702).
- Es wurde ein Modifikator für symmetrisches Padding hinzugefügt. (I39840)
- Die Attribute „wrapContentWidth“ und „wrapContentHeight“ wurden aktualisiert. Sie erwarten jetzt eine vertikale oder horizontale Ausrichtung anstelle einer beliebigen Ausrichtung. Der Schwerkraftmodifikator wurde aktualisiert, um die vertikale oder horizontale Ausrichtung zu akzeptieren. „Zeile“, „Spalte“ und „Stapel“ wurden aktualisiert, um benutzerdefinierte kontinuierliche Ausrichtungen zu unterstützen. (Ib0728)
- Das Modul „ui-text“ wurde in „ui-text-core“ umbenannt (I57dec).
- DrawModifier API verbessern:
- Der Empfängerbereich für draw() wurde zu ContentDrawScope geändert.
- Alle Parameter für draw() entfernt
- DrawScope hat dieselbe Benutzeroberfläche wie das frühere CanvasScope.
- ContentDrawScope hat die Methode drawContent() (Ibaced, b/152919067)
- „ColoredRect“ wurde eingestellt. Verwenden Sie stattdessen
Box(Modifier.preferredSize(width, height).drawBackground(color))
. (I499fa, b/152753731) - Modifikator plus Operator durch Factory-Erweiterungsfunktionen ersetzt (I225e4)
- Auf RowScope- und ColumnScope-Mitglieder kann jetzt außerhalb von Row und Column zugegriffen werden. (I3a641)
- „LayoutFlexible“ wurde in „LayoutWeight“ umbenannt. Der enge Parameter wurde in „fill“ umbenannt. (If4738)
- WithConstraints hat den Parameter „LayoutDirection“ erhalten (I6d6f7)
- Hintergrund wurde in „DrawBackground“ umbenannt und wird standardmäßig gespeichert (Ia0bd3).
- ButtonStyle wurde durch separate Funktionen ersetzt und die Überladung von Text (String) wurde entfernt. In den aktualisierten Beispielen finden Sie Informationen zur Verwendung. (If63ab, b/146478620, b/146482131)
runOnIdleCompose
undrunOnUiThread
sind jetzt globale Funktionen anstelle von Methoden für ComposeTestRule. (Icbe8f)
Externe Beiträge
- Entfernen Sie unnötige APIs wie Looper und Handler aus der Compose Runtime-Portierungsebene (I6847d).
Flow<T>.collectAsState()
ohne Anfangswert einstellen. Verwenden SieStateFlow<T>
oder übergeben Sie stattdessen einen expliziten Anfangswert. (I63f98, b/157674865)