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 | Betarelease | Alpha-Release |
|---|---|---|---|---|
| 19. November 2025 | 1.9.5 | 1.10.0-rc01 | - | - |
Struktur
Compose ist eine Kombination aus 7 Maven-Gruppen-IDs innerhalb von androidx. Jede Gruppe enthält eine bestimmte Teilmenge von Funktionen mit eigenen Versionshinweisen.
In dieser Tabelle werden die Gruppen erläutert und es sind Links zu den einzelnen Versionshinweisen enthalten.
| Gruppe | Beschreibung |
|---|---|
| compose.animation | Animationen in Jetpack Compose-Anwendungen erstellen, um die Nutzerfreundlichkeit zu verbessern. |
| compose.compiler | @Zusammensetzbare 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:
Groovy
dependencies { implementation "androidx.compose.runtime:runtime:1.9.5" implementation "androidx.compose.runtime:runtime-livedata:1.9.5" implementation "androidx.compose.runtime:runtime-rxjava2:1.9.5" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.runtime:runtime:1.9.5") implementation("androidx.compose.runtime:runtime-livedata:1.9.5") implementation("androidx.compose.runtime:runtime-rxjava2:1.9.5") } 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 stimmen, indem Sie auf die Schaltfläche mit dem Stern klicken.
Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.
Laufzeit-Tracing Version 1.7
Version 1.7.0-rc01
18. September 2024
androidx.compose.runtime:runtime-tracing:1.7.0-rc01 ist 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 ist 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 ist 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ügt wurde.
Version 1.0.0-alpha04
23. August 2023
androidx.compose.runtime:runtime-tracing:1.0.0-alpha04 ist 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.Tracewurde inandroidx.tracing.perfetto.PerfettoSdkTraceumbenannt. (I44af8)- Die Perfetto SDK-APIs für das Tracing werden an
android.os.Traceangepasst. (I73ba0, b/282199917) - Voraussetzungen für das Tracing beim App-Start. (Iad890)
- Zusammengeführte experimentelle und öffentliche API-Dateien (I0f2e1, b/278769092)
Version 1.0.0-alpha02
8. Februar 2023
androidx.compose.runtime:runtime-tracing:1.0.0-alpha02 ist 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 ist veröffentlicht. Version 1.0.0-alpha01 enthält diese Commits.
Neue Funktionen
androidx.compose.runtime:runtime-tracingist eine Bibliothek, die in Verbindung mit den entsprechenden Tools (demnächst verfügbar) ein erweitertes Tracing in einer Compose-App ermöglicht. Diese erste Version ist 1.0.0-alpha01.
Version 1.10
Version 1.10.0-rc01
19. November 2025
androidx.compose.runtime:runtime-*:1.10.0-rc01 ist veröffentlicht. Version 1.10.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Schutz vor reentrant-Änderungen beim Aufzeichnen abgeleiteter Status in
SnapshotStateObserver(I7b862, b/435655844, b/456249373, b/402535073) - [Lint] Ein kleiner Fehler wurde behoben, damit der Detector ordnungsgemäß vor der Verwendung von Compound-Zuweisungen warnt. (I08319, b/456775556)
Version 1.10.0-beta02
5. November 2025
androidx.compose.runtime:runtime-*:1.10.0-beta02 ist veröffentlicht. Version 1.10.0-beta02 enthält diese Commits.
API-Änderungen
Wir haben mehrere API-inkompatible Änderungen vorgenommen, um die Installation und Verwaltung von
RetainedValuesStores zu vereinfachen. Bestehende Aufrufe vonretainundRetainedEffectsind davon nicht betroffen. Für benutzerdefinierteRetainedValuesStores ist jedoch eine Migration erforderlich, damit sie mit dieser Version kompatibel sind. (If3c2f, b/451921682, b/450539803)RetainedValuesStorestellt keine Low-Level-APIs mehr zum Starten/Beenden der Aufbewahrung bereit. Der Aufbewahrungsstatus folgt jetzt automatisch den Inhalten.LocalRetainedValuesStoreProviderbietet jetzt die Installation vonRetainedValuesStorean.LocalRetainedValuesStoresollte nicht direkt angegeben werden. Weitere Informationen zu diesen Änderungen finden Sie in der aktualisierten Dokumentation und den Beispielen.RetainedValuesStoreProviderwird inRetainedValuesStoreRegistryumbenannt. Diese Klasse stellt jetzt nur noch APIs zum Installieren und Verwalten derRetainedValuesStores in der Komposition bereit.ControlledRetainedValuesStorewird durchManagedRetainedValuesStoreersetzt.RetainedValuesStoreist jetzt eine Schnittstelle.
Bisher sah die Installation eines benutzerdefinierten RetainedValuesStore möglicherweise so aus:
val retainedValuesStore = retainControlledRetainedValuesStore()
if (active) {
CompositionLocalProvider(LocalRetainedValuesStore provides retainedValuesStore) {
content()
}
val composer = currentComposer
DisposableEffect(retainedValuesStore) {
val cancellationHandle =
if (retainedValuesStore.retainExitedValuesRequestsFromSelf > 0) {
composer.scheduleFrameEndCallback {
retainedValuesStore.stopRetainingExitedValues()
}
} else {
null
}
onDispose {
cancellationHandle?.cancel()
retainedValuesStore.startRetainingExitedValues()
}
}
}
Mit diesen API-Änderungen kann diese Installation stattdessen mit diesem Code ausgedrückt werden:
val retainedValuesStore = retainManagedRetainedValuesStore()
if (active) {
LocalRetainedValuesStoreProvider(retainedValuesStore) {
content()
}
}
Fehlerkorrekturen
- Überträgt die Ungültigmachung des Bereichs in verschiebbaren Inhalten, bevor diese Inhalte aus der Slot-Tabelle verschoben werden (I9d123, b/451651649)
Version 1.10.0-beta01
22. Oktober 2025
androidx.compose.runtime:runtime-*:1.10.0-beta01 ist veröffentlicht. Version 1.10.0-beta01 enthält diese Commits.
API-Änderungen
RetainedValuesStore.getExitedValueOrDefaultwird inRetainedValuesStore.getExitedValueOrElseumbenannt (If9653, b/452340613)isKeepingExitedValueswurde inisRetainingExitedValuesumbenannt (I660bf, b/437095756)RetainScopewurde inRetainedValuesStoreumbenannt.RetainScopeHolderwurde inRetainedValuesStoreRegistryumbenannt.RetainScopeHolder.RetainScopeProviderwurde inRetainedValuesStoreRegistry.ProvideChildRetainedValuesStoreumbenannt. (Idf23a, b/437095756)
Fehlerkorrekturen
- Verzögerte Initialisierung von
SavedStateinSaveableStateRegistrybis zur ersten Verwendung. (Ic0a93)
Version 1.10.0-alpha05
8. Oktober 2025
androidx.compose.runtime:runtime-*:1.10.0-alpha05 ist veröffentlicht. Version 1.10.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
- Füllen Sie den Stacktrace für
DiagnosticComposeExceptionim Release-Modus aus. (Ib76cb) - Es wurde ein Problem im Snapshot-Status behoben, bei dem die Verwendung einer Zusammenführungsrichtlinie für einen Typ dazu führen konnte, dass der vorherige Wert falsch berechnet wurde. In diesem Fall wurde ein zukünftiger Wert des Status anstelle des vorherigen Werts zurückgegeben. Das kann passieren, wenn mehr als zwei veränderbare Snapshots ausstehen und für mindestens einen der angewendeten Werte eine Zusammenführungsrichtlinie gilt. (I527b5, b/442791065)
Version 1.10.0-alpha04
24. September 2025
androidx.compose.runtime:runtime-*:1.10.0-alpha04 ist veröffentlicht. Version 1.10.0-alpha04 enthält diese Commits.
API-Änderungen
- Die
RetainScopeHolderAPI wurde hinzugefügt, um eine Sammlung vonRetainScopeszu verwalten. Damit lässt sich die Aufbewahrung für Container und Navigations-Hosts implementieren, die viele untergeordnete Elemente mit unterschiedlichen Aufbewahrungszeiträumen enthalten. (I10e0f) - Die APIs
RetainedContentHostundretainControlledRetainScopewurden hinzugefügt. Mit ihnen lassen sich automatisch verwalteteRetainScopesfür verschwindende Inhalte wie minimierte Bereiche erstellen (If81f6). - Die Inline-Überladung von
Updater#setist veraltet, da der bereitgestellte Wert zu oft in eine Wrapperklasse eingeschlossen wurde. Es wurde eine Überladung vonUpdater#inithinzugefügt, die einen Parameter akzeptiert, sodass keine Lambda-Erfassung erforderlich ist. (Id679e) - Einführung von
RetainedEffect, einer Nebenwirkungs-API, dieDisposableEffectähnelt, aber dem Aufbewahrungs- statt dem Kompositionslebenszyklus folgt. Diese API ist für Effekte vorgesehen, die an die Bindung eines anderen Objekts gebunden sind, dasRetainObservernicht implementiert oder nicht implementieren kann. (I1c61f, b/177562901) - Die Dokumentation von
RetainObserver.onRetainedwurde korrigiert undRetainObserver.onUnusedwurde hinzugefügt, wasRememberObserver.onAbandonedentspricht (Ia6fc5).
Fehlerkorrekturen
- Das Dispatching wird nach der ersten Gruppe in einer Funktion (z. B. einem zusammensetzbaren Aufruf) und vor einer Gruppe, die entfernt werden kann (z. B. einer
if-Anweisung), dieonForgottenin der falschen Reihenfolge dispatcht, behoben. (I453f6, b/346821372) - Vermeiden Sie das Durchlaufen des Coroutine-Kontexts beim Initialisieren von
LaunchedEffect. (I8d2c3b)
Version 1.10.0-alpha03
10. September 2025
androidx.compose.runtime:runtime-*:1.10.0-alpha03 ist veröffentlicht. Version 1.10.0-alpha03 enthält diese Commits.
API-Änderungen
- Es werden auf Gruppenschlüsseln basierende Compose-Stacktraces eingeführt, die in minimierten Apps funktionieren. Das ProGuard-Mapping für diese Traces wird ab Kotlin 2.3.0 vom Compose-Compiler-Gradle-Plug-in generiert. Diese Stacktraces sind standardmäßig deaktiviert. Verwenden Sie
ComposeStackTraceMode.GroupKeys, um sie zu aktivieren. (Ifbcb5) - Schnittstelle für Tooling hinzufügen:
IdentifiableRecomposeScope(Idd5e0, b/434194620) - Unnötige Invalidierungen in Kompositionen mit
CompositionLocalContexts wurden verhindert (I3fa21, b/412750209)
Fehlerkorrekturen
- In der Dokumentation und in den Tools wurde klargestellt, dass auch an „retain“ übergebene Schlüssel beibehalten werden. Vermeiden Sie das Übergeben von Schlüsseln an „retain“, die zu einem Speicherleck führen. (Ib553b, b/177562901)
- Es wurde ein Problem behoben, bei dem der
resume()einer pausierten Komposition in einem anderen Thread aufgerufen wurde. Der Status der ausstehenden Benachrichtigungen konnte dann durcheinander geraten, wenn der Hauptthread versuchte, die pausierbare Komposition für den nächsten Frame neu zu komponieren. (Ie5f17, b/442649894) - In der Komposition erfasste Ausnahmen protokollieren. (I47d78, b/432799675, b/436878515, b/359623674, b/400436355)
Version 1.10.0-alpha02
27. August 2025
androidx.compose.runtime:runtime-*:1.10.0-alpha02 ist veröffentlicht. Version 1.10.0-alpha02 enthält diese Commits.
API-Änderungen
@DoNotRetainwurde hinzugefügt. Damit können Typen annotiert werden, die nicht mit derretainAPI verwendet werden sollten, da sie möglicherweise Ressourcenlecks verursachen. (Ie5435)- Für Projekte, die mit Kotlin 2.0 veröffentlicht wurden, ist KGP 2.0.0 oder höher erforderlich. (Idb6b5)
Fehlerkorrekturen
- Ein Problem wurde behoben, durch das die Vorgänge für den Applier nicht richtig berechnet wurden, wenn durch verschiebbare Inhalte der Stammknoten einer Komposition geändert wurde. Bei der Berechnung von Änderungen für verschiebbare Inhalte kann ein
up()-Aufruf ausstehend bleiben und nicht an den Applier gesendet werden. Dadurch wird der Applier-Status für die nachfolgende Verwendung falsch positioniert. (I7c583), (I47b70) - Markiert
CheckResultals eingestellt, da es nicht verwendet werden soll. (I32934)
Version 1.10.0-alpha01
13. August 2025
androidx.compose.runtime:runtime-*:1.10.0-alpha01 ist veröffentlicht. Version 1.10.0-alpha01 enthält diese Commits.
API-Änderungen
- Stellt die Retain API vor. Wie
rememberSaveablekann „retain“ gespeicherte Werte beibehalten und speichern, die die Kompositionshierarchie verlassen. Beibehaltene Werte werden nicht serialisiert und haben eine kürzere Lebensdauer als gespeicherte Werte. Sie verhalten sich ähnlich wie ein androidxViewModel. Weitere Informationen finden Sie in der Dokumentation. (Ia3105, b/177562901) - Es wurde eine
awaitOrScheduleNextCompositionEnd()-API hinzugefügt, die einen Callback ausgibt, wenn der Recomposer das Erstellen des aktuellen Frames abgeschlossen hat. Wenn der Recomposer gerade keinen Frame zusammensetzt, wird diese API angehalten, bis die Zusammensetzung des nächsten Frames abgeschlossen ist, und es wird ein neuer Frame zur Zusammensetzung geplant. (Ib873c) - API zum Hinzufügen eines lokalen Anbieters für Kompositionen, der keinen Unit-Wert zurückgibt (I22521, b/271871288)
- Es wurde ein Feature-Flag (
isMovableContentUsageTrackingEnabled) hinzugefügt, mit dem die Verwendung von verschiebbaren Inhalten verfolgt werden kann, um beim Erstellen der Inhalte Overhead zu vermeiden. Diese Funktions-Flags sind derzeit standardmäßig deaktiviert. (Ia713d)
Fehlerkorrekturen
- Behebt einen Absturz bei verschiebbaren Inhalten, wenn sie zwischen Unterkompositionen verschoben werden. (I3fa1e, b/436858107)
- Es wurde ein Fehler behoben, bei dem ein Teil eines zusammensetzbaren Stacktrace fehlte, wenn er sich in mehreren verschachtelten Unterkompositionen befand. (I98c6f)
- Die Standard-minSdk-Version wird von API 21 auf API 23 aktualisiert (Ibdfca, b/380448311, b/435705964, b/435705223).
- Ein Race-Bedingung wurde behoben, die auftrat, wenn der interne Status einer pausierbaren Komposition von mehreren Threads aus aktualisiert wurde. (I03895)
- Aktualisiert den Observer für die Registrierung der Zusammensetzung, damit er vor der ersten Zusammensetzung aufgerufen wird. (I4adca, b/430600932)
- Ein kleiner Fehler wurde behoben, damit
AutoboxingStateValuePropertyDetectorsowohl mit K1 als auch mit K2 kompatibel ist. (Ie81c1)
Externer Beitrag
- Das Artifact „runtime-rxjava2“ wird zu einem Multiplattform-Artifact und die JVM wird als unterstütztes Ziel hinzugefügt. (I5409e)
- Das Artifact „runtime-rxjava3“ wird zu einem Multiplattform-Artifact und die JVM wird als unterstütztes Ziel hinzugefügt. (I97e84)
Version 1.9
Version 1.9.5
19. November 2025
androidx.compose.runtime:runtime-*:1.9.5 ist veröffentlicht. Version 1.9.5 enthält diese Commits.
Fehlerkorrekturen
- Überträgt die Ungültigmachung des Bereichs in verschiebbaren Inhalten, bevor diese Inhalte aus der Slot-Tabelle verschoben werden (I9d123, b/451651649)
Version 1.9.4
22. Oktober 2025
androidx.compose.runtime:runtime-*:1.9.4 ist veröffentlicht. Version 1.9.4 enthält diese Commits.
Version 1.9.3
8. Oktober 2025
androidx.compose.runtime:runtime-*:1.9.3 ist veröffentlicht. Version 1.9.3 enthält diese Commits.
Version 1.9.2
24. September 2025
androidx.compose.runtime:runtime-*:1.9.2 ist veröffentlicht. Version 1.9.2 enthält diese Commits.
Version 1.9.1
10. September 2025
androidx.compose.runtime:runtime-*:1.9.1 ist veröffentlicht. Version 1.9.1 enthält diese Commits.
Fehlerkorrekturen
- Vermeiden Sie das erneute Zusammensetzen von Kompositionen, die gerade zusammengesetzt werden. (Iacb01)
- Verhindern, dass Recompose-Bereiche zweimal pausiert werden (I060b2, b/431584881)
Version 1.9.0
13. August 2025
androidx.compose.runtime:runtime-*:1.9.0 ist veröffentlicht. Version 1.9.0 enthält diese Commits.
Wichtige Änderungen seit Version 1.8.0
- Für Lint-Prüfungen, die mit Compose ausgeliefert werden, ist jetzt mindestens AGP-Version 8.8.2 erforderlich. Wenn Sie AGP nicht upgraden können, können Sie stattdessen Lint separat upgraden, indem Sie
android.experimental.lint.version=8.8.2(oder eine neuere Version) in Ihrer gradle.properties verwenden. Um Compose-Lint-Prüfungen in der IDE auszuführen, ist Android Studio Ladybug oder höher erforderlich. - Es wurde eine neue Laufzeit-Annotationsbibliothek erstellt. Diese enthält Annotationsdefinitionen ohne Abhängigkeit von der Compose-Laufzeit, sodass sie in Nicht-Compose-Modulen verwendet werden kann.
@Stable,@Immutableund@StableMarkerwurden in die Laufzeitannotation verschoben, um die Annotation von Nicht-Compose-Modulen zu ermöglichen.@FrequentlyChangingValueund@RememberInCompositionwurden der Laufzeitanmerkung hinzugefügt.@FrequentlyChangingValuekennzeichnet Deklarationen, die häufige Neuzusammensetzungen verursachen können, und@RememberInCompositionkennzeichnet Deklarationen, die bei der Zusammensetzung berücksichtigt werden sollten. Entsprechende Lint-Prüfungen warnen vor einer falschen Verwendung.
Version 1.9.0-rc01
30. Juli 2025
androidx.compose.runtime:runtime-*:1.9.0-rc01 ist veröffentlicht. Version 1.9.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Aktualisiert den Observer für die Registrierung der Zusammensetzung, damit er vor der ersten Zusammensetzung aufgerufen wird. (I4adca, b/430600932)
Version 1.9.0-beta03
16. Juli 2025
androidx.compose.runtime:runtime-*:1.9.0-beta03 ist veröffentlicht. Version 1.9.0-beta03 enthält diese Commits.
Version 1.9.0-beta02
2. Juli 2025
androidx.compose.runtime:runtime-*:1.9.0-beta02 ist 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 einen 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 ist 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)
SnapshotStateSetimplementiert jetztParcelableauf Android und kann als Teil vonrememberSaveable { ... }verwendet werden. (I755dd, b/378623803)SnapshotStateListimplementiert jetztParcelableauf Android und kann als Teil vonrememberSaveable { ... }verwendet werden. (Id18be, b/378623803)movableContentOf()ist jetzt mit der Annotation@RememberInCompositiongekennzeichnet, 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
setDiagnosticStackTraceEnabledin „experimental“, um die zukünftige Entwicklung dieser Funktion zu berücksichtigen. (I11db3) currentCompositeKeyHashwurde 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,@Immutableund@StableMarkerwurden (kompatibel) 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, dieKSerializerakzeptiert, wurde inrememberSerializableumbenannt. Mit dieser Änderung wird die beabsichtigte Verwendung vonkotlinx.serializationverdeutlicht. Die direkte Unterstützung allgemeinerkotlinx.Serializable-Klassen inrememberSaveablewürde einenreified-Typparameter erfordern, was die Quellkompatibilität beeinträchtigen würde, da an allen Aufrufstellen zur Kompilierzeit reifizierte Typinformationen angegeben werden müssten. (Idb875, I38627, b/376028110)
Fehlerkorrekturen
- Kompositionen, die mit pausierbaren Inhalten erstellt wurden und die pausiert wurden, 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
onForgottenan die Observer gesendet wird.RememberObserversin einer gekündigten pausierbaren Komposition sollte nur ein „onAbandoned“-Ereignis gesendet werden. (I26f54) - Ein Problem mit verschiebbaren Inhalten wurde behoben. Invalidationen, die in späten Phasen der Verarbeitung verschiebbarer Inhalte eintreffen, werden dem Composer hinzugefügt. Diese Invalidationen werden jedoch nicht aktualisiert, wenn die Inhalte verschoben werden. Dadurch werden die Inhalte am falschen Ort neu zusammengesetzt. (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 aufgerufen wurde, der vonSnapshotStateListnach dem Aufrufen vonprevious()erstellt wurde, wurde möglicherweise das falsche Element aus der Liste entfernt. Das Verhalten entsprach nicht dem vonArrayListbei derselben Aufruffolge. (I05ab7, b/417493222) - Ein Problem mit der Reihenfolge beim Senden von
onForgottonwurde behoben. Dadurch konnte es beispielsweise passieren, dass dieonDisposevon 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, aber ein zuvor pausierter Status neu zusammengesetzt werden muss, weil sich ein gelesener Status während der Pausierung der Komposition geändert hat. (I441d1, b/416209738)
- Der Fehler, dass sich pausierbare Composables nicht an den Dispatcher erinnern, 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.withFrameNanosabgebrochen wurde, während ein Frame gesendet wurde. (I89cab, b/407027032) - Der Recomposer kann bei verschiebbaren Inhalten in den Leerlauf gehen (Ie5416, b/409267170)
- Die Reihenfolge, in der
onReuseundonDeactivatewährend der pausierbaren Komposition umgekehrt werden könnten. Sie treten jetzt garantiert in der ReihenfolgeonDeactivate/onReuseauf. (I996e4, b/404058957) - Das Versenden von Remember-Beobachtern in pausierbaren Composables wurde korrigiert, um zu vermeiden, dass „remembered“/„forgotten“ im selben Apply-Vorgang gesendet werden (I570b2, b/404645679, b/407931790).
LifecycleRegistrywurde 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)
Externer Beitrag
- Ein Fehler wurde behoben, der Molecule-Nutzer betraf und bei dem die Verwendung von
RecompositionMode.Immediatezu verpassten Neuzusammenstellungen führen konnte. (I9f3a9, b/419527812) - Es werden
PausableComposition-,isApplied- undisCancelled-Getter bereitgestellt, mit denen der Status derPausableCompositiongeprüft werden kann. (I994aa) AnnotationTarget.FUNCTIONwurde derFunctionKeyMeta-Annotation hinzugefügt. (I08021)
Version 1.9.0-alpha04
4. Juni 2025
androidx.compose.runtime:runtime-*:1.9.0-alpha04 ist veröffentlicht. Version 1.9.0-alpha04 enthält diese Commits.
API-Änderungen
SnapshotStateSetimplementiert jetzt Parcelable unter Android und kann als Teil vonrememberSaveable { ... }verwendet werden. (I755dd, b/378623803)SnapshotStateListimplementiert jetzt Parcelable unter Android und kann als Teil vonrememberSaveable { ... }verwendet werden. (Id18be, b/378623803)movableContentOf()ist jetzt mit der Annotation@RememberInCompositiongekennzeichnet, 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
onForgottonwurde behoben. Dadurch konnte es beispielsweise passieren, dass dieonDisposevon 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ügige Fehlerkorrektur, um die Erkennung veränderlicher Sammlungen sowohl für K1 als auch für K2 kompatibel zu machen (Ie4878)
- Es wurde ein kleiner Fehler behoben, damit die Suche nach Anmerkungen in überschriebenen Property-Accessoren sowohl mit K1 als auch mit K2 kompatibel ist (I9900d).
Externer Beitrag
- Ein Fehler wurde behoben, der Molecule-Nutzer betraf und bei dem die Verwendung von
RecompositionMode.Immediatezu verpassten Neuzusammenstellungen führen konnte. (I9f3a9, b/419527812) - Die Getter
PausableCompositionisApplied undisCancelledwurden bereitgestellt, um den Status derPausableCompositionzu prüfen. (I994aa)
Version 1.9.0-alpha03
20. Mai 2025
androidx.compose.runtime:runtime-*:1.9.0-alpha03 ist veröffentlicht. Version 1.9.0-alpha03 enthält diese Commits.
API-Änderungen
- Ändern Sie
setDiagnosticStackTraceEnabledin „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, aber ein zuvor pausierter Status neu zusammengesetzt werden muss, weil sich ein gelesener Status während der Pausierung der Komposition geändert hat. (I441d1, b/416209738)
- Der Fehler, dass die Pausable-Zusammensetzung sich nicht an den Dispatcher erinnert, wurde behoben (b/404058957). Der vorherige Fix war unvollständig. (I1afd4, b/404058957)
SaveableStateHolder.SaveableStateProviderbietet jetzt über die Komposition eineLocalSavedStateRegistryOwnerfür seine Inhalte. (Ia2761, b/413108878)androidx.compose.runtime.saveableist jetzt vonandroidx.lifecycle.runtime.composeabhängig. (I53228, b/413108878)
Version 1.9.0-alpha02
7. Mai 2025
androidx.compose.runtime:runtime-*:1.9.0-alpha02 ist veröffentlicht. Version 1.9.0-alpha02 enthält diese Commits.
API-Änderungen
rememberSaveablemit einem benutzerdefinierten „key“ wurde eingestellt. 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. Weitere Informationen finden Sie in der vollständigen 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 pausierbaren Composables zu einer Ausnahme kommen, wenn virtuelle Knoten aktualisiert werden. (Idbf31, b/409291131)- Ein Deadlock wurde behoben, der Molecule-Nutzer betreffen konnte, wenn ein ausgesetzter Aufruf von
FrameClock.withFrameNanosabgebrochen wurde, während ein Frame gesendet wurde. (I89cab, b/407027032) - Der Recomposer kann in den Leerlauf gehen, während der Status für verschiebbare Inhalte noch aussteht. Das passiert normalerweise nicht, da der Status für verschiebliche Inhalte im Hauptloop des Recomposers verworfen wird. Dies kann jedoch bei pausierbaren Kompositionen auftreten, wenn die verschiebbaren Inhalte während
resume()verworfen werden(Ie5416, b/409267170). - Die Reihenfolge, in der
onReuseundonDeactivatewährend der pausierbaren Komposition umgekehrt werden könnten. Sie werden jetzt garantiert in der ReihenfolgeonDeactivate/onReuseausgeführt. (I996e4, b/404058957)
Version 1.9.0-alpha01
23. April 2025
androidx.compose.runtime:runtime-*:1.9.0-alpha01 ist 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.propertiesverwenden. Um Compose-Lint-Prüfungen in der IDE auszuführen, ist Android Studio Ladybug oder höher erforderlich.
API-Änderungen
currentCompositeKeyHashwurde 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,@Immutableund@StableMarkerwurden (kompatibel) 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
onCreatingundonDisposing, da sie eingestellt und inonPreCreateundonPreDisposeumbenannt 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)
- Diagnose-Compose-Stacktraces basierend auf den in der Komposition gespeicherten Quellinformationen einführen. (I3db9f, b/354163858)
runWithTimingDisabledwird zugunsten vonrunWithMeasurementDisabledeingestellt, da dieser Status das Verhalten klarer beschreibt: 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
@FrequentlyChangingValuehinzu: 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
@RememberInCompositionhinzu: 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, dieKSerializerfür die typsichere Statuspersistenz mit KotlinX Serialization unterstützt. Die vorhandeneSaver-basierte API wird weiterhin unterstützt. (Iea4ab, b/376028110)
Fehlerkorrekturen
- Das Versenden von Remember-Beobachtern in pausierbaren Composables wurde korrigiert, um zu vermeiden, dass „remembered“/„forgotten“ im selben Apply-Vorgang gesendet werden (I570b2, b/404645679, b/407931790).
- Die
SnapshotObserver-Methoden „onCreating“ wurden inonPreCreateundonDisposinginonPreDisposeumbenannt, 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-Stacktraces in
LaunchedEffectundrememberCoroutineScopehinzugefü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.2in gradle.properties festlegen, um die Lint-Version zu aktualisieren, ohne AGP zu beeinträchtigen. (I6f2a8)
Externer Beitrag
AnnotationTarget.FUNCTIONwurde der AnnotationFunctionKeyMetahinzugefügt. (I08021)
Version 1.8
Version 1.8.3
18. Juni 2025
androidx.compose.runtime:runtime-*:1.8.3 ist veröffentlicht. Version 1.8.3 enthält diese Commits.
Version 1.8.2
20. Mai 2025
androidx.compose.runtime:runtime-*:1.8.2 ist veröffentlicht. Version 1.8.2 enthält diese Commits.
Version 1.8.1
7. Mai 2025
androidx.compose.runtime:runtime-*:1.8.1 ist veröffentlicht. Version 1.8.1 enthält diese Commits.
Version 1.8.0
23. April 2025
androidx.compose.runtime:runtime-*:1.8.0 ist 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 ist 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 ist 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 ist veröffentlicht. Version 1.8.0-rc01 enthält diese Commits.
API-Änderungen
- Die
SnapshotObserver-Methoden „onCreating“ wurden inonPreCreateundonDisposinginonPreDisposeumbenannt, 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 ist 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 ist 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 ist 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 ist 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 ist 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
SnapshotIdsind jetzt intern statt öffentlich. Bei Bedarf können Sie arithmetische Operationen für einSnasphotIdausführen, indem Sie es mittoInt()bzw.toLong()in einIntoderLongkonvertieren. (Ic3a57)
Externer Beitrag
- Speicher für
movableContentOf-Parameter optimieren (ed87177)
Version 1.8.0-alpha06
13. November 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha06 ist veröffentlicht. Version 1.8.0-alpha06 enthält diese Commits.
API-Änderungen
- Änderungen an der
PausableCompositionAPI. 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)
snapshotIdvom TypLongwurde zuSnapshothinzugefügt undidwurde verworfen. Die ID eines Snapshots wurde vonIntinLonggeä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,Intoder ein anderer Typ sein kann. Bei Plattformen, die keine nativeLonghaben, z. B. JavaScript, sollten hohe Framerates (über 1.000 FPS) vermieden werden, daIntetwa alle 24 Tage einen Überlauf verursachen würde. (I38ac3, b/374821679)
Fehlerkorrekturen
- Fester
providesDefaultfür einen einzelnenprovides. (aosp/3318540 b/374263387) ChangeListoptimieren (3318538)
Version 1.8.0-alpha05
30. Oktober 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha05 ist veröffentlicht. Version 1.8.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
- Behebt den Stack-Overflow-Fehler beim Hinzufügen von
Int.MAX_VALUEzuSnapshotIdSet. (b/370536104, Ic4179f6) - Mikrooptimierungen zur Laufzeit (I50c60)
- R8 erlauben, Debugging-Laufzeitprüfungen zu entfernen (I8c44)
compoundKeyOfiterativ statt rekursiv gestalten (I5817f)
Externer Beitrag
- Stacks mit Sammlungslisten implementieren (I7d47c)
Version 1.8.0-alpha04
16. Oktober 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha04 ist veröffentlicht. Version 1.8.0-alpha04 enthält diese Commits.
Leistungsverbesserungen
- Snapshot-ID für Statusdatensätze im Konstruktor angeben (85c00f)
- Refaktorieren Sie
SnapshotState***, 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 ist veröffentlicht. Version 1.8.0-alpha03 enthält diese Commits.
Leistungsverbesserungen
- Untergeordneten Kontext für
rememberCoroutineScope(f61464) verzögert erstellenrememberCoroutineScopewird in der Regel verwendet, um Coroutinen als Reaktion auf Ereignisse zu starten, die nach der Komposition auftreten. 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
rememberCoroutineScopezurückgegebene Bereich wird bei Zugriff verzögert erstellt. So werden Job-Erstellung und ‑Abbruch vermieden, wenn der Bereich nie verwendet wird.coroutineContext
Version 1.8.0-alpha02
18. September 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha02 ist veröffentlicht. Version 1.8.0-alpha02 enthält diese Commits.
Neue Funktionen
PausableCompositionwurde hinzugefügt. Damit lässt sich eine untergeordnete Komposition erstellen, 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 ist 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 ist veröffentlicht. Version 1.7.8 enthält diese Commits.
Version 1.7.7
29. Januar 2025
androidx.compose.runtime:runtime-*:1.7.7 ist veröffentlicht. Keine Änderungen gegenüber Version 1.7.6.
androidx.compose.runtime:runtime-*:1.7.6 ist veröffentlicht. Version 1.7.6 enthält diese Commits.
Version 1.7.5
30. Oktober 2024
androidx.compose.runtime:runtime-*:1.7.5 ist veröffentlicht. Version 1.7.5 enthält diese Commits.
Version 1.7.4
16. Oktober 2024
androidx.compose.runtime:runtime-*:1.7.4 ist veröffentlicht. Version 1.7.4 enthält diese Commits.
Version 1.7.3
2. Oktober 2024
androidx.compose.runtime:runtime-*:1.7.3 ist veröffentlicht. Version 1.7.3 enthält diese Commits.
Version 1.7.2
18. September 2024
androidx.compose.runtime:runtime-*:1.7.2 ist veröffentlicht. Version 1.7.2 enthält diese Commits.
Version 1.7.1
10. September 2024
- An Android-Artefakten wurden keine Änderungen vorgenommen.
-desktopArtefakte 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 ist 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 basierend auf den Werten anderer Kompositionslokalen berechnet wird. Dazu kann
compositionLocalWithComputedDefault()verwendet werden. Alternativ kann eine Lambda-Funktion bereitgestellt werden, mit der der Wert berechnet wird. Dazu wirdprovidesComputedanstelle vonprovidesverwendet. - 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 wird anstelle voncurrentverwendet, 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 einfachen Versionen ist der Wert, der als Parameter anmutableStateOf()übergeben wird. Der Anfangsstatus vonmutableStateListOf()undmutableStateMapOf()ist leer. Snapshot.isInSnapshotundSnapshot.PreexistingSnapshotIdwurden 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
nonSkippingGroupOptimizationfü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 werden. I(acbc08) - Composable-Lambdas in untergeordneten Kompositionen im selben Frame ungültig machen. (98301c)
- Rufen Sie den
onRelease-Callback in derselben Reihenfolge wieonForgottenauf. (2cd790) - Modus für starkes Überspringen aktivieren (ed1766)
currentCompoundHashKeyin mehr Fällen eindeutig machen (d4a872)
Version 1.7.0-rc01
21. August 2024
androidx.compose.runtime:runtime-*:1.7.0-rc01 ist 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 ist 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 ist 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 ist 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 ist 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 ist 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 ist 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 ist 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 ist 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 ist 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 basierend auf den Werten anderer Kompositionslokalen berechnet wird. Dazu kann
compositionLocalWithComputedDefault()verwendet werden. Alternativ kann eine Lambda-Funktion bereitgestellt werden, mit der der Wert berechnet wird. Dazu wirdprovidesComputedanstelle vonprovidesverwendet. - 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 wird anstelle voncurrentverwendet, 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 einfachen Versionen ist der Wert, der als Parameter anmutableStateOf()übergeben wird. Der Anfangsstatus vonmutableStateListOf()undmutableStateMapOf()ist leer. Snapshot.isInSnapshotundSnapshot.PreexistingSnapshotIdwurden 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
readObserverin verschachtelten Snapshots wurde korrigiert. Dies führte dazu, dass verschachtelte abgeleitete Status bei Verwendung in einemsnapshotFlownicht ausreichend invalidiert wurden. (Idf138)
Version 1.7.0-alpha06
3. April 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha06 ist 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 ist 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 ist veröffentlicht. Version 1.7.0-alpha04 enthält diese Commits.
Leistungsverbesserungen
Snapshot.currenteinmal pro Auswertung des abgeleiteten Status aufrufen (ee7daf)currentRecordeinmal pro Beobachtung in der Zusammensetzung lesen (b882b2)- Entfernen der versehentlichen Iteratorzuweisung in
snapshotFlow(231e56) - Aktivieren Sie
nonSkippingGroupOptimizationfü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 werden. I(acbc08)
Version 1.7.0-alpha03
21. Februar 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha03 ist 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)
- Speicherleck im Composer behoben (0e097d)
ScopeMapverwenden, um beim Neuzusammenstellen Invalidierungen zu übergeben (e19a7e)- Die Karte mit den Invalidierungen wurde optimiert, sodass nur abgeleitete Status beibehalten werden (f11c44).
- Verwendungen von
IdentityArraySetdurchScatterSetersetzen (db572e) removeScopeinScopeMapoptimieren (bb0530)
Version 1.7.0-alpha02
7. Februar 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha02 ist 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 wieonForgottenauf. (2cd790) - Filtert geänderte Status heraus, die in
snapshotFlownicht beobachtet werden. (796b80)
Leistungsverbesserungen
- Snapshot-Beobachter direkt ändern, wenn er bereits transparent ist. (f60f30)
SnapshotIdSet.lowest()optimieren (7ae149)- Verwenden Sie in
SnapshotIdSeteine zuweisungsfreiefold(). (532b7d) - Entfernen der Iteratorzuweisung (83f96b)
Version 1.7.0-alpha01
24. Januar 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha01 ist veröffentlicht. Version 1.7.0-alpha01 enthält diese Commits.
Leistungsoptimierungen
- Möglichkeit hinzugefügt, Slots zu erstellen, nachdem eine untergeordnete Gruppe hinzugefügt wurde (b5960c)
- Optimierung der Aufzeichnung von Änderungen an Snapshot-Zuständen (28c3fe)
- Modus für starkes Überspringen aktivieren (ed1766)
Fehlerkorrekturen
- Standardparametermetadaten im intrinsischen Remember-Modell berücksichtigen (096665)
currentCompoundHashKeyin 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 ist veröffentlicht. Version 1.6.8 enthält diese Commits.
Version 1.6.7
1. Mai 2024
androidx.compose.runtime:runtime-*:1.6.7 ist veröffentlicht. Version 1.6.7 enthält diese Commits.
Version 1.6.6
17. April 2024
androidx.compose.runtime:runtime-*:1.6.6 ist veröffentlicht. Keine Änderungen seit dem letzten Release.
Version 1.6.5
3. April 2024
androidx.compose.runtime:runtime-*:1.6.5 ist 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 ist 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 ist veröffentlicht. Version 1.6.3 enthält diese Commits.
Version 1.6.2
21. Februar 2024
androidx.compose.runtime:runtime-*:1.6.2 ist veröffentlicht. Version 1.6.2 enthält diese Commits.
Version 1.6.1
7. Februar 2024
androidx.compose.runtime:runtime-*:1.6.1 ist veröffentlicht. Version 1.6.1 enthält diese Commits.
Fehlerkorrekturen
- Rufen Sie den
onRelease-Callback in derselben Reihenfolge wieonForgottenauf. (2cd790) - Filtert geänderte Status heraus, die in
snapshotFlownicht beobachtet werden. (796b80)
Version 1.6.0
24. Januar 2024
androidx.compose.runtime:runtime-*:1.6.0 ist veröffentlicht. Version 1.6.0 enthält diese Commits.
Wichtige Änderungen seit Version 1.5.0
Neue Funktionen
- Ausnahmen, die während der Neuzusammensetzungsschleife abgefangen werden, noch einmal auslösen (4dff9a)
Leistungsoptimierungen
- Optimierung der Aufzeichnung von Änderungen an Snapshot-Zuständen (28c3fe)
rememberSaveableoptimieren (f01d79)- Das erneute Lesen abgeleiteter Status wird aufgeschoben, bis Änderungen aufgezeichnet werden (f38099)
- Bereitstellung lokaler Werte für die Zusammensetzung verbessern (a337ea)
Fehlerkorrekturen
- Speicherleck in der Slot-Tabelle behoben (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 Erfassung von
$dirtyauf Inline-Lambdas. (acfca0) - Es wurde ein Fehler behoben, durch den für bewegliche Inhalte manchmal die falschen Kompositions-Locales festgelegt wurden. (035cd6)
Version 1.6.0-rc01
10. Januar 2024
androidx.compose.runtime:runtime-*:1.6.0-rc01 ist 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 ist 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 ist 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 ist veröffentlicht. Version 1.6.0-beta01 enthält diese Commits.
API-Änderungen
- Bestimmte Stabilitätswerte in Anmerkungen weitergeben. (274a4c)
Fehlerkorrekturen
- Verwenden Sie die Referenzrichtlinie für den lokalen Status der Komposition im Kontext. (83361c)
- Beschränken Sie die Erfassung von $dirty auf Inline-Lambdas. (acfca0)
- Es wurde ein Fehler behoben, durch den für bewegliche Inhalte manchmal die falschen Kompositions-Locales festgelegt wurden. (035cd6)
- Schnellere Hashmaps ohne Zuweisung in
RecomposeScopeImplverwenden. (d79494) ObjectIntMapinDerivedStateverwenden. (21862e)- Verwenden Sie
IntReffür intSnapshotThreadLocalinDerivedState. (04eaf4)
Version 1.6.0-alpha08
18. Oktober 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha08 ist 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 zuordnende Karten in
SnapshotStateObserververwenden (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 ist veröffentlicht. Version 1.6.0-alpha07 enthält diese Commits.
API-Änderungen
SnapshotStateListist jetzt alsRandomAccessgekennzeichnet, damit die Version der Listen-Helfer mit direkter Indexierung verwendet werden kann. (I5210c, b/219554654)
Version 1.6.0-alpha06
20. September 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha06 ist 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 ist 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 ist veröffentlicht. Version 1.6.0-alpha04 enthält diese Commits.
Neue Funktionen
- Ausnahmen, die während der Neuzusammensetzungsschleife abgefangen werden, noch einmal auslösen (4dff9a)
API-Änderungen
- Es wurde eine Methode zum Deaktivieren von
ReusableCompositionhinzugefügt, mit der Beobachtungen entfernt, Knoten aber beibehalten werden. Die deaktivierte Komposition kann durch Aufrufen vonsetContentwieder aktiviert werden. (Ib7f31) - Die
ReusableComposition-Schnittstelle wurde hinzugefügt, um den Lebenszyklus und die Wiederverwendung von Unterkompositionen zu verwalten. (I812d1, b/252846775)
Version 1.6.0-alpha03
9. August 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha03 ist veröffentlicht. Version 1.6.0-alpha03 enthält diese Commits.
Fehlerkorrekturen
- Fehlerbehebung bei der neuen
CompositionLocalProvider-Optimierung (3118e88) - Die Zerlegung von verschiebbaren Inhaltsknoten wird korrigiert. (5e3d59b)
Version 1.6.0-alpha02
26. Juli 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha02 ist veröffentlicht. Version 1.6.0-alpha02 enthält diese Commits.
Neue Funktionen und Leistungsverbesserungen
rememberSaveableoptimieren (f01d79)- Das erneute Lesen abgeleiteter Status wird aufgeschoben, bis Änderungen aufgezeichnet werden (f38099)
- Lokale Werte für die Zusammensetzung bereitstellen (a337ea)
SideEffectist als@ExplicitGroupsComposablemarkiert, um die Generierung einer Gruppe zu vermeiden. (I74815)- Vergleich von lokalen Karten mit Komposition bei der Wiederverwendung vermeiden (782071)
API-Änderungen
- Es wurde eine Überladung für den Sonderfall für
CompositionLocalProvidershinzugefü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 behoben (73fcfe)
- Beheben Sie, wie
rememberSaveablewiederhergestellt wird, wennstateSaver„null“ zurückgibt (90748c).
Version 1.6.0-alpha01
21. Juni 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha01 ist 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
readableHashinDerivedStatevermeiden, 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 ist veröffentlicht. Version 1.5.4 enthält diese Commits.
Version 1.5.3
4. Oktober 2023
androidx.compose.runtime:runtime-*:1.5.3 ist veröffentlicht. Version 1.5.3 enthält diese Commits.
Version 1.5.2
27. September 2023
androidx.compose.runtime:runtime-*:1.5.2 ist veröffentlicht. Version 1.5.2 enthält diese Commits.
Version 1.5.1
6. September 2023
androidx.compose.runtime:runtime-*:1.5.1 ist veröffentlicht. Version 1.5.1 enthält diese Commits.
Version 1.5.0
9. August 2023
androidx.compose.runtime:runtime-*:1.5.0 ist veröffentlicht. Version 1.5.0 enthält diese Commits.
API-Änderungen
- Zuweisungen in Recomposition, Farbanimationen und
AndroidComposeViewentfernt. (Ib2bfa) - Die Annotation
@StateFactoryMarkerwurde hinzugefügt, um Funktionen zu kennzeichnen, die Status erstellen und in einenremember-Aufruf eingeschlossen werden müssen. (I64550) - Primitive Versionen von „State“ und
MutableStatehinzufügen (fb3d89) Snapshot.isApplyObserverNotificationPendinghinzugefügt (I672a5)- Es wurden primitive Versionen der
StateAPI 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
ComposerImplnicht beibehalten (0206f7) - Zusammensetzung nicht zweimal anwenden (f5791b)
- Ungültigkeitserklärung für nicht initialisierte abgeleitete Statuswerte sicherstellen (aa2a92)
- Rufe
onEndChangeswä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
withFrameNanosanstelle 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 vonwithFrameNanoswerden jedoch blockiert. (Id9e7f, b/240975572) - Deaktivierungs-Callbacks für
LayoutNodevor dem Entfernen von Effekten ausführen 3784073 - Geänderte Flags für neu gestartete Lambdas korrigieren ea81df9
- Regressionsproblem bei der Live-Bearbeitung für Composable mit Knoten 73fd4d8 behoben
- ON_STOP sollte die Übertragungen der Frame-Clock anstelle der Komposition pausieren ae276f1
SnapshotStateObserver-Bereiche für unveränderte abgeleitete Status ungültig machen 84d9b1c- Möglichen Deadlock beim Schließen von Kompositionen beheben 28761fc
- Fehlerbehebung beim Verschieben von Inhalten in eine untergeordnete Komposition 92d4156
- Geänderte Flags für neu gestartete Lambdas korrigieren (8a03e9)
- Deaktivierungs-Callbacks für
LayoutNodevor 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
fillinSlotTable.moveSlotGapTo()und verschiebe sie in den Bereich „Schließen“ (81f9935). - Fehlende Entwertungen während der Bewegung von verschiebbaren Inhalten beheben (1d7c024)
- Sofortige Ungültigmachung für verschobene bewegliche Inhalte behoben (8676618)
Leistungsverbesserungen
- Vermeiden Sie die Berechnung von
readableHashinDerivedState, 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)
IdentityArraySetzum 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 ist 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“ zu „Warning“ (oder höher), indem Siewarning "AutoboxingStateCreation"in der build.gradle- oder build.gradle.kts-Konfiguration Ihres Moduls deklarieren, wie unten gezeigt (I34f7e):android { lint { warning "AutoboxingStateCreation" } ... }
Version 1.5.0-beta03
28. Juni 2023
androidx.compose.runtime:runtime-*:1.5.0-beta03 ist 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 ist veröffentlicht. Version 1.5.0-beta02 enthält diese Commits.
Leistungsverbesserungen
- Vermeiden Sie die Berechnung von
readableHashinDerivedState, wenn der Snapshot nicht geändert wurde. (307102)
Version 1.5.0-beta01
24. Mai 2023
androidx.compose.runtime:runtime-*:1.5.0-beta01 ist veröffentlicht. Version 1.5.0-beta01 enthält diese Commits.
API-Änderungen
- Entfernte Zuweisungen in der Neukomposition, Farbanimationen und
AndroidComposeView(Ib2bfa) - Die Annotation
@StateFactoryMarkerwurde hinzugefügt, um Funktionen zu kennzeichnen, die Status erstellen und in einenremember-Aufruf eingeschlossen werden müssen. (I64550) - Primitive Versionen von „State“ und
MutableStatehinzufügen (fb3d89) Snapshot.isApplyObserverNotificationPendinghinzugefügt (I672a5)
Fehlerkorrekturen
- Reduzierte Zuweisungen (I65c09, d7ea77, 727974 und 445808)
- Snapshot-Referenz in
ComposerImplnicht beibehalten (0206f7) - Schnelles Abbrechen des Verfassens von
CoroutineScopes(a55362 und bd382f) - Zusammensetzung nicht zweimal anwenden (f5791b)
- Ungültigkeitserklärung für nicht initialisierte abgeleitete Statuswerte sicherstellen (aa2a92)
- Rufe
onEndChangeswährend der Kompositionsentsorgung auf. (62cc8c) - Problem beim Verschieben von Inhalten in eine Unterkomposition behoben (4beb41)
- Mögliche Deadlocks beheben (c1a425
- Bei ON_STOP sollten die Frame-Clock-Broadcasts anstelle der Komposition pausiert werden (f4a2d1)
- Geänderte Flags für neu gestartete Lambdas korrigieren (8a03e9)
- Deaktivierungs-Callbacks für
LayoutNodevor dem Entfernen von Effekten ausführen (8b0fa4)
Externer Beitrag
Snapshot.isApplyObserverNotificationPendinghinzugefügt (I672a5)
Version 1.5.0-alpha04
10. Mai 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha04 ist veröffentlicht. Version 1.5.0-alpha04 enthält diese Commits.
API-Änderungen
- Es wurden primitive Versionen der
StateAPI 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
onEndChangeswährend der Kompositionsentsorgung auf. Fokus-Knoten, die währendComposition.disposeentfernt wurden, abonnierenonEndChanges, um den Fokus zurückzusetzen.(03d4a47)Sorgen Sie dafür, dass abgeleitete Statuswerte, die nicht initialisiert wurden, ungültig gemacht werden. Jeder abgeleitete Status ist mit einer Liste seiner Abhängigkeiten in
SnapshotStateObserververknü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
SnapshotStateObserverwurden 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 das Bereinigen von Abhängigkeiten neu angeordnet. So wird dafür gesorgt, 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 ist 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
withFrameNanosanstelle 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 vonwithFrameNanoswerden jedoch blockiert. (Id9e7f, b/240975572)
Fehlerkorrekturen
- Möglichen Deadlock in Snapshot-Liste und ‑Karte behoben 5c1a425
- Deaktivierungs-Callbacks für
LayoutNodevor dem Entfernen von Effekten ausführen 3784073 - Geänderte Flags für neu gestartete Lambdas korrigieren ea81df9
- Regressionsproblem bei der Live-Bearbeitung für Composable mit Knoten 73fd4d8 behoben
- ON_STOP sollte die Übertragungen der Frame-Clock anstelle der Komposition pausieren ae276f1
SnapshotStateObserver-Bereiche für unveränderte abgeleitete Status ungültig machen 84d9b1c- Möglichen Deadlock beim Schließen von Kompositionen beheben 28761fc
- Fehlerbehebung beim Verschieben von Inhalten in eine untergeordnete Komposition 92d4156
Version 1.5.0-alpha02
5. April 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha02 ist 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) IdentityArraySetzum Speichern von Snapshot-Ungültigmachungen verwenden (7f60cca)- Entferne die
fillinSlotTable.moveSlotGapTo()und verschiebe sie in den Bereich „Schließen“ (81f9935). - Fehlende Entwertungen während der Bewegung von verschiebbaren Inhalten beheben (1d7c024)
- Sofortige Ungültigmachung für verschobene bewegliche Inhalte behoben (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 ist veröffentlicht. Version 1.5.0-alpha01 enthält diese Commits.
Neue Funktionen
- Fügt
Modifier.Node#coroutineScopehinzu, damitModifier.NodesKoroutinen starten kann (I76ef9) - Ermöglichen Sie
Modifier.Nodes,CompositionLocalszu 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 ist veröffentlicht. Version 1.4.2 enthält diese Commits.
Fehlerkorrekturen
Möglichen Deadlock in Snapshot-Liste und Karte behoben 2eb6570
Wenn Sie Inhalte zu einem
SnapshotStateListoderSnapshotStateMaphinzufügen, kann es zu einem Deadlock kommen, wenn die Änderung gleichzeitig mit einem direkten Schreiben in den Statusdatensatz erfolgt. Mit den Änderungen, die durch 93fcae828b eingeführt wurden und bei denen ungenutzte Datensätze direkt freigegeben werden, ist dieses Problem deutlich wahrscheinlicher.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 ist 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 ist veröffentlicht. Version 1.4.0 enthält diese Commits.
Wichtige Änderungen seit Version 1.3.0
- Verwende den initialisierten Wert aus
LiveDatafür die erste Komposition 3680e25. - Fügen Sie
ComposeNodeLifecycleCallbackhinzu, um den Lebenszyklus von Compose-Knoten zu beobachten. 8b6a258 - Attribut
parameterTypeszuComposableMethod7b6c7ad hinzufügen
Fehlerkorrekturen und Leistungsverbesserungen
- Löschen Sie beide Bereichsindexe in
SnapshotStateObserver29f4a3e. - Gruppen hinzufügen, die im Text von nicht überspringbaren Lambdas benötigt werden 7d06752
- Verbesserung der Speicherreferenzmerkmale des Snapshot-Status 93fcae8
- Entfernen von Umrahmungen bei lokalen Kompositions-Lookups 0875717
- Richtigen Schlüssel für nicht wiederverwendbare Knotengruppen verwenden 6388d8d
SnapshotStateObservervor rekursiven und gleichzeitigen Anwendungen schützen 98cb6ba- In der Methode
IdentityArraySet„get“ wurde eine Prüfung auf Indexgrenzen hinzugefügt. 35a77d3 - Compose-Modul zur Verwendung von
ViewTreeLifecycleOwner-Erweiterungen aktualisieren 21c2122 - Benachrichtigungen für „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 ist 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 sind 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 ist veröffentlicht. Version 1.4.0-beta01 enthält diese Commits.
API-Änderungen
ComposeNodeLifecycleCallbackwurde hinzugefügt, um den Lebenszyklus von Compose-Knoten zu beobachten (I3731b).@TestOnlywurde zuComposer.disableSourceInformation()hinzugefügt, da diese Funktion nur in einem Test sicher aufgerufen werden kann. (I896c8)
Fehlerkorrekturen
- Entfernen von Umrahmungen 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 sind 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 ist veröffentlicht. Version 1.4.0-alpha04 enthält diese Commits.
API-Änderungen
- Für
TestMonotonicFrameClockwird jetzt die korrekte Testannotation verwendet. (I95c9e)
Fehlerkorrekturen
SnapshotStateObservervor rekursiven und gleichzeitigen Anwendungen schützen (d902fb)
Version 1.4.0-alpha03
7. Dezember 2022
androidx.compose.runtime:runtime-*:1.4.0-alpha03 ist veröffentlicht. Version 1.4.0-alpha03 enthält diese Commits.
API-Änderungen
- Hinzufügen einer neuen öffentlichen Methode zur Klasse
ComposableMethodanalog zujava.lang.reflect.Method#getParameterTypes()(Iab0c3)
Fehlerkorrekturen
- Benachrichtigungen zum Anwenden von Snapshots werden jetzt gesendet, nachdem
Recomposerdie Änderungen angewendet hat. (Iad6c0, b/222093277)
Version 1.4.0-alpha02
9. November 2022
androidx.compose.runtime:runtime-*:1.4.0-alpha02 ist 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 ist veröffentlicht. Version 1.4.0-alpha01 enthält diese Commits.
API-Änderungen
SnapshotStateListundSnapshotStateMaphaben 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 mitsnapshotFloweinen Fluss von Werten 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 ist 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 ist 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 ist veröffentlicht. Version 1.3.1 enthält diese Commits.
Version 1.3.0
24. Oktober 2022
androidx.compose.runtime:runtime-*:1.3.0 ist veröffentlicht. Version 1.3.0 enthält diese Commits.
Wichtige Änderungen seit Version 1.2.0
Ausnahmebehandlung / Live-Bearbeitung
- Zur besseren Unterstützung der Live-Bearbeitung 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 korrigiert, bei dem nach Markierungen gesucht wurde
- Verschieben von Inhalten in und aus SubcomposeLayout zulassen
- Problem beim Verschieben von Inhalten in neue Inhalte einer untergeordneten Komposition behoben
Snapshot-System
- Das Snapshot-System wurde in Bezug auf Speicherverwaltung, Leistung und Richtigkeit verbessert.
- Entfernung 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 statt 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 ist veröffentlicht. Version 1.3.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Das Problem mit
ArrayIndexOutOfBoundsExceptionaus der Slot-Tabelle wurde behoben (b/249076084).
Version 1.3.0-beta03
21. September 2022
androidx.compose.runtime:runtime-*:1.3.0-beta03 ist veröffentlicht. Version 1.3.0-beta03 enthält diese Commits.
Funktionsgefährdende Verhaltensänderung
- Der Parameter für
rememberundrememberCoroutineScopewurde incrossinlinegeä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 darauf hinweisen, dass nicht lokale Rückgaben aus den Lambdas entfernt werden müssen, die an diese Funktionen übergeben werden. (Ibea62)
Version 1.3.0-beta02
7. September 2022
androidx.compose.runtime:runtime-*:1.3.0-beta02 ist 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 ist veröffentlicht. Version 1.3.0-beta01 enthält diese Commits.
API-Änderungen
- Der Klasse
CompositionDatawurde 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 ist 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 ist 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 ist 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 ist 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 ist veröffentlicht. Version 1.2.0 enthält diese Commits.
Wichtige Änderungen seit 1.1.0
In Compose Runtime 1.2.0 wurden einige Funktionen eingeführt und viele stabilisierende Fehler behoben. Die wichtigste Neuerung war die Einführung der
movableContentOfAPI, mit der sich komplexe Benutzeroberflächen wie Übergänge zwischen gemeinsamen Elementen ermöglichen lassen. DiemovableContentOfAPI konvertiert eine zusammensetzbare Lambda-Funktion in eine Lambda-Funktion, die ihren Status und die entsprechenden Knoten an jeden neuen Speicherort verschiebt, an dem sie 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. Es wurden verschiedene Speicherlecks 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
- Recomposition-Tracing in Compose
Leistung in 1.2
- Lokale Leistung von Kompositionen verbessern
- Baseline-Profile für Compose sollten anhand von Benchmarks abgeleitet werden.
Fehlerkorrekturen in 1.2
- Tracking-Informationen aus Bereichen für die Neukomposition 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 ist 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 noch 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 ist 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 ist veröffentlicht. Version 1.2.0-rc01 enthält diese Commits.
API-Änderungen
- Schnittstellen in Compose-Bibliotheken werden jetzt mit JDK8-Standard-Schnittstellenmethoden erstellt (I5bcf1).
Version 1.2.0-beta03
1. Juni 2022
androidx.compose.runtime:runtime-*:1.2.0-beta03 ist 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 ist 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 ist 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/unsafeLeavewurde hinzugefügt. (I108f3) - Experimentelle
Snapshot.asContextElement()API wurde hinzugefügt. (Iff072) - Die Annotation
@ComposableTargetund mit@ComposableTargetMarkergekennzeichnete Annotationen können jetzt mit dem Präfix@fileauf 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:UiComposableverwenden, 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 ist veröffentlicht. Version 1.2.0-alpha08 enthält diese Commits.
API-Änderungen
TracingInProgresswurde derCompositionTracer-Schnittstelle hinzugefügt. (Ic6f12)recomposeScopeIdentityzu Composer hinzufügen (I0c873)- Eingeschränkte Tracing-APIs (Composer.setTracer) auf
OptIn(InternalComposeTracingApi). (I9187f) ResuableContentHostwurde 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 es werden beispielsweise alle Einmaleffekte ausgelöst. (I2c0f2, b/220322704)
Version 1.2.0-alpha07
6. April 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha07 ist 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 Snapshot-basierten threadsicheren Schreib-/Lesevorgängen profitieren möchten, den Wert aber lesen möchten, ohne unnötige Neuzusammenstellungen oder ‑messungen zu verursachen. (I9f365, b/214054486)
Version 1.2.0-alpha06
23. März 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha06 ist 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 ist veröffentlicht. Version 1.2.0-alpha05 enthält diese Commits.
Externer Beitrag
- Aktualisiert auf Kotlinx-Coroutines 1.6.0 (I3366d)
Version 1.2.0-alpha04
23. Februar 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha04 ist veröffentlicht. Version 1.2.0-alpha04 enthält diese Commits.
API-Änderungen
Die Funktionen
ComposableTarget,ComposableTargetMarkerundComposableOpenTargetwurden 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
ComposeNodeoder eine zugehörige zusammensetzbare Funktion verwendet wird.Bei benutzerdefinierten Appliern muss für die zusammensetzbaren Funktionen, die
ComposeNodeoderReusableComposeNodeaufrufen, die AnnotationCompoableTargetfür die Funktion und alle zusammensetzbaren Lambda-Parametertypen hinzugefügt werden. Es wird jedoch empfohlen, eine Annotation zu erstellen, die mitComposableTargetMarkerannotiert ist, und dann die markierte Annotation anstelle vonComposableTargetdirekt zu verwenden. Eine mitComposableTargetMarkermarkierte zusammensetzbare Annotation entspricht einemComposbleTargetmit dem voll qualifizierten Namen der Attributklasse als Applier-Parameter. Ein Beispiel für die Verwendung vonComposableTargetMarkerfinden Sie unteranroidx.compose.ui.UiComposable. (I38f11)
Version 1.2.0-alpha03
9. Februar 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha03 ist veröffentlicht. Version 1.2.0-alpha03 enthält diese Commits.
API-Änderungen
movableContentOfwurde 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 Status, die nicht durch neue Aufrufe beansprucht werden, werden dauerhaft entfernt. (Ib4850)Der Komposition wurde eine Tracing-API hinzugefügt, damit Tools detailliertere Traces von 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
InternalComposeScopehinzu, damit Tools ein Composable bei Recompositions identifizieren können. (I07a3f)
Version 1.2.0-alpha02
26. Januar 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha02 ist 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 ist veröffentlicht. Version 1.2.0-alpha01 enthält diese Commits.
API-Änderungen
- Das Feld
identitywurdeCompositionDatahinzugefügt, um im Layout Inspector unveränderliche IDs zu generieren. (Ic116e)
Abhängigkeitsupdates
- Hängt jetzt von Kotlin
1.6.10ab.
Version 1.1
Version 1.1.1
23. Februar 2022
androidx.compose.runtime:runtime-*:1.1.1 ist veröffentlicht. Version 1.1.1 enthält diese Commits.
Fehlerkorrekturen
- Fehler bei
NullPointerExceptionunterandroidx.compose.ui.platform.RenderNodeLayer.updateDisplayListbeheben (aosp/1947059, b/206677462) - Ein Absturzproblem wurde behoben, das durch Zwischenablageinhalte beim Lesen aus der Zwischenablage unter Android verursacht wurde. (I06020, b/197769306)
- RTL-Problem in
LazyVerticalGridbehoben (aosp/1931080, b/207510535)
Version 1.1.0
9. Februar 2022
androidx.compose.runtime:runtime-*:1.1.0 ist 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 in 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
48x48dperweitert, 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.
- Support für neuere Versionen von Kotlin
Version 1.1.0-rc03
26. Januar 2022
androidx.compose.runtime:runtime-*:1.1.0-rc03 ist veröffentlicht. Version 1.1.0-rc03 enthält diese Commits.
Fehlerkorrekturen
- Aktualisiert, um Compose Material
1.1.0-rc03zu unterstützen
Version 1.1.0-rc01
15. Dezember 2021
androidx.compose.runtime:runtime-*:1.1.0-rc01 ist 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 ist veröffentlicht. Version 1.1.0-beta04 enthält diese Commits.
Neue Funktionen
- Aktualisiert, um mit Kotlin
1.6.0kompatibel zu sein
Version 1.1.0-beta03
17. November 2021
androidx.compose.runtime:runtime-*:1.1.0-beta03 ist 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 ist 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 ist 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 ist veröffentlicht. Version 1.1.0-alpha06 enthält diese Commits.
API-Änderungen
InternalCompilerApiaus Composer-Methoden entfernt, die modulübergreifend aufgerufen werden müssen (I1aa0b)Recomposer.statewurde eingestellt und durchRecomposer.currentStateersetzt, 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 ist 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 ist 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 ist 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-alpha03wurde aktualisiert und hängt jetzt von Kotlin1.5.30ab. (I74545)
Version 1.1.0-alpha02
18. August 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha02 ist 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 ist 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 ist 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 ist veröffentlicht. Version 1.0.4 enthält diese Commits.
Abhängigkeitsupdates
- Aktualisiert, um von Kotlin
1.5.31abhängig zu sein
Version 1.0.3
29. September 2021
androidx.compose.runtime:runtime-*:1.0.3 ist veröffentlicht. Version 1.0.3 enthält diese Commits.
Abhängigkeitsupdates
- Aktualisiert, um von Kotlin
1.5.30abhängig zu sein
Version 1.0.2
1. September 2021
androidx.compose.runtime:runtime-*:1.0.2 ist veröffentlicht. Version 1.0.2 enthält diese Commits.
Aktualisiert, um die Compose-Version 1.0.2 zu unterstützen. 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 ist veröffentlicht. Version 1.0.1 enthält diese Commits.
Abhängigkeitsupdates
- Die Abhängigkeit wurde auf Kotlin
1.5.21aktualisiert.
Version 1.0.0
28. Juli 2021
androidx.compose.runtime:runtime-*:1.0.0 ist 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-Versionsblog.
Bekannte Probleme
Wenn Sie Android Studio Bumblebee Canary 4 oder AGP
7.1.0-alpha04/7.1.0-alpha05verwenden, 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.1behoben. (b/194289155)
Version 1.0.0-rc02
14. Juli 2021
androidx.compose.runtime:runtime-*:1.0.0-rc02 ist 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 ist 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 ist 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.txtangegeben, die sich im Verzeichnissrc/mainoder 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,SundP, 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.SlotTablehä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(): BooleanfürLayoutNodehat 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
Hist eine „heiße“ Methode und sollte vorab kompiliert werden.Eine Methode mit dem Flag
Swird 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
Pwird 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 eine bestimmte Teilmenge der Anwendung vorab zu kompilieren und so die Leistung der Anwendung zu verbessern, insbesondere beim ersten Ausführen. Beachten Sie, dass dies keine Auswirkungen auf debugfähige Anwendungen hat.
Version 1.0.0-beta08
2. Juni 2021
androidx.compose.runtime:runtime-*:1.0.0-beta08 ist veröffentlicht. Version 1.0.0-beta08 enthält diese Commits.
API-Änderungen
State<T>heißt jetztState<out T>(I69049)ControlledCompositionAPI-Änderung, um das Neuzusammenstellen von Änderungen in einem einzelnen Durchlauf zu ermöglichen. (Iaafd1, b/184173932)
Version 1.0.0-beta07
18. Mai 2021
androidx.compose.runtime:runtime-*:1.0.0-beta07 ist 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
ReusableContentein, 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. Ausgenommen sind die generierten Knoten und die Werte, die zum Aktualisieren der Knoten verwendet wurden.Führt
ReusableComposeNodeein, mit dem der ausgegebene Knoten wiederverwendet wird, anstatt ihn wie beiComposeNodezu ersetzen. (I1dd86)@ComposeCompilerApinicht mehr@RequiresOptIn(Iab690)
Fehlerkorrekturen
- In LazyColumn/Row bleiben jetzt bis zu zwei zuvor sichtbare Elemente aktiv (werden nicht verworfen), auch wenn sie bereits aus dem Bild gerollt 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 ist veröffentlicht. Version 1.0.0-beta06 enthält diese Commits.
API-Änderungen
@ComposeCompilerApinicht mehr@RequiresOptIn(Iab690)
Version 1.0.0-beta05
21. April 2021
androidx.compose.runtime:runtime-*:1.0.0-beta05 ist veröffentlicht. Version 1.0.0-beta05 enthält diese Commits.
API-Änderungen
@InternalComposeApifür das Lesen und Schreiben von Aufnahmesnapshots entfernt (Id134d)
Fehlerkorrekturen
- Die AndroidManifest-Dateien von 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 ist 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, da 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
ShowCountimmer übersprungen, auch nachdem der Parametercountaktualisiert wurde. Diese Änderungen haben wir jedoch nicht vorgenommen (I5648a)Das Problem, bei dem
rememberSaveable()den alten Wert wiederhergestellt hat, wenn es mit Eingabeparametern verwendet wurde (I1b110, b/182403380), wurde behoben.
Version 1.0.0-beta03
24. März 2021
androidx.compose.runtime:runtime-*:1.0.0-beta03 ist veröffentlicht. Version 1.0.0-beta03 enthält diese Commits.
API-Änderungen
DefaultMonotonicFrameClockist veraltet. Wenn SiewithFrameNanosoderRecomposer.runRecomposeAndApplyChangesohneMonotonicFrameClockaufrufen, wird jetztIllegalStateExceptionausgegeben. (I4eb0d)
Version 1.0.0-beta02
10. März 2021
androidx.compose.runtime:runtime-*:1.0.0-beta02 ist 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 ist 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ügen Sie
Recomposer.runRecomposeConcurrentlyAndApplyChangeshinzu, 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
defaultFactoryfürcompositionLocalOfundstaticCompositionLocalOfist 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 ohne Nullwerte bereitgestellt.
Für Typen mit zulässigen Nullwerten sollten Sie
{ null }als Standard-Factory angeben.Wir raten davon ab, lokale 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
defaultFactoryeine 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 wird nicht mehr unterstützt.
- currentCompositeKeyHash wurde in eine zusammensetzbare Property der obersten Ebene anstelle einer zusammensetzbaren Funktion der obersten 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 ein Interface 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 sein.
- (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 Top/BottomAppBar wurde der Parameter „contentPadding“ 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.
- Der Parameter
iconin BottomNavigationItem wurde nachselectedundonClickverschoben. - Der Parameter
alwaysShowLabelsin BottomNavigationItem wurde inalwaysShowLabelumbenannt. bodyContent-Parameter in einigen Komponenten wurden incontentumbenannt.- Die Parameter in
ButtonDefaults.buttonColors()wurden neu angeordnet. 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 mehr wie zuvor funktioniert. - Der Parameter
secondaryVariantwurde zudarkColors()hinzugefügt. Diese Farbe ist in der Regel dieselbe wiesecondaryim dunklen Design. 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.
onValueChangeEndinSliderwurde inonValueChangeFinishedumbenannt und als „nullable“ festgelegt.- Der Parameter
textinSnackbarwurde aus Konsistenzgründen incontentumbenannt. - Der Parameter
contentPaddingwurde zuDropdownMenuItemhinzugefügt, um das Anpassen des Standardabstands zu ermöglichen. Außerdem istcontentjetzt eine Erweiterung vonRowScope. ModalDrawerLayoutwurde inModalDrawerumbenannt.BottomDrawerLayoutwurde inBottomDrawerumbenannt.- (I1cc66)
Version 1.0.0-alpha12
10. Februar 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha12 ist 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 aus 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“ umbenannt und „ambientOf“ / „staticAmbientOf“ in „compositionLocalOf“ / „staticCompositionLocalOf“. 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
Localhaben, z. B. val LocalFoo = compositionLocalOf { Foo() }. (Ia55b6) - „takeMutableSnapshot“ und „takeSnapshot“ sind jetzt Companion-Methoden von „Snapshot“. (I91f19)
@ComposableContractwurde 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).
snapshotFlowundwithMutableSnapshotsind nicht mehr experimentell (I6a45f)Recomposers können jetzt geschlossen werden. Geschlossene Recomposers führen die Recomposition so lange fort, bis die untergeordneten Coroutinen 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 Benutzeroberfläche 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 Animationsticks werden pausiert, während der Lebenszyklus des Hosts angehalten wird. (I38e11)
Recomposer.runningRecomposers bietet jetzt einen globalen StateFlow von schreibgeschützten RecomposerInfo-Objekten, mit dem der laufende Kompositionsstatus im Prozess beobachtet werden kann. Diese API wird gegenüber Recomposer.current() bevorzugt, da diese jetzt eingestellt ist. (If8ebe)
„DisposableEffectDisposable“ wurde in „DisposaleEffectResult“ umbenannt (I3ea68).
Version 1.0.0-alpha11
28. Januar 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha11 ist veröffentlicht. Version 1.0.0-alpha11 enthält diese Commits.
API-Änderungen
- „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.
RememberObserverist ein Ersatz fürCompositionLifecycleObservermit 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, wirdonRememberedfür jeden Verweis aufgerufen, währendonEnternur einmal aufgerufen wird.onEnterwurde mehrmals aufgerufen, wenn das Objekt in untergeordneten Kompositionen wieWithConstraintsundScaffoldverwendet wurde. Dadurch war der einzelneonEnter-Aufruf nicht mehr zuverlässig und wurde fürRememberObserverentfernt.RememberObserverfügtonAbandonedhinzu, das aufgerufen wird, wenn dieRememberObserver-Instanz vom Callback zurückgegeben wird, der anrememberübergeben wurde, aber nicht im Kompositionsstatus gespeichert wurde und daher nieonRememberedaufgerufen wird. Das kann passieren, wenn die Komposition durch eine Ausnahme beendet wird, bevor sie abgeschlossen ist, 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 einen einzelnen Verweis oben folgt, eine externe Ressource verfolgt, geben sowohlonForgottenals auchonAbandonedan, dass die Ressource nicht mehr benötigt wird. Wenn mit dem Objekt Arbeit verfolgt wird, die inonRememberedbegonnen oder Ressourcen zugewiesen wurden, kannonAbandonedignoriert werden, da es nicht aufgerufen wird, wennonRememberedaufgerufen wird. (I02c36)Markieren Sie
collectAsState()-Funktionen nicht als Inline-Funktionen (Ia73e4).
Fehlerkorrekturen
- WithConstraints wurde als BoxWithConstraints überarbeitet und in 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 ist 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 durch die 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 eine
SideEffect-Composable einfügen, 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 Recomposers 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 ist veröffentlicht. Version 1.0.0-alpha09 enthält diese Commits.
API-Änderungen
SlotTable, SlotReader und SlotWriter wurden aus der öffentlichen API entfernt. Sie waren zuvor als „InternalComposeAPI“ gekennzeichnet. Sie sind jetzt intern im Modul „E-Mail verfassen“.
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-Benutzeroberfläche 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 bearbeiteten Baum ein. Dazu verwendet er je nach Leistung
insertTopDown()oderinsertBottomUp().Einige Bäume, z. B.
LayoutNodeundView, 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 die Bottom-up-Methode zu implementieren. Dieser musste in jeden Applier kopiert werden, der eine Bottom-up-Konstruktion für die Leistung benötigte. Mit dieser Änderung wirdApplierdurchinsertBottomUp()ü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 ist veröffentlicht. Version 1.0.0-alpha08 enthält diese Commits.
API-Änderungen
- Es wurde ein Lint-Check 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
childrenals Namen für ihr nachgestelltes Lambda verwenden, gemäß Lint-Prüfung und Anleitung zucontentmigriert. (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
Ambientersetzt und neue Eigenschaften mit dem Präfix „Ambient“ eingeführt, die den anderen Ambients und 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 ist 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 aus Konsistenzgründen mit den APIs „SideEffect“ und „DisposableEffect“ in „LaunchedEffect“ umbenannt. 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)
Externer Beitrag
- Das Modul
runtime-rxjava3fü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 ist 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“ mit Parametern, aber mit einem erforderlichen „onDispose“ übernimmt.
- 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 die zusammensetzbare Funktion onCommit ersetzen. (Ia77c2)
- Neue experimentelle API „RestorableStateHolder“ Damit kann der mit [savedInstanceState] und [rememberSavedInstanceState] definierte Status für den Unterbaum 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 ist veröffentlicht. Version 1.0.0-alpha05 enthält diese Commits.
API-Änderungen
- Experimenteller Modifier.pointerInput-Modifier, der die Eingabe unterbricht (Ia77d2)
- Die Scrollleistung von LazyColumn/Row wurde verbessert, da 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 ist veröffentlicht. Version 1.0.0-alpha04 enthält diese Commits.
API-Änderungen
- „OwnerScope“ wurde hinzugefügt, um die Erfassung von Bereichen für Layout- und Zeichenbeobachtungen 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 ist veröffentlicht. Version 1.0.0-alpha03 enthält diese Commits.
API-Änderungen
CompositionCoroutineScopeimplementiertMonotonicFrameClocknicht mehr. Aufrufer vonwithFrameNanossollten die Funktion der obersten Ebene explizit importieren. (Icb642, b/166778123)
Fehlerkorrekturen
- Globale Testfunktionen wie
onNodeoderwaitForIdlesind jetzt veraltet. Migrieren Sie zu den neuen Gegenstücken, die in ComposeTestRule definiert sind (I7f45a). launchInCompositionstartet keine Koroutinen mehr ohne Dispatcher (Ief6af, b/166486000)
Version 1.0.0-alpha02
2. September 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha02 ist veröffentlicht. Version 1.0.0-alpha02 enthält diese Commits.
API-Änderungen
snapshotFlow- undwithMutableSnapshot-APIs zum Abrufen und Erstellen von Snapshot-Datenänderungen hinzugefügt. (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 ist 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 ist 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()(I80ba6) zu reduzieren.Die zusammensetzbare Funktion
state { ... }wird jetzt nicht mehr unterstützt. Stattdessen werden zur besseren Übersichtlichkeit explizite Aufrufe vonremember { mutableStateOf(...) }verwendet. 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 innerhalb 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
emitViewwurde eingestellt. Verwenden Sie nach MöglichkeitAndroidView, um Views in Compose auszugeben. Das direkte Zusammensetzen von Ansichten und Ansichtsgruppen wird in Zukunft nicht mehr unterstützt, es sei denn, es handelt sich um 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 ist 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 daher geändert, um mitmutableStateOf()übereinzustimmen.Die Verwendung der strukturellen Gleichheit entspricht eher den Erwartungen von Entwicklern.
Beispiel:
val state = mutableStateOf(1f)gefolgt von
state.value = 1fwird nicht mehr als Änderung an
statebetrachtet und die Verwendung vonstatewä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 einermutableStateOf()zugewiesen sind.Das bisherige Verhalten kann wiederhergestellt werden, indem Sie den Richtlinienparameter
policy = referentialEqualityPolicy()zu Aufrufen vonmutableStateOf(),ambientOf()undsavedInstanceStateOf()hinzufügen. (Ic21a7)RowundColumnsind 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 dem 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 vollständig ü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 ist veröffentlicht. Version 0.1.0-dev15 enthält diese Commits.
Aktualisierung von Abhängigkeiten
- Wenn Sie die
0.1.0-dev15-Version von Compose verwenden möchten, müssen Sie Ihre Abhängigkeiten gemäß den neuen Code-Snippets aktualisieren, die oben unter Abhängigkeiten deklarieren aufgeführt sind.
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 Folgendes:
- Reduziert die API-Oberfläche und die Konzepte, die wir vermitteln müssen
- Es ist besser auf andere vergleichbare Toolkits (Swift UI, React, Flutter) abgestimmt.
- Die Entscheidung kann rückgängig gemacht werden. Wir können
@Modelspäter jederzeit wieder einführen. - Entfernt Grenzfälle und schwer zu beantwortende Fragen zur Konfiguration von
@Modelals 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 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
@Modellassen 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. Im Grunde müssen Sie alle bisherigen
var-Properties inval-Properties einer Datenklasse umwandeln und dannstateanstelle vonrememberverwenden. Weisen Sie den Statuswert den geklonten Kopien des Originals mit der Datenklassecopy(...)-Hilfsmethode 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
mutableStateOfAPI 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 mitmutableStateOfals 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 angezeigt werden, 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. Parameter, die zur Kompilierungszeit 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 die Laufzeit 4 muss weniger Arbeit leisten. 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 Überladungen von
key, die keine Varargs verwenden, wurden entfernt. Verwenden Sie ab sofort die Versionvararg. 5. Die Anmerkung „Pivotal“ 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 Bereinigung von Kompositionen ist jetzt eine clear()-Methode 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 einen verwalteten CoroutineScope in der Komposition zu erhalten, mit dem Jobs als Reaktion auf Ereignisse gestartet werden können. (I0e264)
MutableVector ist eine neue Sammlung, die keines der Standard-Collection-Interfaces implementiert. Diese Sammlung bietet Geschwindigkeit über andere Anforderungen hinweg und ist nur für die interne Implementierung vorgesehen. (I8ebd6)
StableMutableListundStableMutableMapwurden vorübergehend entfernt, um ein Problem in der Version von Kotlin zu vermeiden, die für Compose erforderlich ist. Diese Schnittstellen werden wieder eingeführt, sobald Compose auf eine Version von Kotlin aktualisiert wird, in der das Problem nicht auftritt.SnapshotStateListundSnapshotStateMapsind jetzt öffentlich, werden aber eingestellt, sobaldStableMutableListundStableMutableMapwiederhergestellt 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 die zugehörigen 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 die Bedeutung dieser Klasse in Stacktraces (I7eb25) besser zu vermitteln.
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 ein (I5205a, b/158123804)
Das Recompose-Composable ist keine nützliche Abstraktion mehr. Die meisten Neuzusammensetzungen sollten durch Zuweisungen von MutableState erfolgen. Für alles darüber hinaus wird empfohlen, die Funktion
invalidatezu verwenden, um eine Neuzusammensetzung des aktuellen Bereichs auszulösen. (Ifc992)„Beobachten“ 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)
Die Operatoren für die Delegierung von [Mutable]-Zustandseigenschaften wurden in Erweiterungen verschoben, um die Optimierungen der Kotlin 1.4-Eigenschaftsdelegierung 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. „Compose.composeInto“ wurde eingestellt. Verwende stattdessen
setContentodersetViewContent. Die Funktion „Compose.disposeComposition“ wurde eingestellt. Verwenden Sie stattdessen die Methodedisposefür das vonsetContentzurü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_PARAMwurde intruegeä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 den Ambient-APIs. 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 der beste Standardwert, z. B. wenn Sie eine Liste haben. In diesem Fall ist es besser, mit „emptyList()“ oder einem anderen angemessenen Standardwert 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
runOnIdleComposewurde inrunOnIdleumbenannt (I83607)- LayoutNode-API als experimentell gekennzeichnet (I4f2e9)
- „androidx.ui.foundation.TextFieldValue“ und „androidx.ui.input.EditorValue“ wurden eingestellt. 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)
- Höherwertige Compose-APIs wurden aktualisiert, um CanvasScope anstelle von Canvas zu verwenden. 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 API für die nachgestellte Lambda-Funktion „WithConstraints“ 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).
- Der Modifikator für symmetrisches Padding wurde 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)
- „background“ wurde in „DrawBackground“ umbenannt und wird standardmäßig gespeichert (Ia0bd3).
- ButtonStyle wurde durch separate Funktionen ersetzt und die Textüberladung (String) wurde entfernt. In den aktualisierten Beispielen finden Sie Informationen zur Verwendung. (If63ab, b/146478620, b/146482131)
runOnIdleComposeundrunOnUiThreadsind jetzt globale Funktionen anstelle von Methoden für ComposeTestRule. (Icbe8f)
Externer Beitrag
- Entfernen Sie unnötige APIs wie Looper und Handler aus der Compose Runtime-Portierungsebene (I6847d).
Flow<T>.collectAsState()ohne Anfangswert einstellen. Verwenden Sie stattdessenStateFlow<T>oder übergeben Sie einen expliziten Anfangswert. (I63f98, b/157674865)