Compose Runtime
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshots
(API-Referenzdokumente für alle Compose-Pakete ansehen)
Letzte Aktualisierung | Stabile Version | Release Candidate | Beta-Ausgabe | Alphaversion |
---|---|---|---|---|
13. November 2024 | 1.7.5 | - | - | 1.8.0-alpha06 |
Struktur
Compose ist eine Kombination aus sieben Maven-Gruppen-IDs in androidx
. Jede Gruppe enthält eine gezielte Teilmenge von Funktionen, für die jeweils eigene Release-Notes gelten.
In dieser Tabelle werden die Gruppen und Links zu den einzelnen Versionshinweisen erläutert.
Gruppe | Beschreibung |
---|---|
compose.animation | Sie können Animationen in ihren Jetpack Compose-Anwendungen erstellen, um die Nutzerfreundlichkeit zu verbessern. |
compose.compiler | @Composable-Funktionen transformieren und Optimierungen mit einem Kotlin-Compiler-Plug-in aktivieren |
compose.foundation | Erstellen Sie Jetpack Compose-Anwendungen mit vorgefertigten Bausteinen und erweitern Sie die Grundlage, um eigene Designsystem-Elemente zu erstellen. |
compose.material | Erstellen Sie Jetpack Compose-UIs mit vorgefertigten Material Design-Komponenten. Dies ist der übergeordnete Einstiegspunkt von Compose. Er wurde entwickelt, um Komponenten bereitzustellen, die denen auf www.material.io entsprechen. |
compose.material3 | Erstellen Sie Jetpack Compose-UIs mit Material Design 3-Komponenten, der nächsten Weiterentwicklung von Material Design. Material 3 umfasst aktualisierte Themen und Komponenten sowie Personalisierungsfunktionen von Material You wie dynamische Farben. Es wurde so konzipiert, dass es zum neuen visuellen Stil und zur System-UI von Android 12 passt. |
compose.runtime | Grundlegende Bausteine des Programmiermodells und der Statusverwaltung von Compose sowie die Kernlaufzeit, auf die das Compose-Compiler-Plug-in ausgerichtet ist. |
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 erforderlichen Artefakte hinzu:
Groovy
dependencies { implementation "androidx.compose.runtime:runtime:1.7.5" implementation "androidx.compose.runtime:runtime-livedata:1.7.5" implementation "androidx.compose.runtime:runtime-rxjava2:1.7.5" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.runtime:runtime:1.7.5") implementation("androidx.compose.runtime:runtime-livedata:1.7.5") implementation("androidx.compose.runtime:runtime-rxjava2:1.7.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. Bitte teilen Sie uns mit, wenn Sie neue Probleme feststellen oder Ideen zur Verbesserung dieser Bibliothek haben. Sehen Sie sich die vorhandenen Probleme in dieser Bibliothek an, bevor Sie ein neues erstellen. Sie können einem vorhandenen Problem Ihre Stimme geben, indem Sie auf die Schaltfläche mit dem Stern klicken.
Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.
Runtime Tracing Version 1.7
Version 1.7.0-rc01
18. September 2024
androidx.compose.runtime:runtime-tracing:1.7.0-rc01
wird veröffentlicht. Version 1.7.0-rc01 enthält diese Commits.
Laufzeit-Tracing-Version 1.0
Version 1.0.0-beta01
29. November 2023
androidx.compose.runtime:runtime-tracing:1.0.0-beta01
wird veröffentlicht. Version 1.0.0-beta01 enthält diese Commits.
Version 1.0.0-alpha05
15. November 2023
androidx.compose.runtime:runtime-tracing:1.0.0-alpha05
wird veröffentlicht. Version 1.0.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
- Abhängigkeiten auf die niedrigsten unterstützten stabilen Versionen (z.B. compose-runtime und tracing-perfetto) angepinnt – dadurch wurde ein Problem behoben, bei dem durch compose-runtime-tracing eine neuere Version von compose-runtime in die App aufgenommen wurde.
Version 1.0.0-alpha04
23. August 2023
androidx.compose.runtime:runtime-tracing:1.0.0-alpha04
wird veröffentlicht. Version 1.0.0-alpha04 enthält diese Commits.
Neue Funktionen
- Kompatibel mit den neuesten Versionen von Benchmark und Tracing Perfetto, sodass die Zusammensetzungsaufzeichnung beim Starten der App (Kaltstart) unterstützt wird, z.B. in AndroidX Benchmark und Android Studio (ab Hedgehog Beta 2).
API-Änderungen
androidx.tracing.perfetto.Trace
wurde inandroidx.tracing.perfetto.PerfettoSdkTrace
umbenannt. (I44af8)- Perfetto SDK-APIs für das Tracing mit
android.os.Trace
in Einklang bringen (I73ba0, b/282199917) - Voraussetzungen für die Analyse beim Starten der App (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
wird veröffentlicht. Version 1.0.0-alpha02 enthält diese Commits.
Neue Funktionen
- Keine funktionalen Änderungen. Mehrere Leistungsoptimierungen in nachgeordneten Abhängigkeiten
androidx.tracing:tracing-perfetto*
.
Version 1.0.0-alpha01
7. September 2022
androidx.compose.runtime:runtime-tracing:1.0.0-alpha01
wird veröffentlicht. Version 1.0.0-alpha01 enthält diese Commits.
Neue Funktionen
androidx.compose.runtime:runtime-tracing
ist eine Bibliothek, die bei entsprechender Unterstützung durch Tools (demnächst verfügbar) erweitertes Tracing in einer Compose-Anwendung ermöglicht. Diese erste Version ist 1.0.0-alpha01.
Version 1.8
Version 1.8.0-alpha06
13. November 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha06
wird veröffentlicht. Version 1.8.0-alpha06 enthält diese Commits.
API-Änderungen
- Änderungen an der
PausableComposition
API. Diese Änderungen sind in Bezug auf vorherige Releases von 1.8.0-alpha (seit 1.8.0-alpha02) bahnbrechend. Da es sich jedoch um neue APIs in 1.8.0 handelt, ist die Abwärtskompatibilität nicht gegeben, da die APIs noch in der Alphaphase sind. (I39819) - Es wurden Tool-APIs hinzugefügt, um die Erstellung neuer Kompositionen in einem Recomposer zu beobachten (Iaeb7e).
snapshotId
vom TypLong
wurde zuSnapshot
hinzugefügt undid
wurde verworfen. Die ID eines Snapshots wurde vonInt
inLong
geändert, um zu verhindern, dass die Snapshot-ID auf Systemen mit sehr hohen Frameraten und lang laufenden Animationen überläuft. Der Typ wurde als „erwartet“/„tatsächlich“ festgelegt, damit er auf Plattformen ohne nativenLong
-TypInt
oder ein anderer Typ sein kann. Bei Plattformen ohne nativeLong
, z. B. JavaScript, sollten hohe Frameraten (über 1.000 FPS) vermieden werden, da dies ungefähr alle 24 Stunden zu einem Überlauf beiInt
führen würde. (I38ac3, b/374821679)
Fehlerkorrekturen
providesDefault
wurde auf eine einzelneprovides
festgelegt. (aosp/3318540 b/374263387)- Optimieren Sie
ChangeList
. (3318538)
Version 1.8.0-alpha05
30. Oktober 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha05
wird veröffentlicht. Version 1.8.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
- Stack-Overflow-Problem beheben, indem
Int.MAX_VALUE
zuSnapshotIdSet
hinzugefügt wird (b/370536104, Ic4179f6) - Laufzeit-Mikrooptimierungen (I50c60)
- R8 darf Aufrufe von runtimeCheck zum Debuggen entfernen (I8c44)
compoundKeyOf
iterativ statt rekursiv machen (I5817f)
Externer Beitrag
- Stapel mit Sammlungslisten implementieren (I7d47c)
Version 1.8.0-alpha04
16. Oktober 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha04
wird veröffentlicht. Version 1.8.0-alpha04 enthält diese Commits.
Leistungsverbesserungen
- Snapshot-ID für Statuseinträge im Konstruktor angeben (85c00f)
SnapshotState***
umstrukturieren, um Fehler bei der Klassenüberprüfung zu vermeiden (6ee4a6)- R8-Regeln korrigieren, um das Einfügen von Throw-Anweisungen zu verhindern (5beb92)
- Vorgänge mikrooptimieren (d73c5c)
SynchronizedObject
-Zuweisungen in der JVM optimieren (2b043f)
Version 1.8.0-alpha03
2. Oktober 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha03
wird veröffentlicht. Version 1.8.0-alpha03 enthält diese Commits.
Leistungsverbesserungen
- Untergeordneten Kontext für
rememberCoroutineScope
(f61464) verzögert erstellenrememberCoroutineScope
wird in der Regel verwendet, um Tasks als Reaktion auf Ereignisse auszuführen, die nach der Zusammenstellung auftreten. In einigen Fällen treten diese Ereignisse möglicherweise nie auf, was zu zusätzlichen Kosten für die Erstellung und Stornierung von Jobs ohne Nutzen führt.- Legen Sie fest, dass der von
rememberCoroutineScope
zurückgegebene Bereich seinencoroutineContext
beim Zugriff verzögert erstellt. So wird das Erstellen und Abbrechen von Jobs vermieden, wenn der Bereich nie verwendet wird.
Version 1.8.0-alpha02
18. September 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha02
wird veröffentlicht. Version 1.8.0-alpha02 enthält diese Commits.
Neue Funktionen
- Es wurde
PausableComposition
hinzugefügt, mit dem eine untergeordnete Komposition erstellt werden kann, die während der Komposition pausiert und asynchron auf die Komposition angewendet werden kann. Für die Pausierung ist Compilerunterstützung erforderlich, die derzeit in Entwicklung ist. (I3394b)
Version 1.8.0-alpha01
4. September 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha01
wird veröffentlicht. Version 1.8.0-alpha01 enthält diese Commits.
Version 1.7
Version 1.7.5
30. Oktober 2024
androidx.compose.runtime:runtime-*:1.7.5
wird veröffentlicht. Version 1.7.5 enthält diese Commits.
Version 1.7.4
16. Oktober 2024
androidx.compose.runtime:runtime-*:1.7.4
wird veröffentlicht. Version 1.7.4 enthält diese Commits.
Version 1.7.3
2. Oktober 2024
androidx.compose.runtime:runtime-*:1.7.3
wird veröffentlicht. Version 1.7.3 enthält diese Commits.
Version 1.7.2
18. September 2024
androidx.compose.runtime:runtime-*:1.7.2
wird veröffentlicht. Version 1.7.2 enthält diese Commits.
Version 1.7.1
10. September 2024
- An Android-Artefakten gibt es keine Änderungen.
-desktop
Artefakte wurden entfernt und-jvmStubs
und-linuxx64Stubs
Artefakte hinzugefügt. Keines dieser Ziele ist zur Verwendung vorgesehen. Sie dienen als Platzhalter für die Arbeit mit Jetbrains Compose.
Version 1.7.0
4. September 2024
androidx.compose.runtime:runtime-*:1.7.0
wird veröffentlicht. Version 1.7.0 enthält diese Commits.
Wichtige Änderungen seit Version 1.6.0
- Es ist jetzt möglich, einen lokalen Wert für die Zusammensetzung anzugeben, der basierend auf den Werten anderer lokaler Werte für die Zusammensetzung berechnet wird. Dies kann entweder standardmäßig mit
compositionLocalWithComputedDefault()
oder durch Angabe eines Lambdas erfolgen, das zum Berechnen des Werts verwendet wird. Verwenden Sie dazuprovidesComputed
anstelle vonprovides
. - Der Wert einer lokalen Komposition kann mithilfe der Property
currentValue
der lokalen Komposition abgerufen werden, die innerhalb des Lambdas zugänglich ist, in dem der Wert berechnet wird. Dieser Wert wird anstelle voncurrent
verwendet, auf den nur in@Composable
-Funktionen zugegriffen werden kann. (Iadbc0) - Auf neu erstellte Statusobjekte kann sofort über andere Snapshots, einschließlich des globalen Snapshots, mit ihrem ursprünglichen Status zugegriffen werden. Alle nachfolgenden Änderungen sind erst sichtbar, wenn der Snapshot angewendet wird, in dem das Objekt erstellt wurde.
- Der Anfangsstatus von
mutableStateOf()
und seiner primitiven Version ist der Wert, der als Parameter anmutableStateOf()
übergeben wird. Der Anfangsstatus vonmutableStateListOf()
undmutableStateMapOf()
ist leer. - Es wurden
Snapshot.isInSnapshot
undSnapshot.PreexistingSnapshotId
hinzugefügt, mit denen ein Statusobjekt beim Erstellen sofort über den globalen Snapshot zugänglich gemacht werden kann. - Benutzerdefinierte Statusobjekte können sofort zugänglich sein, wenn Sie das Muster der Änderungen an den integrierten Snapshot-Objekten einhalten. (I84a17)
- Aktiviere
nonSkippingGroupOptimization
für Bibliotheken zum Erstellen von Inhalten. Dadurch ist der generierte Code für alle nicht neu startbaren composable-Funktionen in androidx effizienter. In Zukunft wird diese Funktion standardmäßig aktiviert. I(acbc08) - Composeable-Lambdas in Unterkompositionen im selben Frame ungültig machen (98301c)
- Rufen Sie den
onRelease
-Callback in derselben Reihenfolge wieonForgotten
auf. (2cd790) - Modus für starkes Überspringen aktivieren (ed1766)
currentCompoundHashKey
in mehr Fällen eindeutig machen (d4a872)
Version 1.7.0-rc01
21. August 2024
androidx.compose.runtime:runtime-*:1.7.0-rc01
wird veröffentlicht. Version 1.7.0-rc01 enthält diese Commits.
Version 1.7.0-beta07
7. August 2024
androidx.compose.runtime:runtime-*:1.7.0-beta07
wird veröffentlicht. Version 1.7.0-beta07 enthält diese Commits.
Version 1.7.0-beta06
24. Juli 2024
androidx.compose.runtime:runtime-*:1.7.0-beta06
wird veröffentlicht. Version 1.7.0-beta06 enthält diese Commits.
Version 1.7.0-beta05
10. Juli 2024
androidx.compose.runtime:runtime-*:1.7.0-beta05
wird veröffentlicht. Version 1.7.0-beta05 enthält diese Commits.
Version 1.7.0-beta04
26. Juni 2024
androidx.compose.runtime:runtime-*:1.7.0-beta04
wird veröffentlicht. Version 1.7.0-beta04 enthält diese Commits.
Version 1.7.0-beta03
12. Juni 2024
androidx.compose.runtime:runtime-*:1.7.0-beta03
wird veröffentlicht. Version 1.7.0-beta03 enthält diese Commits.
Version 1.7.0-beta02
29. Mai 2024
androidx.compose.runtime:runtime-*:1.7.0-beta02
wird veröffentlicht. Version 1.7.0-beta02 enthält diese Commits.
Version 1.7.0-beta01
14. Mai 2024
androidx.compose.runtime:runtime-*:1.7.0-beta01
wird veröffentlicht. Version 1.7.0-beta01 enthält diese Commits.
Version 1.7.0-alpha08
1. Mai 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha08
wird veröffentlicht. Version 1.7.0-alpha08 enthält diese Commits.
Version 1.7.0-alpha07
17. April 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha07
wird veröffentlicht. Version 1.7.0-alpha07 enthält diese Commits.
Neue Funktionen
- Es ist jetzt möglich, einen lokalen Wert für die Zusammensetzung anzugeben, der basierend auf den Werten anderer lokaler Werte für die Zusammensetzung berechnet wird. Dies kann entweder standardmäßig mit
compositionLocalWithComputedDefault()
oder durch Angabe eines Lambdas erfolgen, das zum Berechnen des Werts verwendet wird. Verwenden Sie dazuprovidesComputed
anstelle vonprovides
. - Der Wert einer lokalen Komposition kann mithilfe der Property
currentValue
der lokalen Komposition abgerufen werden, die innerhalb des Lambdas zugänglich ist, in dem der Wert berechnet wird. Dieser Wert wird anstelle voncurrent
verwendet, auf den nur in@Composable
-Funktionen zugegriffen werden kann. (Iadbc0)
API-Änderungen
- Auf neu erstellte Statusobjekte kann sofort über andere Snapshots, einschließlich des globalen Snapshots, mit ihrem ursprünglichen Status zugegriffen werden. Alle nachfolgenden Änderungen sind erst sichtbar, wenn der Snapshot angewendet wird, in dem das Objekt erstellt wurde.
- Der Anfangsstatus von
mutableStateOf()
und seiner primitiven Version ist der Wert, der als Parameter anmutableStateOf()
übergeben wird. Der Anfangsstatus vonmutableStateListOf()
undmutableStateMapOf()
ist leer. - Es wurden
Snapshot.isInSnapshot
undSnapshot.PreexistingSnapshotId
hinzugefügt, mit denen ein Statusobjekt beim Erstellen sofort über den globalen Snapshot zugänglich gemacht werden kann. - Benutzerdefinierte Statusobjekte können sofort zugänglich sein, wenn Sie das Muster der Änderungen an den integrierten Snapshot-Objekten einhalten. (I84a17)
Fehlerkorrekturen
- Das Zusammenführen von
readObserver
in verschachtelten Snapshots wurde behoben. Dies führte dazu, dass verschachtelte abgeleitete Status bei Verwendung in einemsnapshotFlow
nicht ausreichend ungültig gemacht wurden. (Idf138)
Version 1.7.0-alpha06
3. April 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha06
wird veröffentlicht. Version 1.7.0-alpha06 enthält diese Commits.
Fehlerkorrekturen
- Fehler bei der Verarbeitung einzelner Werte beheben
providesDefault
(538f45) - Vermeidung einer Deadlock-Situation im Recomposer beim Zugriff auf die Frame-Taktzeit (07e5c6)
Version 1.7.0-alpha05
20. März 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha05
wird veröffentlicht. Version 1.7.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
- Spätere Änderungen an deaktivierter Komposition löschen (5950bc)
Version 1.7.0-alpha04
6. März 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha04
wird veröffentlicht. Version 1.7.0-alpha04 enthält diese Commits.
Leistungsverbesserungen
Snapshot.current
einmal pro abgeleiteter Statusbewertung aufrufen (ee7daf)currentRecord
einmal pro Beobachtung in der Komposition lesen (b882b2)- Unnötige Iterationszuweisung in
snapshotFlow
entfernen (231e56) - Aktiviere
nonSkippingGroupOptimization
für Bibliotheken zum Erstellen von Inhalten. Dadurch ist der generierte Code für alle nicht neu startbaren composable-Funktionen in androidx effizienter. In Zukunft wird diese Funktion standardmäßig aktiviert. I(acbc08)
Version 1.7.0-alpha03
21. Februar 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha03
wird veröffentlicht. Version 1.7.0-alpha03 enthält diese Commits.
API-Änderungen
- Einführung von Replace-Gruppen zur Verbesserung der Erkennung von Änderungen (0941b5)
Leistungsverbesserungen
- Speicherzuweisung bei der Erkennung von Änderungen verbessern (53e7fd)
- Behebung eines Speicherlecks im Composer (0e097d)
ScopeMap
verwenden, um beim Neuformatieren Ungültigkeiten zu übergeben (e19a7e)- Invalidations-Map so optimieren, dass nur abgeleitete Status beibehalten werden (f11c44)
IdentityArraySet
-Verwendungen durchScatterSet
(db572e) ersetzenremoveScope
inScopeMap
optimieren (bb0530)
Version 1.7.0-alpha02
7. Februar 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha02
wird veröffentlicht. Version 1.7.0-alpha02 enthält diese Commits.
Fehlerkorrekturen
- Composeable-Lambdas in Unterkompositionen im selben Frame ungültig machen (98301c)
- Rufen Sie den
onRelease
-Callback in derselben Reihenfolge wieonForgotten
auf. (2cd790) - Filtern Sie geänderte Status heraus, die in
snapshotFlow
nicht beobachtet werden. (796b80)
Leistungsverbesserungen
- Ändern Sie den Snapshot-Beobachter an Ort und Stelle, wenn er bereits transparent ist. (f60f30)
- Optimieren Sie
SnapshotIdSet.lowest()
. (7ae149) - Verwenden Sie in
SnapshotIdSet
eine nicht zugewiesenefold()
. (532b7d) - Iteratorzuweisung entfernen (83f96b)
Version 1.7.0-alpha01
24. Januar 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha01
wird veröffentlicht. Version 1.7.0-alpha01 enthält diese Commits.
Leistungsoptimierungen
- Es ist jetzt möglich, nach dem Hinzufügen einer untergeordneten Gruppe Slots zu erstellen (b5960c).
- Optimierte Aufzeichnung von Änderungen an Snapshot-Zuständen (28c3fe)
- Modus für starkes Überspringen aktivieren (ed1766)
Fehlerkorrekturen
- Metadaten für Standardparameter bei „intrinsic remember“ berücksichtigen (096665)
currentCompoundHashKey
in mehr Fällen eindeutig machen (d4a872)- Gruppen beim Verlassen eines Inline-Funktionsaufrufs realisieren (2a90fc)
Version 1.6
Version 1.6.8
12. Juni 2024
androidx.compose.runtime:runtime-*:1.6.8
wird veröffentlicht. Version 1.6.8 enthält diese Commits.
Version 1.6.7
1. Mai 2024
androidx.compose.runtime:runtime-*:1.6.7
wird veröffentlicht. Version 1.6.7 enthält diese Commits.
Version 1.6.6
17. April 2024
androidx.compose.runtime:runtime-*:1.6.6
wird veröffentlicht. Keine Änderungen seit der letzten Version.
Version 1.6.5
3. April 2024
androidx.compose.runtime:runtime-*:1.6.5
wird veröffentlicht. Version 1.6.5 enthält diese Commits.
Version 1.6.4
20. März 2024
androidx.compose.runtime:runtime-*:1.6.4
wird veröffentlicht. Version 1.6.4 enthält diese Commits.
Version 1.6.3
6. März 2024
androidx.compose.runtime:runtime-*:1.6.3
wird veröffentlicht. Version 1.6.3 enthält diese Commits.
Version 1.6.2
21. Februar 2024
androidx.compose.runtime:runtime-*:1.6.2
wird veröffentlicht. Version 1.6.2 enthält diese Commits.
Version 1.6.1
7. Februar 2024
androidx.compose.runtime:runtime-*:1.6.1
wird veröffentlicht. Version 1.6.1 enthält diese Commits.
Fehlerkorrekturen
- Rufen Sie den
onRelease
-Callback in derselben Reihenfolge wieonForgotten
auf. (2cd790) - Filtern Sie geänderte Status heraus, die in
snapshotFlow
nicht beobachtet werden. (796b80)
Version 1.6.0
24. Januar 2024
androidx.compose.runtime:runtime-*:1.6.0
wird veröffentlicht. Version 1.6.0 enthält diese Commits.
Wichtige Änderungen seit Version 1.5.0
Neue Funktionen
- Ausnahmen, die während der Neuzusammensetzungsschleife unterdrückt werden, noch einmal werfen (4dff9a)
Leistungsoptimierungen
- Optimierte Aufzeichnung von Änderungen an Snapshot-Zuständen (28c3fe)
rememberSaveable
(f01d79) optimieren- Abgeleitete Status erst noch einmal lesen, wenn Änderungen erfasst wurden (f38099)
- Verbesserung der Bereitstellung lokaler Werte für die Zusammensetzung (a337ea)
Fehlerkorrekturen
- Speicherleck in der Steckplatztabelle behoben (73fcfe)
- Unterkompositionen, die entfernt werden, nicht neu zusammenstellen (Ieeb99, b/254645321)
RememberObserver
-Lebenszyklen nur auslösen, wenn sie in der Berechnung für „Denken“ gespeichert sind. (f6b4dc)- Beschränken Sie die
$dirty
-Aufnahme auf Inline-Lambdas. (acfca0) - Behebung eines Problems, bei dem für bewegliche Inhalte manchmal die falschen Zusammenstellungssprachen verwendet wurden. (035cd6)
Version 1.6.0-rc01
10. Januar 2024
androidx.compose.runtime:runtime-*:1.6.0-rc01
wird veröffentlicht. Version 1.6.0-rc01 enthält diese Commits.
Version 1.6.0-beta03
13. Dezember 2023
androidx.compose.runtime:runtime-*:1.6.0-beta03
wird veröffentlicht. Version 1.6.0-beta03 enthält diese Commits.
Version 1.6.0-beta02
29. November 2023
androidx.compose.runtime:runtime-*:1.6.0-beta02
wird veröffentlicht. Version 1.6.0-beta02 enthält diese Commits.
Version 1.6.0-beta01
15. November 2023
androidx.compose.runtime:runtime-*:1.6.0-beta01
wird veröffentlicht. Version 1.6.0-beta01 enthält diese Commits.
API-Änderungen
- Bestimmte Stabilitätswerte in Anmerkungen weitergeben. (274a4c)
Fehlerkorrekturen
- Verweisen Sie im Kontext auf die richtlinienbasierte Zuweisung für den lokalen Gültigkeitsbereich der Zusammensetzung. (83361c)
- Beschränken Sie die Erfassung von $dirty auf Inline-Lambdas. (acfca0)
- Behebung eines Problems, bei dem für bewegliche Inhalte manchmal die falschen Zusammenstellungssprachen verwendet wurden. (035cd6)
- Schnellere Hashmaps ohne Zuweisung in
RecomposeScopeImpl
verwenden (d79494) ObjectIntMap
inDerivedState
verwenden. (21862e)- Verwenden Sie
IntRef
für intSnapshotThreadLocal
inDerivedState
. (04eaf4)
Version 1.6.0-alpha08
18. Oktober 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha08
wird veröffentlicht. Version 1.6.0-alpha08 enthält diese Commits.
Fehlerkorrekturen
RememberObserver
-Lebenszyklen nur auslösen, wenn sie in der Berechnung für „Denken“ gespeichert sind. (f6b4dc)- Die Zuweisungen bei der Sortierung der Liste der Ungültigkeiten wurden verbessert. (954d63)
- Verwenden Sie in
SnapshotStateObserver
neue nicht zuweisbare Karten. (4303ce) - Ungültige Daten werden gelöscht, wenn die Zusammensetzung deaktiviert wird. (e001be)
Version 1.6.0-alpha07
4. Oktober 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha07
wird veröffentlicht. Version 1.6.0-alpha07 enthält diese Commits.
API-Änderungen
SnapshotStateList
ist jetzt alsRandomAccess
gekennzeichnet, damit die Version der Listenhilfen 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
wird veröffentlicht. Version 1.6.0-alpha06 enthält diese Commits.
Version 1.6.0-alpha05
6. September 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha05
wird veröffentlicht. Version 1.6.0-alpha05 enthält diese Commits.
Version 1.6.0-alpha04
23. August 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha04
wird veröffentlicht. Version 1.6.0-alpha04 enthält diese Commits.
Neue Funktionen
- Ausnahmen, die während der Neuzusammensetzungsschleife unterdrückt werden, noch einmal werfen (4dff9a)
API-Änderungen
- Es wurde eine Methode hinzugefügt, mit der
ReusableComposition
deaktiviert werden kann. Dabei werden Beobachtungen entfernt, die Knoten bleiben jedoch erhalten. Die deaktivierte Komposition kann durch Aufrufen vonsetContent
wieder aktiviert werden. (Ib7f31) ReusableComposition
-Benutzeroberfläche zum Verwalten des Lebenszyklus und zur Wiederverwendung von Unterkompositionen hinzufügen (I812d1, b/252846775)
Version 1.6.0-alpha03
9. August 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha03
wird veröffentlicht. Version 1.6.0-alpha03 enthält diese Commits.
Fehlerkorrekturen
- Neue
CompositionLocalProvider
-Optimierung beheben (3118e88) - Korrektur der Demontage von beweglichen Inhaltsknoten. (5e3d59b)
Version 1.6.0-alpha02
26. Juli 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha02
wird veröffentlicht. Version 1.6.0-alpha02 enthält diese Commits.
Neue Funktionen und Leistungsverbesserungen
rememberSaveable
(f01d79) optimieren- Abgeleitete Status erst noch einmal lesen, wenn Änderungen erfasst wurden (f38099)
- Verbesserung der Bereitstellung lokaler Werte für die Zusammensetzung (a337ea)
SideEffect
ist als@ExplicitGroupsComposable
markiert, um eine Gruppierung zu vermeiden. (I74815)- Vergleich von lokalen Karten bei der Wiederverwendung vermeiden (782071)
API-Änderungen
- Es wurde eine spezielle Überladung für
CompositionLocalProviders
hinzugefügt, die den Overhead vermeidet, der beim schnelleren Bereitstellen mehrerer Werte entsteht, aber beim Bereitstellen eines einzelnen Werts zu Overhead führt. (I6d640, b/288169379)
Fehlerkorrekturen
- Speicherleck in der Steckplatztabelle behoben (73fcfe)
- Fehler bei der Wiederherstellung von
rememberSaveable
beheben, wennstateSaver
den Wert „null“ zurückgibt (90748c)
Version 1.6.0-alpha01
21. Juni 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha01
wird veröffentlicht. Version 1.6.0-alpha01 enthält diese Commits.
Fehlerkorrekturen
- Unterkompositionen, die entfernt werden, nicht neu zusammenstellen (Ieeb99, b/254645321)
- Verringerte Zuweisungen beim Anwenden von Snapshots. (I65c09)
- Berechnung von
readableHash
inDerivedState
vermeiden, wenn Snapshot nicht geändert wurde (68c565)
Version 1.5
Version 1.5.4
18. Oktober 2023
androidx.compose.runtime:runtime-*:1.5.4
wird veröffentlicht. Version 1.5.4 enthält diese Commits.
Version 1.5.3
4. Oktober 2023
androidx.compose.runtime:runtime-*:1.5.3
wird veröffentlicht. Version 1.5.3 enthält diese Commits.
Version 1.5.2
27. September 2023
androidx.compose.runtime:runtime-*:1.5.2
wird veröffentlicht. Version 1.5.2 enthält diese Commits.
Version 1.5.1
6. September 2023
androidx.compose.runtime:runtime-*:1.5.1
wird veröffentlicht. Version 1.5.1 enthält diese Commits.
Version 1.5.0
9. August 2023
androidx.compose.runtime:runtime-*:1.5.0
wird veröffentlicht. Version 1.5.0 enthält diese Commits.
API-Änderungen
- Zuweisungen bei der Neuzusammensetzung, bei Farbanimationen und bei
AndroidComposeView
entfernt (Ib2bfa) - Es wurde eine
@StateFactoryMarker
-Anmerkung hinzugefügt, um Funktionen zu kennzeichnen, die Status erstellen und in einenremember
-Aufruf eingeschlossen werden müssen. (I64550) - Primitive Versionen von „Status“ und
MutableState
hinzufügen (fb3d89) Snapshot.isApplyObserverNotificationPending
(I672a5) hinzugefügt- Es wurden primitive Versionen der
State
API hinzugefügt, mit denen Int-, Long-, Float- und Double-Werte inState
-Objekten erfasst werden können, ohne dass es zu Strafen für das Autoboxing kommt. Verwenden Sie dazu die neuen Factory-MethodenmutableIntState(Int)
,mutableFloatStateOf(Float)
usw. (I48e43)
Fehlerkorrekturen
- Unterkompositionen, die entfernt werden, nicht neu zusammenstellen (Ieeb99, b/254645321)
- Snapshot-Referenz in
ComposerImpl
nicht beibehalten (0206f7) - Zusammensetzung nicht zweimal anwenden (f5791b)
- Ungültige Werte für nicht initialisierte abgeleitete Statuswerte (aa2a92)
- Rufen Sie
onEndChanges
während der Dispose-Methode der Komposition auf. (62cc8c) - Problem beim Verschieben von Inhalten in eine untergeordnete Komposition behoben (4beb41)
- Potenzielle Deadlocks behoben (c1a425 und 8edce0)
- Der für ein Android-Fenster erstellte Recomposer blockiert jetzt nur Aufrufe an
withFrameNanos
, anstatt die gesamte Zusammenstellung, wenn er eine ON_STOP-Benachrichtigung erhält. Das bedeutet, dass Fenster, die mit angehaltenen Aktivitäten verknüpft sind, bei Datenänderungen weiterhin neu zusammengesetzt werden, aber die Animationen oder andere Aufrufer vonwithFrameNanos
blockiert werden. (Id9e7f, b/240975572) - Deaktivierungs-Callbacks für
LayoutNode
vor dem Entfernen von Effekten ausführen 3784073 - Korrektur von geänderten Flags für neu gestartete Lambdas ea81df9
- Korrektur der Regression bei der Live-Bearbeitung für Composable mit Knoten 73fd4d8
- ON_STOP sollte die Frame Clock-Übertragungen anstelle der Komposition pausieren ae276f1
SnapshotStateObserver
-Bereiche für unveränderte abgeleitete Status ungültig machen 84d9b1c- Potenzielles Deadlock beim Entfernen von Kompositionen behoben 28761fc
- Problem beim Verschieben von Inhalten in eine untergeordnete Komposition behoben 92d4156
- Korrektur von geänderten Flags für neu gestartete Lambdas (8a03e9)
- Deaktivierungs-Callbacks für
LayoutNode
vor dem Entfernen von Effekten ausführen (8b0fa4) endToMarker()
am Ende von Knotengruppen korrigieren (d71d980)- Aktuelle
SlotWriter
-Gruppe für die Deaktivierungsprüfung verwenden (a0b518b) - Entfernen Sie das
fill
inSlotTable.moveSlotGapTo()
und verschieben Sie es zum Schließen (81f9935). - Fehlende Entwertungen beim Verschieben beweglicher Inhalte behoben (1d7c024)
- Sofortige Ungültigkeitserklärungen für verschobene bewegliche Inhalte beheben (8676618)
Leistungsverbesserungen
- Vermeiden Sie es,
readableHash
inDerivedState
zu berechnen, wenn der Snapshot nicht geändert wurde. (307102) - Reduzierte Zuweisungen (I65c09, d7ea77, 727974 und 445808)
- Schnelle Stornierung von
CoroutineScopes
(a55362 und bd382f) - Einträge von Statusobjekten mit nicht zugänglichen Statuseinträgen überschreiben (c986960)
- Beim Erstellen von Gruppen den Composer mit dem richtigen Umfang verwenden (9a5e5b6)
IdentityArraySet
zum Speichern von Snapshot-Außerkraftsetzungen verwenden (7f60cca)- Zuweisungen für Snapshot-Beobachtungen reduzieren (5bc535f)
Version 1.5.0-rc01
26. Juli 2023
androidx.compose.runtime:runtime-*:1.5.0-rc01
wird veröffentlicht. Version 1.5.0-rc01 enthält diese Commits.
Fehlerkorrekturen
Abgeleitete Status erst noch einmal lesen, wenn Änderungen erfasst wurden (f38099)
Es ist eine optionale Prüfung verfügbar, mit der empfohlen wird,
mutableStateOf()
-Aufrufe zu den entsprechenden spezialisierten Typen für Primitive 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 die Schwere von „Information“ zu „Warnung“ (oder höher). Deklarieren Sie dazuwarning "AutoboxingStateCreation"
wie gezeigt in der build.gradle- oder build.gradle.kts-Konfiguration Ihres Moduls (I34f7e):android { lint { warning "AutoboxingStateCreation" } ... }
Version 1.5.0-beta03
28. Juni 2023
androidx.compose.runtime:runtime-*:1.5.0-beta03
wird veröffentlicht. Version 1.5.0-beta03 enthält diese Commits.
Fehlerkorrekturen
- Unterkompositionen, die entfernt werden, nicht neu zusammenstellen (Ieeb99, b/254645321)
Version 1.5.0-beta02
7. Juni 2023
androidx.compose.runtime:runtime-*:1.5.0-beta02
wird veröffentlicht. Version 1.5.0-beta02 enthält diese Commits.
Leistungsverbesserungen
- Vermeiden Sie es,
readableHash
inDerivedState
zu berechnen, wenn der Snapshot nicht geändert wurde. (307102)
Version 1.5.0-beta01
24. Mai 2023
androidx.compose.runtime:runtime-*:1.5.0-beta01
wird veröffentlicht. Version 1.5.0-beta01 enthält diese Commits.
API-Änderungen
- Zuweisungen bei der Neuzusammensetzung, Farbanimationen und
AndroidComposeView
(Ib2bfa) entfernt - Es wurde eine
@StateFactoryMarker
-Anmerkung hinzugefügt, um Funktionen zu kennzeichnen, die Status erstellen und in einenremember
-Aufruf eingeschlossen werden müssen. (I64550) - Primitive Versionen von „Status“ und
MutableState
hinzufügen (fb3d89) Snapshot.isApplyObserverNotificationPending
(I672a5) hinzugefügt
Fehlerkorrekturen
- Reduzierte Zuweisungen (I65c09, d7ea77, 727974 und 445808)
- Snapshot-Referenz in
ComposerImpl
nicht beibehalten (0206f7) - Schnelle Stornierung von
CoroutineScopes
(a55362 und bd382f) - Zusammensetzung nicht zweimal anwenden (f5791b)
- Ungültige Werte für nicht initialisierte abgeleitete Statuswerte (aa2a92)
- Rufen Sie
onEndChanges
während der Dispose-Methode der Komposition auf. (62cc8c) - Problem beim Verschieben von Inhalten in eine untergeordnete Komposition behoben (4beb41)
- Potenzielle Deadlocks beheben (c1a425
- ON_STOP sollte die Frame Clock-Übertragungen anstelle der Zusammensetzung pausieren (f4a2d1)
- Korrektur von geänderten Flags für neu gestartete Lambdas (8a03e9)
- Deaktivierungs-Callbacks für
LayoutNode
vor dem Entfernen von Effekten ausführen (8b0fa4)
Externer Beitrag
Snapshot.isApplyObserverNotificationPending
(I672a5) hinzugefügt
Version 1.5.0-alpha04
10. Mai 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha04
wird veröffentlicht. Version 1.5.0-alpha04 enthält diese Commits.
API-Änderungen
- Es wurden primitive Versionen der
State
API hinzugefügt, mit denen Int-, Long-, Float- und Double-Werte inState
-Objekten erfasst werden können, ohne dass es zu Strafen für das Autoboxing kommt. Verwenden Sie dazu die neuen Factory-MethodenmutableIntState(Int)
,mutableFloatStateOf(Float)
usw. (I48e43)
Fehlerkorrekturen
Rufen Sie
onEndChanges
während der Dispose-Methode der Komposition auf. Fokusknoten, die währendComposition.dispose
entfernt wurden, abonnierenonEndChanges
, um den Fokus zurückzusetzen.(03d4a47)Achten Sie darauf, dass nicht initialisierte abgeleitete Statuswerte ungültig gemacht werden. Jeder abgeleitete Status ist in
SnapshotStateObserver
mit einer Liste seiner Abhängigkeiten verknüpft. Diese Liste wird verwendet, um Bereiche zu widerrufen, die mit dem abgeleiteten Status verknüpft sind, wenn sich die Abhängigkeit ändert. Die Abhängigkeitsänderung wird beim Fortsetzen des Snapshots registriert. Dies kann nach dem Lesen des abgeleiteten Status (aufgrund des Aufrufs vonSnapshot.notifyObjectsInitialized()
) passieren.Die bisherige Logik zur Beobachtung des abgeleiteten Zustands in
SnapshotStateObserver
beseitigte alte Abhängigkeiten und las dann den neuen Wert. Dies führte zu einer Race-Condition, bei der die Daten in einem bereinigten Zustand ungültig gemacht wurden, ohne dass die Abhängigkeit ungültig gemacht wurde.Durch diese Änderung werden die Abfolge des Lesens des abgeleiteten Status und die Bereinigung von Abhängigkeiten neu angeordnet, damit die Daten immer in einem gültigen Status ungültig gemacht werden. (c472be6)
Version 1.5.0-alpha03
19. April 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha03
wird veröffentlicht. Version 1.5.0-alpha03 enthält diese Commits.
API-Änderungen
- Der für ein Android-Fenster erstellte Recomposer blockiert jetzt nur Aufrufe an
withFrameNanos
, anstatt die gesamte Zusammenstellung, wenn er eine ON_STOP-Benachrichtigung erhält. Das bedeutet, dass Fenster, die mit angehaltenen Aktivitäten verknüpft sind, bei Datenänderungen weiterhin neu zusammengesetzt werden, aber die Animationen oder andere Aufrufer vonwithFrameNanos
blockiert werden. (Id9e7f, b/240975572)
Fehlerkorrekturen
- Potenzieller Deadlock in der Snapshot-Liste und -Zuordnung behoben 5c1a425
- Deaktivierungs-Callbacks für
LayoutNode
vor dem Entfernen von Effekten ausführen 3784073 - Korrektur von geänderten Flags für neu gestartete Lambdas ea81df9
- Korrektur der Regression bei der Live-Bearbeitung für Composable mit Knoten 73fd4d8
- ON_STOP sollte die Frame Clock-Übertragungen anstelle der Komposition pausieren ae276f1
SnapshotStateObserver
-Bereiche für unveränderte abgeleitete Status ungültig machen 84d9b1c- Potenzielles Deadlock beim Entfernen von Kompositionen behoben 28761fc
- Problem beim Verschieben von Inhalten in eine untergeordnete Komposition behoben 92d4156
Version 1.5.0-alpha02
5. April 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha02
wird veröffentlicht. Version 1.5.0-alpha02 enthält diese Commits.
Neue Funktionen
- Der Kotlin-Operator
getValue
kann jetzt kombiniert werden (f174f6e)
Fehlerkorrekturen und Leistungsverbesserungen
- Einträge von Statusobjekten mit nicht zugänglichen Statuseinträgen überschreiben (c986960)
- Beim Erstellen von Gruppen den Composer mit dem richtigen Umfang verwenden (9a5e5b6)
endToMarker()
am Ende von Knotengruppen korrigieren (d71d980)- Aktuelle
SlotWriter
-Gruppe für die Deaktivierungsprüfung verwenden (a0b518b) IdentityArraySet
zum Speichern von Snapshot-Außerkraftsetzungen verwenden (7f60cca)- Entfernen Sie das
fill
inSlotTable.moveSlotGapTo()
und verschieben Sie es zum Schließen (81f9935). - Fehlende Entwertungen beim Verschieben beweglicher Inhalte behoben (1d7c024)
- Sofortige Ungültigkeitserklärungen für verschobene bewegliche Inhalte beheben (8676618)
- Zuweisungen für Snapshot-Beobachtungen reduzieren (5bc535f)
Version 1.5.0-alpha01
22. März 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha01
wird veröffentlicht. Version 1.5.0-alpha01 enthält diese Commits.
Neue Funktionen
- Es wird
Modifier.Node#coroutineScope
hinzugefügt, damitModifier.Nodes
Koroutinen starten kann (I76ef9) - Implementieren Sie die
CompositionLocalConsumerModifierNode
-Schnittstelle, damitModifier.Nodes
CompositionLocals
lesen kann. (Ib44df)
Version 1.4
Version 1.4.3
3. Mai 2023
androidx.compose.runtime:runtime-*:1.4.3
wird ohne Änderungen veröffentlicht.
Version 1.4.2
19. April 2023
androidx.compose.runtime:runtime-*:1.4.2
wird veröffentlicht. Version 1.4.2 enthält diese Commits.
Fehlerkorrekturen
Potenzieller Deadlock in der Snapshot-Liste und -Zuordnung behoben 2eb6570
Wenn Sie einem
SnapshotStateList
oderSnapshotStateMap
Inhalte hinzufügen, kann es zu einem Deadlock kommen, wenn die Änderung gleichzeitig mit einem direkten Schreiben in den Statuseintrag erfolgt. Durch die Änderungen, die mit 93fcae828b eingeführt wurden, ist die Wahrscheinlichkeit, dass dieses Problem auftritt, deutlich gestiegen. Dabei werden nicht verwendete Datensätze mithilfe von direkten Schreibvorgängen freigegeben.Die Sperren sind jetzt so angeordnet, dass nie versucht wird, eine Snapshot-Sperre zu setzen, wenn eine Karten- oder Listensperre aktiv ist.
Version 1.4.1
5. April 2023
androidx.compose.runtime:runtime-*:1.4.1
wird veröffentlicht. Version 1.4.1 enthält diese Commits.
Fehlerkorrekturen
- Fehler bei
endToMarker()
am Ende von Knotengruppen behoben. d71d980
Version 1.4.0
22. März 2023
androidx.compose.runtime:runtime-*:1.4.0
wird veröffentlicht. Version 1.4.0 enthält diese Commits.
Wichtige Änderungen seit Version 1.3.0
- Für die erste Komposition 3680e25 den initialisierten Wert aus
LiveData
verwenden - Fügen Sie
ComposeNodeLifecycleCallback
hinzu, um den Lebenszyklus von Compose-Knoten zu beobachten. 8b6a258 parameterTypes
-Attribut zuComposableMethod
7b6c7ad hinzufügen
Fehlerkorrekturen und Leistungsverbesserungen
- Löschen Sie beide Bereichsindexe in
SnapshotStateObserver
29f4a3e. - Gruppen im Body von nicht überspringbaren Lambdas hinzufügen 7d06752
- Verbesserung der Arbeitsspeicherreferenzeigenschaften des Snapshot-Status 93fcae8
- Boxen in lokalen Suchanfragen für Kompositionen entfernen 0875717
- Der richtige Schlüssel für nicht wiederverwendbare Knotengruppen 6388d8d
SnapshotStateObserver
vor rekursiven und gleichzeitigen Anwendungen schützen 98cb6ba- In der
IdentityArraySet
-Methode „get“ wurde eine Prüfung der Indexgrenzen hinzugefügt 35a77d3 - Compose-Modul für die Verwendung von
ViewTreeLifecycleOwner
-Erweiterungen aktualisieren 21c2122 - Sende Benachrichtigungen, dass die Änderungen angewendet wurden, nachdem der Recomposer den Frame fertiggestellt hat. 98f2641
- Behebung des Absturzes durch einen Indexfehler beim Abbrechen der Neukomposition 8f8656f
- Neuzusammensetzung immer erzwingen, wenn sich übergeordnete Anbieter der Komposition geändert haben 9526fcc
- Toleranz für die Neukompilierung von abgebrochenen Jobs a55f7ed
- Verbesserte Verarbeitung von Ungültigkeiten bei einer großen Anzahl von Komponisten 9b7ed67
- Fehler beim Generieren von Abschlussgruppen für nicht lokale Steuererklärungen behoben b6f590c
Version 1.4.0-rc01
8. März 2023
androidx.compose.runtime:runtime-*:1.4.0-rc01
wird veröffentlicht. Version 1.4.0-rc01 enthält diese Commits.
Fehlerkorrekturen
Version 1.4.0-beta02
22. Februar 2023
androidx.compose.runtime:runtime:1.4.0-beta02
und androidx.compose.runtime:runtime-saveable:1.4.0-beta02
werden freigegeben. Version 1.4.0-beta02 enthält diese Commits.
Version 1.4.0-beta01
8. Februar 2023
androidx.compose.runtime:runtime-*:1.4.0-beta01
wird veröffentlicht. Version 1.4.0-beta01 enthält diese Commits.
API-Änderungen
ComposeNodeLifecycleCallback
wurde hinzugefügt, um den Lebenszyklus von Compose-Knoten zu beobachten (I3731b)@TestOnly
wurdeComposer.disableSourceInformation()
hinzugefügt, da diese Funktion nur in einem Test sicher aufgerufen werden kann. (I896c8)
Fehlerkorrekturen
- Umrahmung bei lokalen Zusammensetzungsabfragen entfernen (62f66a)
- Verbesserung der Arbeitsspeicherreferenzeigenschaften des Snapshot-Status (dfb451)
Version 1.4.0-alpha05
25. Januar 2023
androidx.compose.runtime:runtime:1.4.0-alpha05
und androidx.compose.runtime:runtime-saveable:1.4.0-alpha05
werden freigegeben. Version 1.4.0-alpha05 enthält diese Commits.
API-Änderungen
- Weitere Informationen zu Typ/Nullbarkeit von Inline-/veralteten ausgeblendeten Funktionen (I24f91)
Version 1.4.0-alpha04
11. Januar 2023
androidx.compose.runtime:runtime-*:1.4.0-alpha04
wird veröffentlicht. Version 1.4.0-alpha04 enthält diese Commits.
API-Änderungen
- Für
TestMonotonicFrameClock
wird jetzt die korrekte experimentelle Anmerkung verwendet. (I95c9e)
Fehlerkorrekturen
SnapshotStateObserver
vor rekursiven und gleichzeitigen Anwendungen schützen (d902fb)
Version 1.4.0-alpha03
7. Dezember 2022
androidx.compose.runtime:runtime-*:1.4.0-alpha03
wird veröffentlicht. Version 1.4.0-alpha03 enthält diese Commits.
API-Änderungen
- der Klasse
ComposableMethod
eine neue öffentliche Methode hinzufügen, die der vonjava.lang.reflect.Method#getParameterTypes()
(Iab0c3) entspricht
Fehlerkorrekturen
- Benachrichtigungen zur Anwendung von Snapshots werden jetzt gesendet, nachdem die Änderungen auf der
Recomposer
angewendet wurden. (Iad6c0, b/222093277)
Version 1.4.0-alpha02
9. November 2022
androidx.compose.runtime:runtime-*:1.4.0-alpha02
wird veröffentlicht. Version 1.4.0-alpha02 enthält diese Commits.
Version 1.4.0-alpha01
24. Oktober 2022
androidx.compose.runtime:runtime-*:1.4.0-alpha01
wird veröffentlicht. Version 1.4.0-alpha01 enthält diese Commits.
API-Änderungen
SnapshotStateList
undSnapshotStateMap
haben jetzt explizite Implementierungen vontoList()
undtoMap()
. Diese Methoden geben den aktuellen Inhalt zurück, ohne eine Kopie zu erstellen, da sie die internen unveränderlichen Daten zurückgeben, die zum Speichern des Inhalts verwendet werden. Mit diesem Wert können Sie beispielsweise einen Wertfluss mitsnapshotFlow
erstellen, ohne die Daten kopieren zu müssen. (Ica2bd)
Version 1.3
Version 1.3.3
11. Januar 2023
androidx.compose.runtime:runtime-*:1.3.3
wird veröffentlicht. Version 1.3.3 enthält diese Commits.
- Keine Änderungen seit 1.3.2
Version 1.3.2
7. Dezember 2022
androidx.compose.runtime:runtime-*:1.3.2
wird veröffentlicht. Version 1.3.2 enthält diese Commits.
Fehlerkorrekturen
- Aktualisiert auf androidx.compose.ui 1.3.2
Version 1.3.1
9. November 2022
androidx.compose.runtime:runtime-*:1.3.1
wird veröffentlicht. Version 1.3.1 enthält diese Commits.
Version 1.3.0
24. Oktober 2022
androidx.compose.runtime:runtime-*:1.3.0
wird veröffentlicht. Version 1.3.0 enthält diese Commits.
Wichtige Änderungen seit Version 1.2.0
Ausnahmebehandlung / Support für Live-Änderungen
- Zur besseren Unterstützung der Live-Bearbeitung wurden APIs hinzugefügt, mit denen Ausnahmen während der Komposition verarbeitet werden können.
- Fehlerbehandlung bei der Zusammensetzung für Hot Reload
- Fehler bei der Live-Bearbeitung beim Speichern/Wiederherstellen behandeln
Zusammensetzungs-Tracing
- Es wurden APIs zur Laufzeit-Analyse hinzugefügt, um neue Tools zur Komposition-Analyse zu unterstützen.
- Start-/Endaufrufe für zusammensetzbare Trace-Ereignisse generieren
- ComposerKt.traceEventStart(Int, String) wurde wieder hinzugefügt
Komposable Reflection APIs
- Es wurde eine neue
ComposableMethod
API hinzugefügt, um zuverlässigere reflexionsbasierte Aufrufe von kombinierbaren APIs zu ermöglichen. - „invokeComposable“ in die Compose-Laufzeit verschieben
- API überarbeiten, um zusammensetzbare Methode aufzurufen
Laufzeitkorrekturen
- Fehler beim Bereichstest für die Slottabelle korrigiert, bei dem nach Markierungen gesucht wurde
- Verschiebbare Inhalte in SubcomposeLayout verschieben und daraus entfernen
- Fehler beim Verschieben von Inhalten in neue Inhalte einer untergeordneten Komposition behoben
Snapshot-System
- Das Snapshot-System wurde in Bezug auf Arbeitsspeicherverwaltung, Leistung und Korrektheit verbessert.
- Optimierung der Bereichsentfernung in SnapshotStateObserver
- Verschachtelte Snapshots, die aus transparenten Snapshots erstellt wurden, löschen
- Fehler beim Lesen des Status aus dem globalen Snapshot behoben
- Unterstützung von DerivedState in SnapshotStateObserver
- Verhindern, dass abgeleiteter Status aus der Komposition entfernt wird, wenn er in anderen Bereichen gelesen wird
- IdentityArrayMap anstelle von HashMap in DerivedState verwenden
- Beobachter für abgeleiteten Status aktualisieren, um änderbaren Vektor zu verwenden
- Aktualisierung der Bereinigung des Status von SnapshotStateObserver
- SnapshotStateObserver.invalidated durch ArraySet ersetzen
- Fehler beim Lesen des Status aus dem globalen Snapshot behoben
- Verwendung veralteter Einträge bei der Hash-Berechnung für DerivedState korrigieren
- Behebung einer Race-Condition beim Fortsetzen des globalen Snapshots
- Bereinigung von Beobachtungen im Bereich in SnapshotStateObserver beschleunigen
Version 1.3.0-rc01
5. Oktober 2022
androidx.compose.runtime:runtime-*:1.3.0-rc01
wird veröffentlicht. Version 1.3.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Behobenes Problem mit
ArrayIndexOutOfBoundsException
aus der Steckplatztabelle (b/249076084)
Version 1.3.0-beta03
21. September 2022
androidx.compose.runtime:runtime-*:1.3.0-beta03
wird veröffentlicht. Version 1.3.0-beta03 enthält diese Commits.
Funktionsgefährdende Änderung
- Die Parameter
remember
undrememberCoroutineScope
wurden incrossinline
geändert. Dadurch wird ein Fehler für vorzeitige Rückgaben gemeldet, anstatt eine vorzeitige Rückgabe zuzulassen, was zu einem späteren internen Fehler führt. - Diese Änderung kann dazu führen, dass neue Compilerfehler gemeldet werden, bei denen 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
wird veröffentlicht. Version 1.3.0-beta02 enthält diese Commits.
Fehlerkorrekturen
- Aktualisierte API (I64ca0)
Version 1.3.0-beta01
24. August 2022
androidx.compose.runtime:runtime-*:1.3.0-beta01
wird veröffentlicht. Version 1.3.0-beta01 enthält diese Commits.
API-Änderungen
CompositionData
wurde die Methodefind
hinzugefügt, damit Entwicklertools, die diese API verwenden, schnell eine Untergruppe der Komposition anhand ihrer Identität finden können. (I5794f)
Version 1.3.0-alpha03
10. August 2022
androidx.compose.runtime:runtime-*:1.3.0-alpha03
wird veröffentlicht. Version 1.3.0-alpha03 enthält diese Commits.
Version 1.3.0-alpha02
27. Juli 2022
androidx.compose.runtime:runtime-*:1.3.0-alpha02
wird veröffentlicht. Version 1.3.0-alpha02 enthält diese Commits.
API-Änderungen
ComposerKt.traceEventStart(Int, String)
wurde aus Gründen der Abwärtskompatibilität wieder hinzugefügt (I6e6de)
Version 1.3.0-alpha01
29. Juni 2022
androidx.compose.runtime:runtime-*:1.3.0-alpha01
wird veröffentlicht. Version 1.3.0-alpha01 enthält diese Commits.
API-Änderungen
- Verschieben von Dienstfunktionen in die Laufzeit (I4f729)
Version 1.2
Version 1.2.1
10. August 2022
androidx.compose.runtime:runtime-*:1.2.1
wird veröffentlicht. Version 1.2.1 enthält diese Commits.
Fehlerkorrekturen
- Speicherleck behoben: Verwalten von verschachtelten Snapshots, die aus transparenten Snapshots erstellt wurden b/239603305
Version 1.2.0
27. Juli 2022
androidx.compose.runtime:runtime-*:1.2.0
wird veröffentlicht. Version 1.2.0 enthält diese Commits.
Wichtige Änderungen seit 1.1.0
In Compose Runtime wurden in Version 1.2.0 einige Funktionen eingeführt und viele Fehler behoben, um die Stabilität zu verbessern. Die wichtigste neue Funktion war die Einführung der
movableContentOf
API, mit der sich komplexe UX-Elemente wie Übergänge für freigegebene Elemente ermöglichen lassen. DiemovableContentOf
API wandelt ein kombinierbares Lambda in ein Lambda um, das seinen Status und die entsprechenden Knoten an jeden neuen Ort verschiebt, an dem es aufgerufen wird. Wenn der vorherige Aufruf die Zusammensetzung verlässt, wird der Status vorübergehend beibehalten. Wenn ein neuer Aufruf der Lambda-Funktion die Zusammensetzung betritt, werden der Status und die zugehörigen Knoten an den Speicherort des neuen Aufrufs verschoben. Wenn kein neuer Anruf hinzugefügt wird, wird der Status dauerhaft entfernt und Beobachter werden benachrichtigt.Wenn ein
movableContentOf
-Lambda in derselben Komposition mehrmals aufgerufen wird, werden für jeden Aufruf ein neuer Status und neue 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 ausgehenden Aufrufen zu den eingehenden Aufrufen verschoben. Alle Status, die nicht durch neue Aufrufe beansprucht werden, werden endgültig entfernt.Neben diesen und einigen anderen neuen Funktionen wurde viel Zeit darauf verwendet, die Laufzeit und das Snapshot-Statussystem zu stabilisieren. Verschiedene Speicherlecks wurden behoben und Codepfade optimiert.
Eine Zusammenfassung der Änderungen finden Sie unten:
Neue Funktionen in 1.2
- Experimenteller Snapshot „unsafeEnter/Leave“ hinzufügen
- Experimentelle API „Snapshot.asContextElement“ hinzufügen
- Einführung von Snapshot.withoutReadObservation
- Zustand innerhalb einer Komposition verschieben
- Rekompositionen in Compose nachverfolgen
Leistung in 1.2
- Leistung von Kompositionen für lokale Ergebnisse verbessern
- Baseline-Profile für das Komponieren sollten anhand von Benchmarks abgeleitet werden
Fehlerkorrekturen in 1.2
- Tracking-Informationen aus Bereichen für die Neuzusammensetzung von Releases entfernen
- Verhindern, dass abgeleiteter Status aus der Komposition entfernt wird, wenn er in anderen Bereichen gelesen wird
- Effizientere Funktion „removeScope()“ in SnapshotStateObserver verwenden
- Abhängigkeiten des abgeleiteten Zustands in der Komposition bereinigen
- Problem behoben, bei dem sich der currentCompositeKeyHash nach der internen Neuzusammensetzung innerhalb beweglicher Inhalte ändert
- Ungültige Kompositionen bei der Entsorgung bereinigen
- Fehler beim Lesen des abgeleiteten Status während der Neuzusammensetzung behoben
- Behebung eines Speicherlecks beim Beobachten abgeleiteter Statusobjekte
- Der zusammengesetzte Hash-Schlüssel für „movableContent“ wurde einheitlich festgelegt.
- Fehler behoben, bei dem der Designer abgestürzt ist
- Erzwungene Ungültigmachung einer Gruppe erzwingt Neuzusammensetzung
- Fehler behoben, wenn „rememberSaveable“ mit Eingabe in der falschen Reihenfolge wiederhergestellt wird
Version 1.2.0-rc03
29. Juni 2022
androidx.compose.runtime:runtime-*:1.2.0-rc03
wird veröffentlicht. Version 1.2.0-rc03 enthält diese Commits.
Fehlerkorrekturen
- Beobachtungen des abgeleiteten Zustands wurden zuvor aus dem Bereich „Recompose“ und der Zusammensetzung zusammen entfernt, was zu Fehlern in anderen Bereichen führte, in denen der abgeleitete Zustand möglicherweise noch beobachtet wurde. Durch diese Änderung werden abgeleitete Statusinstanzen nur entfernt, wenn sie nicht mehr von anderen Bereichen beobachtet werden. (b/236618362)
Version 1.2.0-rc02
22. Juni 2022
androidx.compose.runtime:runtime-*:1.2.0-rc02
wird veröffentlicht. Version 1.2.0-rc02 enthält diese Commits.
Version 1.2.0-rc01
15. Juni 2022
androidx.compose.runtime:runtime-*:1.2.0-rc01
wird veröffentlicht. Version 1.2.0-rc01 enthält diese Commits.
API-Änderungen
- Schnittstellen in Compose-Bibliotheken werden jetzt mit den Standardschnittstellenmethoden von JDK 8 erstellt (I5bcf1)
Version 1.2.0-beta03
1. Juni 2022
androidx.compose.runtime:runtime-*:1.2.0-beta03
wird veröffentlicht. Version 1.2.0-beta03 enthält diese Commits.
Version 1.2.0-beta02
18. Mai 2022
androidx.compose.runtime:runtime-*:1.2.0-beta02
wird veröffentlicht. Version 1.2.0-beta02 enthält diese Commits.
Version 1.2.0-beta01
11. Mai 2022
androidx.compose.runtime:runtime-*:1.2.0-beta01
wird veröffentlicht. Version 1.2.0-beta01 enthält diese Commits.
Neue Funktionen
- Dies ist die erste Betaversion von 1.2.
API-Änderungen
- Experimentelles
Snapshot.unsafeEnter/unsafeLeave
(I108f3) hinzugefügt - Experimentelle
Snapshot.asContextElement()
API (Iff072) hinzugefügt - Die Anmerkung
@ComposableTarget
und mit@ComposableTargetMarker
gekennzeichnete Anmerkungen können jetzt mit dem Präfix@file
auf Dateiebene verwendet werden. Wenn Sie eine Zielanmerkung auf Dateiebene verwenden, geht der Compiler davon aus, dass alle kombinierbaren Funktionen in der Datei auf den zugehörigen Anwender ausgerichtet sind. Wenn Sie beispielsweise@file:UiComposable
verwenden, wird damit angegeben, dass alle@Composable
-Funktionen auf den Compose UI-Applier ausgerichtet sind. Eine Funktion, die auf einen anderen Applier ausgerichtet werden soll, muss die Zielmarkierungsanmerkung für den gewünschten Applier explizit angeben. (I40804)
Version 1.2.0-alpha08
20. April 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha08
wird veröffentlicht. Version 1.2.0-alpha08 enthält diese Commits.
API-Änderungen
TracingInProgress
wurde der SchnittstelleCompositionTracer
hinzugefügt. (Ic6f12)recomposeScopeIdentity
zu Composer hinzufügen (I0c873)- Eingeschränkt: APIs zur Aufrufabfolge (Composer.setTracer) auf
OptIn(InternalComposeTracingApi)
. (I9187f) ResuableContentHost
wurde hinzugefügt, um die Lebensdauer des Status zu steuern, der für wiederverwendbare Inhalte erstellt wurde. Wenn eine untergeordnete Komposition beispielsweise vorübergehend nicht verwendet wird, können die Inhalte deaktiviert werden. Dadurch wird der gesamte gespeicherte Status in der Komposition vergessen, was beispielsweise dazu führt, dass alle vergänglichen Effekte ausgelöst werden. (I2c0f2, b/220322704)
Version 1.2.0-alpha07
6. April 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha07
wird veröffentlicht. Version 1.2.0-alpha07 enthält diese Commits.
API-Änderungen
- Die neue Funktion
Snapshot.withoutReadObservation { ... }
wurde hinzugefügt. So können Nutzer das übergebene Lambda ausführen, ohne die Änderungen der Statuswerte zu abonnieren, die in diesem Block gelesen werden. Diese Funktion kann in Anwendungsfällen nützlich sein, in denen Sie von den snapshotbasierten threadsicheren Schreib-/Lesevorgänge profitieren möchten, den Wert aber lesen möchten, ohne unnötige Neuzusammensetzungen oder Neumessungen zu verursachen. (I9f365, b/214054486)
Version 1.2.0-alpha06
23. März 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha06
wird veröffentlicht. Version 1.2.0-alpha06 enthält diese Commits.
Version 1.2.0-alpha05
9. März 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha05
wird veröffentlicht. Version 1.2.0-alpha05 enthält diese Commits.
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
wird veröffentlicht. Version 1.2.0-alpha04 enthält diese Commits.
API-Änderungen
Die Funktionen
ComposableTarget
,ComposableTargetMarker
undComposableOpenTarget
wurden hinzugefügt. Damit können Sie zur Kompilierungszeit Berichte dazu erhalten, wann eine zusammensetzbare Funktion auf einen Anwender angewendet wird, für den sie nicht vorgesehen ist.In den meisten Fällen können die Anmerkungen vom Compose-Compiler-Plug-in abgeleitet werden. Die direkte Verwendung dieser Anmerkungen sollte daher selten vorkommen. Dazu gehören das Erstellen und Verwenden benutzerdefinierter Applier, abstrakter zusammensetzbarer Funktionen (z. B. Schnittstellenmethoden), Felder oder globaler Variablen, die zusammensetzbare Lambdas sind (lokale Variablen und Parameter werden abgeleitet), oder die Verwendung von
ComposeNode
oder einer ähnlichen zusammensetzbaren Funktion.Bei benutzerdefinierten Anwendern müssen die zusammensetzbaren Funktionen, die
ComposeNode
oderReusableComposeNode
aufrufen, eineCompoableTarget
-Anmerkung für die Funktion und alle zusammensetzbaren Lambda-Parametertypen hinzufügen. Es wird jedoch empfohlen, eine Anmerkung zu erstellen, die mitComposableTargetMarker
gekennzeichnet ist, und dann die gekennzeichnete Anmerkung anstelle vonComposableTarget
direkt zu verwenden. Eine mitComposableTargetMarker
gekennzeichnete zusammensetzbare Anmerkung entspricht einerComposbleTarget
mit dem voll qualifizierten Namen der Attributklasse als Anwenderparameter. Ein Beispiel für die Verwendung vonComposableTargetMarker
finden Sie unteranroidx.compose.ui.UiComposable
. (I38f11)
Version 1.2.0-alpha03
9. Februar 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha03
wird veröffentlicht. Version 1.2.0-alpha03 enthält diese Commits.
API-Änderungen
Es wurde
movableContentOf
hinzugefügt, mit dem eine kombinierbare Lambda-Funktion in eine Lambda-Funktion umgewandelt wird, die ihren Status und die entsprechenden Knoten an jeden neuen Ort verschiebt, an dem sie aufgerufen wird. Wenn der vorherige Aufruf die Zusammensetzung verlässt, wird der Status vorübergehend beibehalten. Wenn ein neuer Aufruf an die Lambda-Funktion in die Zusammensetzung eintritt, werden der Status und die zugehörigen Knoten an den Speicherort des neuen Aufrufs verschoben. Wenn kein neuer Aufruf hinzugefügt wird, wird der Status dauerhaft entfernt und Beobachter werden benachrichtigt.Wenn ein
movableContentOf
-Lambda in derselben Komposition mehrmals aufgerufen wird, werden für jeden Aufruf ein neuer Status und neue 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 ausgehenden Aufrufen zu den eingehenden Aufrufen verschoben. Alle Status, die nicht durch neue Aufrufe beansprucht werden, werden dauerhaft entfernt. (Ib4850)Der Zusammenstellung wurde eine Tracing-API hinzugefügt, damit Tools detailliertere Informationen zum Tracing zusammensetzbarer Funktionen liefern können. Der Compiler generiert jetzt Aufrufe an die Tracing API, die Quellinformationen enthalten. (Ib0eb5)
Wenn Sie diese Aufrufe und die zugehörigen Quellinformationen aus einem Release-Build entfernen möchten, fügen Sie die folgende Proguard-Regel hinzu:
-assumenosideeffects public class androidx.compose.runtime.ComposerKt { boolean isTraceInProgress(); void traceEventStart(int,java.lang.String); void traceEventEnd(); }
Fügen Sie
InternalComposeScope
hinzu, damit Tools ein Composeable bei Neuzusammensetzungen identifizieren können. (I07a3f)
Version 1.2.0-alpha02
26. Januar 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha02
wird veröffentlicht. Version 1.2.0-alpha02 enthält diese Commits.
Version 1.2.0-alpha01
12. Januar 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha01
wird veröffentlicht. Version 1.2.0-alpha01 enthält diese Commits.
API-Änderungen
- Dem Feld
CompositionData
wurde das Feldidentity
hinzugefügt, um invariante IDs im Layout-Inspektor zu generieren. (Ic116e)
Abhängigkeitsupdates
- Jetzt abhängig von Kotlin
1.6.10
.
Version 1.1
Version 1.1.1
23. Februar 2022
androidx.compose.runtime:runtime-*:1.1.1
wird veröffentlicht. Version 1.1.1 enthält diese Commits.
Fehlerkorrekturen
- Fehler bei
NullPointerException
unterandroidx.compose.ui.platform.RenderNodeLayer.updateDisplayList
beheben (aosp/1947059, b/206677462) - Ein Absturz, der durch den Inhalt der Zwischenablage beim Lesen aus der Zwischenablage auf Android-Geräten verursacht wurde, wurde behoben. (I06020, b/197769306)
- RTL in
LazyVerticalGrid
korrigiert (aosp/1931080, b/207510535)
Version 1.1.0
9. Februar 2022
androidx.compose.runtime:runtime-*:1.1.0
wird veröffentlicht. Version 1.1.0 enthält diese Commits.
Wichtige Änderungen seit Version 1.0.0
- Stabile Unterstützung für den Overscroll-Effekt von Android 12
- Verbesserungen bei der Größe von Touch-Zielen
- Im Vergleich zu Compose 1.0 wird der Layoutbereich von Materialkomponenten erweitert, um die Richtlinien für Bedienungshilfen von Material Design für die Größe von Touch-Zielelementen einzuhalten. Der Berührungszielbereich einer Schaltfläche wird beispielsweise auf eine Mindestgröße von
48x48dp
erweitert, auch wenn Sie die Größe der Schaltfläche kleiner festlegen. Dadurch wird das Verhalten von Compose-Material mit dem von Material Design-Komponenten abgeglichen, was für ein einheitliches Verhalten sorgt, wenn Sie Ansichten und Compose kombinieren. Durch diese Änderung werden auch die Mindestanforderungen an die Barrierefreiheit von Touch-Zielen erfüllt, wenn Sie Ihre Benutzeroberfläche mit Compose Material-Komponenten erstellen. - Stabile Unterstützung für den Navigationsstreifen
- Eine Reihe zuvor experimenteller APIs wird in stabile APIs überführt
- Unterstützung für neuere Kotlin-Versionen
Version 1.1.0-rc03
26. Januar 2022
androidx.compose.runtime:runtime-*:1.1.0-rc03
wird veröffentlicht. Version 1.1.0-rc03 enthält diese Commits.
Fehlerkorrekturen
- Aktualisiert, um Compose Material
1.1.0-rc03
zu unterstützen
Version 1.1.0-rc01
15. Dezember 2021
androidx.compose.runtime:runtime-*:1.1.0-rc01
wird veröffentlicht. Version 1.1.0-rc01 enthält diese Commits.
Version 1.1.0-beta04
1. Dezember 2021
androidx.compose.runtime:runtime-*:1.1.0-beta04
wird veröffentlicht. Version 1.1.0-beta04 enthält diese Commits.
Neue Funktionen
- Aktualisiert für die Kompatibilität mit Kotlin
1.6.0
Version 1.1.0-beta03
17. November 2021
androidx.compose.runtime:runtime-*:1.1.0-beta03
wird veröffentlicht. Version 1.1.0-beta03 enthält diese Commits.
Version 1.1.0-beta02
3. November 2021
androidx.compose.runtime:runtime-*:1.1.0-beta02
wird veröffentlicht. Version 1.1.0-beta02 enthält diese Commits.
API-Änderungen
- Der Snapshot-Code wurde in mehrere Dateien aufgeteilt, befindet sich aber weiterhin in derselben JVM-Klasse. (Ic6c98)
Version 1.1.0-beta01
27. Oktober 2021
androidx.compose.runtime:runtime-*:1.1.0-beta01
wird veröffentlicht. Version 1.1.0-beta01 enthält diese Commits.
Version 1.1.0-alpha06
13. Oktober 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha06
wird veröffentlicht. Version 1.1.0-alpha06 enthält diese Commits.
API-Änderungen
InternalCompilerApi
wurde aus Composer-Methoden entfernt, die modulübergreifend aufgerufen werden müssen (I1aa0b)Recomposer.state
wurde eingestellt und durchRecomposer.currentState
ersetzt, um den Typ in einen StateFlow zu ändern (Ic2ab3, b/197773820)
Version 1.1.0-alpha05
29. September 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha05
wird veröffentlicht. Version 1.1.0-alpha05 enthält diese Commits.
Version 1.1.0-alpha04
15. September 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha04
wird veröffentlicht. Version 1.1.0-alpha04 enthält diese Commits.
Version 1.1.0-alpha03
1. September 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha03
wird veröffentlicht. Version 1.1.0-alpha03 enthält diese Commits.
Neue Funktionen
- Der Compose-Compiler unterstützt jetzt ältere Versionen der Compose-Laufzeit (1.0). Vor dieser Änderung war der Compose-Compiler nur mit der Compose-Laufzeit derselben Version oder einer höheren Version kompatibel. Nach dieser Änderung ist der Compose-Compiler mit einer älteren Version der Compose-Laufzeit (1.0) kompatibel. (aosp/1796968)
- Compose
1.1.0-alpha03
wurde so aktualisiert, dass es von Kotlin1.5.30
abhängt. (I74545)
Version 1.1.0-alpha02
18. August 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha02
wird veröffentlicht. Version 1.1.0-alpha02 enthält diese Commits.
Version 1.1.0-alpha01
4. August 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha01
wird veröffentlicht. Version 1.1.0-alpha01 enthält diese Commits.
Version 1.0
Version 1.0.5
3. November 2021
androidx.compose.runtime:runtime-*:1.0.5
wird veröffentlicht. Version 1.0.5 enthält diese Commits.
Fehlerkorrekturen
- Ein Absturz beim Tracking von „derivedStateOf“-Instanzen wurde behoben. (aosp/1792247)
Version 1.0.4
13. Oktober 2021
androidx.compose.runtime:runtime-*:1.0.4
wird veröffentlicht. Version 1.0.4 enthält diese Commits.
Abhängigkeitsupdates
- Aktualisiert, um von Kotlin
1.5.31
abhängig zu sein
Version 1.0.3
29. September 2021
androidx.compose.runtime:runtime-*:1.0.3
wird veröffentlicht. Version 1.0.3 enthält diese Commits.
Abhängigkeitsupdates
- Aktualisiert, um von Kotlin
1.5.30
abhängig zu sein
Version 1.0.2
1. September 2021
androidx.compose.runtime:runtime-*:1.0.2
wird veröffentlicht. Version 1.0.2 enthält diese Commits.
Aktualisiert, um die Compose 1.0.2
-Version 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
wird veröffentlicht. Version 1.0.1 enthält diese Commits.
Abhängigkeitsupdates
- Aktualisiert auf Kotlin
1.5.21
.
Version 1.0.0
28. Juli 2021
androidx.compose.runtime:runtime-*:1.0.0
wird veröffentlicht. Version 1.0.0 enthält diese Commits.
Wichtige Funktionen von 1.0.0
Dies ist die erste stabile Version von Compose. Weitere Informationen findest du im offiziellen Compose-Release-Blog.
Bekannte Probleme
Wenn Sie Android Studio Bumblebee Canary 4 oder AGP
7.1.0-alpha04
/7.1.0-alpha05
verwenden, kann der folgende Absturz auftreten:java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
Erhöhen Sie in der
build.gradle
-Datei vorübergehend die minSdkVersion auf mindestens 24, um das Problem zu beheben. Dieses Problem wird in der nächsten Version von Android Studio Bumblebee und AGP7.1
behoben. (b/194289155)
Version 1.0.0-rc02
14. Juli 2021
androidx.compose.runtime:runtime-*:1.0.0-rc02
wird veröffentlicht. Version 1.0.0-rc02 enthält diese Commits.
- Es wurden Race-Bedingungen in SnapshotStateObserver behoben, die zu zufälligen NullPointerExceptions geführt haben. (aosp/1763445, aosp/1758105, b/192677711)
- Probleme mit Laufzeit-Snapshots, die zu Abstürzen von
java.lang.IllegalStateException: Reading a state that was created after the snapshot was taken or in a snapshot that has not yet been applied
geführt haben, wurden behoben. (b/193006595, b/192570897)
Version 1.0.0-rc01
1. Juli 2021
androidx.compose.runtime:runtime-*:1.0.0-rc01
wird veröffentlicht. Version 1.0.0-rc01 enthält diese Commits.
Version 1.0.0-beta09
16. Juni 2021
androidx.compose.runtime:runtime-*:1.0.0-beta09
wird veröffentlicht. Version 1.0.0-beta09 enthält diese Commits.
Profilregeln hinzugefügt
In dieser Version werden den folgenden Compose-Modulen (I14ed6) Profilregeln hinzugefügt:
- androidx.compose.animation
- androidx.compose.animation-core
- androidx.compose.foundation
- androidx.compose.foundation-layout
- androidx.compose.material
- androidx.compose.material-ripple
- androidx.compose.runtime
- androidx.compose.ui
- androidx.compose.ui.geometry
- androidx.compose.ui.graphics
- androidx.compose.ui.text
- androidx.compose.ui.text
- androidx.compose.ui.unit
- androidx.compose.ui.util
Was sind Profilregeln?
Profilregeln für eine Bibliothek werden in einer Textdatei
baseline-prof.txt
im Verzeichnissrc/main
oder einem ähnlichen Verzeichnis angegeben. Die Datei enthält eine Regel pro Zeile. Eine Regel ist in diesem Fall ein Muster, das mit Methoden oder Klassen in der Bibliothek abgeglichen wird. Die Syntax dieser Regeln ist ein Superset des visuell lesbaren ART-Profilformats, das bei der Verwendung vonadb shell profman --dump-classes-and-methods ...
verwendet wird. Diese Regeln können auf eine von zwei Arten auf Methoden oder Klassen ausgerichtet werden.Eine Methodenregel hat das folgende Muster:
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
Eine Klassenregel hat das folgende Muster:
<CLASS_DESCRIPTOR>
Hier ist
<FLAGS>
eines oder mehrere der ZeichenH
,S
undP
, um anzugeben, ob diese Methode als „Hot“, „Startup“ oder „Post Startup“ gekennzeichnet werden soll.<CLASS_DESCRIPTOR>
ist der Deskriptor für die Klasse, zu der die Zielmethode gehört. Die Klasseandroidx.compose.runtime.SlotTable
hätte beispielsweise den DeskriptorLandroidx/compose/runtime/SlotTable;
.<METHOD_SIGNATURE>
ist die Signatur der Methode und enthält den Namen, die Parametertypen und die Rückgabetypen der Methode. Beispiel: Die Methodefun isPlaced(): Boolean
vonLayoutNode
hat die SignaturisPlaced()Z
.Diese Muster können Platzhalter (
**
,*
und?
) enthalten, damit eine einzelne Regel mehrere Methoden oder Klassen umfassen kann.
Welchen Zweck haben die Regeln?
Eine Methode mit dem Flag
H
ist eine „heiße“ Methode und sollte vorab kompiliert werden.Eine Methode mit dem Flag
S
wird beim Start aufgerufen und sollte vorab kompiliert werden, um die Kosten für die Kompilierung und Interpretation der Methode beim Start zu vermeiden.Eine Methode mit dem Flag
P
wird nach dem Start aufgerufen.Eine Klasse, die in dieser Datei vorhanden ist, wird beim Start verwendet und sollte im Heap vorab zugewiesen werden, um die Kosten für das Laden der Klasse zu vermeiden.
So funktioniert's
- Diese Regeln können in Bibliotheken definiert werden und werden in AAR-Artefakten verpackt. 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 für die App spezifisch ist. ART kann dieses Profil dann nutzen, wenn die App auf Geräten installiert wird, um einen bestimmten Teil der Anwendung vorab zu kompilieren und so die Leistung der Anwendung zu verbessern, insbesondere beim ersten Ausführen. Hinweis: Dies hat keine Auswirkungen auf debuggbare Anwendungen.
Version 1.0.0-beta08
2. Juni 2021
androidx.compose.runtime:runtime-*:1.0.0-beta08
wird veröffentlicht. Version 1.0.0-beta08 enthält diese Commits.
API-Änderungen
State<T>
heißt jetztState<out T>
(I69049)ControlledComposition
API-Änderung, um Änderungen beim Neuzusammenstellen 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
wird veröffentlicht. Version 1.0.0-beta07 enthält diese Commits.
API-Änderungen
- Es wurden neue Compose-Compiler-APIs hinzugefügt, mit denen die vom Compiler generierten Quellinformationen während der Quellminimierung entfernt werden können. (Ia34e6)
Einführung von
ReusableContent
, 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 Steckplatztabelle für den Inhalt ignoriert, mit Ausnahme der generierten Knoten und der Werte, mit denen die Knoten aktualisiert wurden.Einführung von
ReusableComposeNode
, mit dem der emittierte Knoten wiederverwendet wird, anstatt ihn wie beiComposeNode
zu ersetzen. (I1dd86)@ComposeCompilerApi
nicht mehr@RequiresOptIn
(Iab690)
Fehlerkorrekturen
- Bei LazyColumn/Row bleiben jetzt bis zu zwei zuvor sichtbare Elemente aktiv (nicht entsorgt), auch wenn sie bereits ausgeblendet wurden. So können die aktiven Unterkompositionen von der Komponente wiederverwendet werden, wenn ein neues Element erstellt werden muss, was die Scrollleistung verbessert. (Ie5555)
Version 1.0.0-beta06
5. Mai 2021
androidx.compose.runtime:runtime-*:1.0.0-beta06
wird veröffentlicht. Version 1.0.0-beta06 enthält diese Commits.
API-Änderungen
@ComposeCompilerApi
nicht mehr@RequiresOptIn
(Iab690)
Version 1.0.0-beta05
21. April 2021
androidx.compose.runtime:runtime-*:1.0.0-beta05
wird veröffentlicht. Version 1.0.0-beta05 enthält diese Commits.
API-Änderungen
@InternalComposeApi
zum Aufzeichnen von Snapshot-Lesen und ‑Schreiben entfernt (Id134d)
Fehlerkorrekturen
- Die AndroidManifest-Dateien aus „ui-test-manifest“ und „ui-tooling-data“ sind jetzt mit Android 12 kompatibel (I6f9de, b/184718994)
Version 1.0.0-beta04
7. April 2021
androidx.compose.runtime:runtime-*:1.0.0-beta04
wird veröffentlicht. Version 1.0.0-beta04 enthält diese Commits.
Fehlerkorrekturen
Vor dieser Änderung konnten lokale kompositionsfähige Funktionen basierend auf ihren Parametern übersprungen werden. Nach dieser Änderung werden keine lokalen kompositionsfähigen Funktionen mehr übersprungen. Diese Änderung ist erforderlich, da lokale Funktionen häufig Parameter von übergeordneten Funktionen übernehmen und das Überspringen eine häufige Ursache für Fehler ist.
Hier ein Beispiel:
@Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) { @Composable fun ShowCount() { Text("Count: $count") } ShowCount() Button(onClick={ onCountChange(count + 1) }) { Text("Increment") } }
Vor dieser Änderung wurde die zusammensetzbare Funktion
ShowCount
immer übersprungen, auch nachdem der Parametercount
aktualisiert wurde. Diese Änderungen haben wir jedoch nicht vorgenommen (I5648a)Das Problem wurde behoben, bei dem
rememberSaveable()
bei Verwendung mit Eingabeparametern den alten Wert wiederherstellte (I1b110, b/182403380)
Version 1.0.0-beta03
24. März 2021
androidx.compose.runtime:runtime-*:1.0.0-beta03
wird veröffentlicht. Version 1.0.0-beta03 enthält diese Commits.
API-Änderungen
DefaultMonotonicFrameClock
wurde eingestellt. Wenn SiewithFrameNanos
oderRecomposer.runRecomposeAndApplyChanges
ohneMonotonicFrameClock
aufrufen, wird jetztIllegalStateException
ausgegeben. (I4eb0d)
Version 1.0.0-beta02
10. März 2021
androidx.compose.runtime:runtime-*:1.0.0-beta02
wird veröffentlicht. Version 1.0.0-beta02 enthält diese Commits.
Fehlerkorrekturen
- Einschränkungen für die öffentliche Nutzung experimenteller APIs erzwingen (I6aa29, b/174531520)
- Behebung des Problems, dass
rememberSaveable { mutableStateOf(0) }
nicht funktionierte, wenn es in einem Ziel von navigation-compose verwendet wurde. (I1312b, b/180042685, b/180701630)
Version 1.0.0-beta01
24. Februar 2021
androidx.compose.runtime:runtime-*:1.0.0-beta01
wird veröffentlicht. Version 1.0.0-beta01 enthält diese Commits.
Dies ist die erste Version von Compose 1.0.0 Beta.
API-Änderungen
Recomposer.runRecomposeConcurrentlyAndApplyChanges
Experimentelle API zum Neuzusammenstellen ungültiger Kompositionen außerhalb des Hauptframeschleife hinzufügen. (I342d0)- Alle mit @ReadOnlyComposable gekennzeichneten Composeables werden jetzt zur Kompilierungszeit geprüft, um sicherzustellen, dass nur andere @ReadOnlyComposables aufgerufen werden (I58961)
Die
defaultFactory
fürcompositionLocalOf
undstaticCompositionLocalOf
ist jetzt erforderlich und nicht mehr optional.Durch diese Änderung wird ein potenzieller Typfehler für nicht null-wertige Typen behoben, für die keine Standard-Factory angegeben wurde. Bisher wurde in diesem Fall eine Nullreferenz für einen nicht nullwertigen Typ zurückgegeben.
Für Typen mit zulässigen Nullwerten können Sie
{ null }
als Standard-Factory angeben.Wir empfehlen nicht, lokale Variablen mit nicht nullwertigen Typen zu verwenden, es sei denn, ein sinnvoller Standardwert kann angegeben werden. Wenn kein sinnvoller Standardwert vorhanden ist, sollte die
defaultFactory
-Lambda-Funktion eine Ausnahme auslösen. Wenn jedoch eine Ausnahme ausgelöst wird, haben die Nutzer der lokalen Variablen eine implizite Abhängigkeit von der Bereitstellung, die vom Typsystem nicht erzwungen wird. (Ifbd2a)Veraltete Symbole wurden aus der Compose-Laufzeit entfernt (I3252c)
Die verworfene Funktion
emptyContent()
wurde entfernt. Verwenden Sie stattdessen{}
. (Idb33f, b/179432510)„Anbieter“ wurde in „CompositionLocalProvider“ umbenannt.
- Der Konstruktor für „Composition“ akzeptiert keinen Schlüsselparameter mehr und wurde eingestellt.
- „currentCompositeKeyHash“ wurde in eine zusammensetzbare Property auf oberster Ebene statt in eine zusammensetzbare Funktion auf oberster Ebene umgewandelt.
- „CompositionData“ und „CompositionGroup“ wurden in den Namespace „androidx.compose.runtime.tooling“ verschoben.
- ComposableLambda wurde zu einer Schnittstelle anstelle einer konkreten Klasse und hat keine Typparameter mehr.
- ComposableLambdaN wurde zu einer Schnittstelle anstelle einer konkreten Klasse und hat keine Typparameter mehr.
- Die Funktion „snapshotFlow“ wurde in den Namespace „androidx.compose.runtime“ verschoben.
- Die Zusammenführungsmethode von SnapshotMutationPolicy ist nicht mehr experimentell
- Die Funktion „clearRoots“ auf oberster Ebene mit dem Attribut „@TestOnly“ wurde entfernt. Das ist nicht mehr erforderlich.
- Die Funktionen „keySourceInfoOf“ und „resetSourceInfo“ wurden entfernt. Sie werden nicht mehr benötigt.
- „Composer.collectKeySourceInformation“ wurde entfernt. Das ist nicht mehr erforderlich.
- Die Methoden „isJoinedKey“, „joinedKeyLeft“ und „joinedKeyRight“ wurden entfernt. Sie werden nicht mehr benötigt.
- Verschiedene APIs der obersten Ebene wurden in verschiedene Dateien verschoben und neu angeordnet. Aufgrund der Dateiklassensemantik von Kotlin wird dadurch die Binärkompatibilität, aber nicht die Quellkompatibilität beeinträchtigt. Das sollte für die meisten Nutzer kein Problem darstellen.
- (I99b7d, b/177245490)
SnapshotStateObserver ist nicht mehr experimentell (Id2e6a)
Einige zuvor eingestellte APIs wurden gelöscht (Ice5da, b/178633932)
Die folgenden Änderungen wurden an der Material API vorgenommen:
- Der Top/BottomAppBar-Parameter „contentPadding“ wurde hinzugefügt, um das Standardabstand anzupassen.
- Die Parameter in BackdropScaffold wurden neu angeordnet, um den API-Richtlinien zu folgen, dass erforderliche Parameter vor optionalen Parametern stehen müssen.
- Der Parameter
icon
in BottomNavigationItem wurde nachselected
undonClick
verschoben. - Der Parameter
alwaysShowLabels
in BottomNavigationItem wurde inalwaysShowLabel
umbenannt. bodyContent
-Parameter in einigen Komponenten wurden incontent
umbenannt.- Die Parameter in
ButtonDefaults.buttonColors()
wurden neu angeordnet. Da sich der Parametertyp nicht geändert hat, führt dies nicht zu einem Fehler im Code. Achten Sie darauf, dass Sie entweder benannte Parameter verwenden oder die Reihenfolge manuell aktualisieren. Andernfalls funktioniert Ihr Code nicht wie zuvor. - Der Parameter
secondaryVariant
wurde zudarkColors()
hinzugefügt. Diese Farbe entspricht in der Regel der Farbe vonsecondary
im dunklen Design, wird aber hinzugefügt, um für Einheitlichkeit und weitere Anpassungen zu sorgen. - ElevationDefaults und animateElevation() wurden aus der öffentlichen API entfernt, da sie nicht häufig verwendet wurden.
onValueChangeEnd
inSlider
wurde inonValueChangeFinished
umbenannt und als „nullable“ gekennzeichnet.- Der Parameter
text
inSnackbar
wurde aus Gründen der Einheitlichkeit incontent
umbenannt. - Dem Parameter
DropdownMenuItem
wurde der ParametercontentPadding
hinzugefügt, um das Standardabstand anzupassen. Außerdem wurdecontent
zu einer Erweiterung vonRowScope
. ModalDrawerLayout
wurde inModalDrawer
umbenannt.BottomDrawerLayout
wurde inBottomDrawer
umbenannt.- (I1cc66)
Version 1.0.0-alpha12
10. Februar 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha12
wird veröffentlicht. Version 1.0.0-alpha12 enthält diese Commits.
API-Änderungen
- Die Unterstützung für ViewGroups wurde aus UiApplier entfernt. Die veralteten emitView-Kompositionen wurden entfernt. (Ifb214)
- „CompositionReference“ in „CompositionContext“ umbenannt (I53fcb)
- ComponentActivity.setContent wurde in das Modul androidx.activity:activity-compose zu androidx.activity.compose.setContent verschoben. (Icf416)
- Die Snapshot API wurde aktualisiert, um sie besser an die API-Richtlinien anzupassen und interne Implementierungsklassen von der öffentlichen API auszublenden. (Id9e32)
- Die Namen der Bildschirmschoner wurden umbenannt, damit sie mit der Umbenennung von „Ambient“ in „CompositionLocal“ übereinstimmen. Ambients hießen früher AmbientFoo, jetzt heißen sie CompositionLocals. (I2d55d)
- „Ambient“ in „CompositionLocal“ und „ambientOf“/„staticAmbientOf“ in „compositionLocalOf“/„staticCompositionLocalOf“ umbenannt. Durch diese Änderung wird der Zweck von „CompositionLocal“ klarer: ein Mechanismus zum Bereitstellen und Abrufen von Werten, die lokal für eine Komposition gelten. Instanzvariablen vom Typ „CompositionLocal“ müssen mit
Local
beginnen, z. B. val LocalFoo = compositionLocalOf { Foo() }. (Ia55b6) - Die Methoden „takeMutableSnapshot“ und „takeSnapshot“ sind zu Companion-Methoden von „Snapshot“ geworden. (I91f19)
@ComposableContract
wurde zugunsten von drei spezifischeren Anmerkungen eingestellt.@ComposableContract(restartable = false)
wird zu@NonRestartableComposable
@ComposableContract(readonly = true)
wird zu@ReadOnlyComposable
@ComposableContract(preventCapture = true)
wird zu@DisallowComposableCalls
@ComposableContract(tracked = true)
wurde entfernt. (I60a9d)Die Dienstprogramme „emptyContent()“ und „(@Composable () -> Unit).orEmpty()“ wurden eingestellt, da sie keine positiven Auswirkungen auf die Leistung mehr haben und keinen Mehrwert bieten (I0484d)
snapshotFlow
undwithMutableSnapshot
sind nicht mehr experimentell (I6a45f)Recomposers können jetzt geschlossen werden. Geschlossene Rekompositionen werden fortgesetzt, bis die untergeordneten coroutines der Komposition abgeschlossen sind. Recomposer.shutDown in „cancel“ umbenannt, um einen Kontrast zu „close“ herzustellen. (Ib6d76)
Das
compose:runtime-dispatch
-Artefakt wird nicht mehr unterstützt. MonotonicFrameClock finden Sie jetzt unter compose:runtime und AndroidUiDispatcher unter compose:ui. (Ib5c36)Die API, auf die das Compose-Compiler-Plug-in ausgerichtet ist, wurde so umgestellt, dass anstelle einer konkreten Klasse eine Schnittstelle verwendet wird. Auf der Benutzeroberfläche wird auch kein Typparameter mehr verwendet.
Dies ist eine interne Änderung, die sich nicht auf die Kompatibilität des Quellcodes auswirken sollte, aber eine funktionsgefährdende Änderung des Binärcodes ist. (I3b922, b/169406779)
SnapshotMutableState wurde eingeführt (Icfd03)
DisposableEffectDisposable wurde in DisposaleEffectResult umbenannt (Ica7c6)
Recomposer.current() wurde entfernt. [Abstrakt]ComposeView verwendet jetzt standardmäßig verzögert erstellte, fensterweite Recomposer, die vom ViewTreeLifecycleOwner für das Fenster gesteuert werden. Recomposition und mitFrameNanos-basierte Animations-Ticks werden pausiert, während der Lebenszyklus des Hosts angehalten ist. (I38e11)
„Recomposer.runningRecomposers“ bietet jetzt einen globalen StateFlow mit schreibgeschützten RecomposerInfos, um den laufenden Kompositionsstatus im Prozess zu beobachten. Diese API ist Recomposer.current() vorzuziehen, das jetzt eingestellt wird. (If8ebe)
DisposableEffectDisposable wurde in DisposaleEffectResult umbenannt (I3ea68)
Version 1.0.0-alpha11
28. Januar 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha11
wird veröffentlicht. Version 1.0.0-alpha11 enthält diese Commits.
API-Änderungen
- onCommit, onDispose und onActive wurden zugunsten der SideEffect- und DisposableEffect-APIs eingestellt (If760e)
- Die emit() API und alle Überladungen wurden eingestellt und in ComposeNode umbenannt. Die APIs sind identisch, haben nur einen anderen Namen, um den Namenskonventionen von Compose zu entsprechen (I4137b).
- invalidate und compositionReference() werden jetzt zugunsten von currentRecomposeScope bzw. rememberCompositionReference eingestellt. (I583a8)
RememberObserver ersetzt CompositionLifecycleObserver und CompositionLifecycleObserver wird nicht mehr unterstützt.
RememberObserver
ist ein Ersatz fürCompositionLifecycleObserver
mit geänderter Semantik und umbenannten Methoden. Für Objekte, die nur einmal gespeichert werden, kann die Umstellung auf die neue API automatisch erfolgen. Dies ist und bleibt die empfohlene Vorgehensweise. Wenn ein Verweis jedoch in einer Komposition mehrmals gespeichert wurde, wirdonRemembered
für jeden Verweis aufgerufen, währendonEnter
nur einmal aufgerufen wird.onEnter
wurde mehrmals aufgerufen, wenn das Objekt in Unterkompositionen verwendet wurde, z. B.WithConstraints
undScaffold
. Dadurch war die Garantie für einen einzelnenonEnter
-Aufruf nicht zuverlässig und wurde fürRememberObserver
entfernt.RememberObserver
fügtonAbandoned
hinzu, das aufgerufen wird, wenn dieRememberObserver
-Instanz vom Callback zurückgegeben wird, der anremember
übergeben wurde, aber nicht im Kompositionstatus gespeichert wurde. Daher wirdonRemembered
nie aufgerufen. Das kann passieren, wenn eine Ausnahme die Zusammenstellung vor dem Abschluss beendet oder die Zusammenstellung verworfen wird, weil der Status, für den eine Zusammenstellung erstellt wurde, nicht mehr aktuell ist oder anderweitig nicht mehr benötigt wird. Wenn die Instanz vonRememberObserver
gemäß der Empfehlung oben mit einer einzelnen Referenz eine externe Ressource erfasst, geben sowohlonForgotten
als auchonAbandoned
an, dass die Ressource nicht mehr benötigt wird. Wenn das Objekt die inonRemembered
gestartete Arbeit oder zugewiesenen Ressourcen erfasst, kannonAbandoned
ignoriert werden, da es nicht aufgerufen wird, wennonRemembered
aufgerufen wird. (I02c36)collectAsState()
-Funktionen nicht als Inline-Funktionen markieren (Ia73e4)
Fehlerkorrekturen
- „WithConstraints“ wurde als „BoxWithConstraints“ überarbeitet und in „foundation.layout“ verschoben. (I9420b, b/173387208)
- TestCoroutineDispatcher bei Tests nutzen (I532b6)
Version 1.0.0-alpha10
13. Januar 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha10
wird veröffentlicht. Version 1.0.0-alpha10 enthält diese Commits.
Funktionsgefährdende Änderung
Durch die Umstrukturierung der internen Compiler-API können Änderungen an den Knoten, die durch die Komposition generiert wurden, in der Phase „Änderungen anwenden“ der Komposition gebündelt werden, nachdem alle
@Composable
-Funktionen abgeschlossen sind.Dies ist eine verhaltensbedingte Unterbrechung, die sich auf den Anwendungscode auswirken kann, da Knoten erst nach der Anwendung der Änderungen über interne und experimentelle APIs verfügbar sind. Das lässt sich in der Regel dadurch umgehen, dass Code mit solchen Abhängigkeiten in einem
SideEffect
-kompositiven Element umgeben wird, um die Ausführung des Codes so lange zu verschieben, bis die Knoten erstellt und initialisiert wurden. (I018da)
API-Änderungen
- Es wurde eine Möglichkeit hinzugefügt, zu verfolgen, ob der Recomposer Änderungen angewendet hat. (I1b3e2)
[Abstract]ComposeView APIs erweitern, um das Recycling von Compose-basierten Ansichten zu ermöglichen, indem die Zusammensetzung verworfen und später neu erstellt wird. APIs zum Installieren und Entdecken von Recomposern auf Fensterebene und CompositionReferences zum Erstellen von untergeordneten Kompositionen hinzufügen
Fügen Sie „ViewCompositionStrategy“ hinzu, um die Strategie zur Entsorgung der Zusammensetzung von [Abstract]ComposeViews zu konfigurieren. Das Standardverhalten ist die Entsorgung beim Entfernen des Fensters. (I860ab)
Fehlerkorrekturen
- Recomposer stellt jetzt einen Stream seines aktuellen Zustands bereit, mit dem sich seine Aktivität und die Aktivität der zugehörigen Effekte beobachten lassen. (Ifb2b9)
- Der native keyEvent kann jetzt über „keyEvent.nativeKeyEvent“ aufgerufen werden (I87c57, b/173086397)
Version 1.0.0-alpha09
16. Dezember 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha09
wird veröffentlicht. Version 1.0.0-alpha09 enthält diese Commits.
API-Änderungen
SlotTable, SlotReader und SlotWriter wurden aus der öffentlichen API entfernt. Diese wurden zuvor als „InternalComposeAPI“ gekennzeichnet. Jetzt sind sie im Modul „Schreiben“ enthalten.
„CompositionData“ und „CompositionGroup“ wurden als Ersatz für die UI-Tooling API hinzugefügt, um Informationen zur Komposition zu extrahieren. Diese sind öffentlich, aber nicht für die Verwendung außerhalb der UI-Tooling API vorgesehen, da sie die Rohdaten enthalten, die von der UI-Tooling API interpretiert werden (I31a9c).
Die Applier-Klasse gilt nicht mehr als (Id85b0)
Die
Applier
-Oberflä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 Anwender fügt dem bearbeiteten Baum Knoten entweder mit
insertTopDown()
oderinsertBottomUp()
ein, je nachdem, welche Leistung besser ist.Einige Bäume, z. B.
LayoutNode
undView
, lassen sich viel effizienter von unten nach oben als von oben nach unten erstellen. Vor dieser Änderung war für die Bottom-Up-Implementierung ein Stapel von Einfügungen erforderlich, der in jeden Applier kopiert werden musste, der für die Leistung eine Bottom-Up-Konstruktion benötigte. Mit dieser Änderung wirdApplier
überinsertBottomUp()
ü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 kombinierbare Aufrufe ermöglichen. Die Unterstützung dafür wird nicht eingestellt, aber die Syntax für die Deklaration eines Property-Getters als @Composable ändert sich.
Dazu wurde die Property selbst mit einer Anmerkung versehen. Diese Syntax ist inzwischen nicht mehr zulässig:
@Composable val someProperty: Int get() = ...
Die jetzt korrekte Syntax hierfür besteht darin, den Getter der Property zu annotieren:
val someProperty: Int @Composable get() = ...
Beide Syntaxen funktionieren noch einige Zeit, aber die alte Syntax wird irgendwann zu einem Kompilierungsfehler führen. (Id9197)
Fehlerkorrekturen
- Von AndroidOwner intern gemacht (Ibcad0, b/170296980)
- subcomposeInto(LayoutNode) wurde intern (Id724a)
Version 1.0.0-alpha08
2. Dezember 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha08
wird veröffentlicht. Version 1.0.0-alpha08 enthält diese Commits.
API-Änderungen
- Es wurde eine Lint-Prüfung für die Benennung und Position von zusammensetzbaren Lambda-Parametern hinzugefügt, um die Übereinstimmung mit den Compose-Richtlinien zu prüfen.
Außerdem wurden einige APIs, die
children
als Namen für das abschließende Lambda verwendet haben, gemäß der Lint-Prüfung und den Anleitungen zucontent
migriert. (Iec48e) - Der Recomposer akzeptiert keinen EmbeddingContext mehr. Die erforderlichen Planungsabhängigkeiten werden aus dem effectCoroutineContext abgerufen. FrameManager wurde eingestellt. Plattformintegrationen sollten ihre eigene globale Snapshot-Verarbeitung initialisieren. (I02369)
- Die Funktion „RestorableStateHolder.withRestorableState“ wurde in „RestorableStateProvider“ umbenannt (I66640)
Fehlerkorrekturen
- Wir haben Ambients mit dem Suffix
Ambient
eingestellt und durch neue Properties mit dem Präfix „Ambient“ ersetzt, gemäß den Richtlinien für Ambients und die Compose API. (I33440) - Altes UI-Testmodul und seine Stubs entfernen (I3a7cb)
Version 1.0.0-alpha07
11. November 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha07
wird veröffentlicht. Version 1.0.0-alpha07 enthält diese Commits.
Neue Funktionen
API-Änderungen
- Die Anmerkung „
@UnionType
“ wurde eingestellt (I57cde) - „provideDefault“ wurde als Alternative zu „provide“ hinzugefügt. Mit dieser Funktion können Sie Umgebungswerte angeben, die nur festgelegt werden, wenn noch kein Umgebungswert vorhanden ist. (Id6635, b/171024925)
- „LaunchedTask“ wurde in „LaunchedEffect“ umbenannt, um für Einheitlichkeit mit den APIs „SideEffect“ und „DisposableEffect“ zu sorgen. „LaunchedEffect“ ohne Subjektparameter ist nicht zulässig, um Best Practices zu fördern. (Ifd3d4)
- Der Applier hat jetzt die Callbacks onBeginChanges/onEndChanges, die aufgerufen werden, wenn ein Composer damit beginnt oder fertig ist, Änderungen am Baum anzuwenden. Diese können bei Bedarf für die Batch-Ressourcenverwaltung verwendet werden. (Icf476)
- Der Recomposer benötigt jetzt bei der Erstellung einen CoroutineContext (Ic4610)
- Änderungen an der internen SlotTable-Implementierung, die sich nicht auf die öffentliche API auswirken sollten. (If9828)
- Die veralteten rxjava2-Adapter, die den Anfangswert nicht berücksichtigen, wurden entfernt (Idb72f).
Fehlerkorrekturen
- foundation.Text wurde eingestellt und durch material.Text ersetzt. Eine grundlegende, neutrale Text-API, die keine Werte aus einem Design 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 zu androidx.compose.layout.ui verschoben. (I0fa98, b/170475424)
Externer Beitrag
runtime-rxjava3
-Modul für die Zusammenstellung hinzugefügt Ähnlich wieruntime-rxjava2
(I02cbf)
Version 1.0.0-alpha06
28. Oktober 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha06
wird veröffentlicht. Version 1.0.0-alpha06 enthält diese Commits.
API-Änderungen
- „Recomposer“ ist jetzt eine „CompositionReference“ und ein gültiges übergeordnetes Kompositionsereignis. Der explizite Recomposer ist jetzt an weniger Stellen erforderlich. (I4036f)
- SideEffect hat eine Entfernbare-Effekt-Entsprechung erhalten, die die Rolle von onCommit-with-params übernimmt, aber eine erforderliche onDispose-Funktion hat.
- Die rememberUpdatedState API wurde hinzugefügt, um Daten aus der Neuzusammensetzung in laufenden oder lang anhaltenden Prozessen wie DisposableEffects oder LaunchedTasks zu veröffentlichen.
- (Id50b9)
- MutableVector implementiert jetzt RandomAccess (I85d73, b/170461551)
- Die Komponente „SideEffect“ wurde hinzugefügt, um Nebenwirkungen der Komposition auf Objekte anzuwenden, die von der Komposition verwaltet werden. „SideEffect“ soll das composable „onCommit“ ersetzen. (Ia77c2)
- Neue experimentelle API „RestorableStateHolder“ Damit kann der mit [savedInstanceState] und [rememberSavedInstanceState] definierte Status für den untergeordneten Knoten gespeichert werden, bevor er entsorgt wird. So kann er beim nächsten Mal mit dem wiederhergestellten Status neu erstellt werden. (I66884, b/166586419)
Fehlerkorrekturen
- Übergänge in ComposeTestRule aktivieren; Option zum Aktivieren des blinkenden Cursors aus ComposeTestRule entfernen. (If0de3)
Version 1.0.0-alpha05
14. Oktober 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha05
wird veröffentlicht. Version 1.0.0-alpha05 enthält diese Commits.
API-Änderungen
- Experimenteller Modifikator „Modifier.pointerInput“, der die Eingabe unterbricht (Ia77d2)
- Die Scrollleistung von LazyColumn/Row wird verbessert, da bei jedem Scrollen weniger Arbeit in der Teilkomposition erforderlich ist. Die neue Methode „hasInvalidations()“ wurde für die Composition-Klasse hinzugefügt. Die Methode „hasPendingChanges()“ aus dem Recomposer wurde in „hasInvalidations()“ umbenannt (Ib2f32, b/168293643, b/167972292, b/165028371)
- „produceState“-API zum Starten von Tasks aus der Komposition hinzufügen, die einen einzelnen
State<T>
-Wert im Laufe der Zeit aktualisieren (Id4a57) - „launchInComposition“ in „LaunchedTask“ umbenannt, um den Compose API-Richtlinien zu entsprechen (I99a8e)
- Die Reihenfolge der place()-Aufrufe in benutzerdefinierten Layouts bestimmt jetzt die Zeichnungsreihenfolge für die untergeordneten Elemente (Ibc9f6)
Version 1.0.0-alpha04
1. Oktober 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha04
wird veröffentlicht. Version 1.0.0-alpha04 enthält diese Commits.
API-Änderungen
- „OwnerScope“ wurde hinzugefügt, um die Erfassung von Layout- und Zeichenbereichen zu ermöglichen, sobald sie nicht mehr gültig sind. (Ic4cf8)
- Die API „derivedStateOf“ wurde hinzugefügt, um Statusobjekte anhand einer Berechnung zu erstellen, die andere Statusobjekte lesen und daraus ableiten kann (If758b)
- TestOnly API für SnapshotStateObserver hinzugefügt (I6e2a9)
Fehlerkorrekturen
- foundation.Box wurde eingestellt. Verwenden Sie stattdessen foundation.layout.Box. (Ie5950, b/167680279)
Version 1.0.0-alpha03
16. September 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha03
wird veröffentlicht. Version 1.0.0-alpha03 enthält diese Commits.
API-Änderungen
CompositionCoroutineScope
implementiertMonotonicFrameClock
nicht mehr. Aufrufer vonwithFrameNanos
sollten die Funktion auf oberster Ebene explizit importieren. (Icb642, b/166778123)
Fehlerkorrekturen
- Globale Testfunktionen wie
onNode
oderwaitForIdle
werden nicht mehr unterstützt. Bitte migrieren Sie zu den neuen Funktionen, die in ComposeTestRule (I7f45a) definiert sind. launchInComposition
Koroutinen werden nicht mehr ohne Dispatch gestartet (Ief6af, b/166486000)
Version 1.0.0-alpha02
2. September 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha02
wird veröffentlicht. Version 1.0.0-alpha02 enthält diese Commits.
API-Änderungen
- Fügen Sie die
snapshotFlow
- undwithMutableSnapshot
-APIs hinzu, um Snapshot-Datenänderungen zu verarbeiten und zu generieren. (I3e722) Die Aufrufkonvention für kombinierbare Funktionen hat sich geändert. Dies ist eine 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 fehlerhaften Änderung auf Quellebene, da sich nur Compiler-APIs geändert haben, für die eine explizite Aktivierung erforderlich ist. (I7afd2, b/158123185)
Die Planungsmethoden wurden aus „EmbeddingContext“ entfernt (I7b9be).
onPreCommit wurde 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 vorgenommen wurden, und nicht am Anfang des nächsten Choreographer-Frames. (I70403)
Version 1.0.0-alpha01
26. August 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha01
wird veröffentlicht. Version 1.0.0-alpha01 enthält diese Commits.
Version 0.1.0-dev
Version 0.1.0-dev17
19. August 2020
androidx.compose.runtime:runtime-*:0.1.0-dev17
wird veröffentlicht. Version 0.1.0-dev17 enthält diese Commits.
API-Änderungen
- Bei benutzerdefinierten Emits kann jetzt angegeben werden, dass einer oder mehrere ihrer Setter unabhängig vom Emit übersprungen und neu zusammengesetzt werden können. (Ibbd13)
Veraltete FrameManager-Aufrufe wurden entfernt.
Interne Compose APIs wurden geändert, um den Overhead beim Verfolgen von Statusobjekten wie
mutableStateof()
zu reduzieren (I80ba6)Die
state { ... }
-Komponente wird jetzt zugunsten expliziter Aufrufe vonremember { mutableStateOf(...) }
eingestellt. Dadurch wird die API-Oberfläche insgesamt und die Anzahl der Konzepte für die Zustandsverwaltung reduziert. Außerdem entspricht dies demby mutableStateOf()
-Muster für die Delegation von Klasseneigenschaften. (Ia5727)Bei Flow.collectAsState wird der Standard-Dispatcher jetzt aus der Zusammensetzung selbst bestimmt, anstatt standardmäßig Dispatchers.Main zu verwenden. (I9c1d9)
Der Absturz, der beim Verwenden von etwas, das den Status speichert, innerhalb der For-Schleife auftrat, wurde behoben. Da derselbe Schlüssel in savedInstanceState() jetzt zulässig ist, wurde die API von UiSavedStateRegistry an diese neue Anforderung angepasst (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561)
Fehlerkorrekturen
emitView
wurde eingestellt. Verwenden Sie stattdessen nach MöglichkeitAndroidView
, um Ansichten in Compose zu senden. Das direkte Erstellen von Ansichten und Ansichtsgruppen wird in Zukunft nicht mehr unterstützt, es sei denn, sie sind Blätter im Kompositionbaum. In diesem Fall kann dies mit AndroidView erreicht werden. (I29b1e, b/163871221)
Version 0.1.0-dev16
5. August 2020
androidx.compose.runtime:runtime-*:0.1.0-dev16
wird veröffentlicht. Version 0.1.0-dev16 enthält diese Commits.
API-Änderungen
Die Standardmutation für
mutableStateOf()
,ambientOf()
undsavedInstanceStateOf()
wurde vonreferentialEqualityPolicy()
instructuralEqualityPolicy()
geändert.Standardmäßig wird jetzt
==
anstelle von===
verwendet, um zu entscheiden, ob ein neuer Wert, der einermutableStateOf()
-Instanz zugewiesen wird, als Änderung betrachtet wird.Weitere Informationen finden Sie unter https://kotlinlang.org/docs/reference/equality.html.
ambientOf()
undsavedInstanceStateOf()
verwendenmutableStateOf()
in ihren Implementierungen. Daher wurden sie geändert, um mitmutableStateOf()
übereinzustimmen.Die Verwendung von struktureller Gleichheit entspricht eher den Erwartungen der Entwickler.
Beispiel:
val state = mutableStateOf(1f)
gefolgt von
state.value = 1f
wird nicht mehr als Änderung an
state
betrachtet und die Verwendung vonstate
während der Komposition muss nicht mehr neu erstellt werden.Dies ist eine bahnbrechende Änderung, hat aber in den meisten Fällen (z. B. bei Verwendung von Klassen, die
equals()
nicht überschreiben) keine spürbaren Auswirkungen auf eine Anwendung.Bei Klassen, die
equals()
überschreiben, z. B.data
-Klassen, kann es zu einer Leistungsverschlechterung kommen, da ihreequals()
-Methoden jetzt standardmäßig aufgerufen werden, wenn sie einermutableStateOf()
zugewiesen werden.Das vorherige Verhalten kann wiederhergestellt werden, indem Sie den Richtlinienparameter
policy = referentialEqualityPolicy()
zu Aufrufen vonmutableStateOf()
,ambientOf()
undsavedInstanceStateOf()
hinzufügen. (Ic21a7)Row
undColumn
sind jetzt Inline-Funktionen, wodurch der Overhead bei der Verwendung erheblich reduziert wird. (I75c10)
Fehlerkorrekturen
- „setViewContent“ wurde eingestellt. Verwende stattdessen „setContent“. (I7e497, b/160335130)
Es wurde die MonotonicFrameAnimationClock hinzugefügt, mit der du eine MonotonicFrameClock als AnimationClockObservable verwenden kannst, um die Lücke zwischen den neuen coroutinesbasierten Uhren und APIs zu schließen, die noch die alten callbackbasierten Uhren verwenden.
Das MonotonicFrameClock-Äquivalent von ManualAnimationClock ist jetzt ManualFrameClock. (I111c7, b/161247083)
Modifier.stateDraggable wurde komplett überarbeitet und in Modifier.swipeable umbenannt. Es wurde eine neue Klasse „SwipeableState“ eingeführt und „DrawerState“ und „BottomDrawerState“ wurden so umgestellt, dass sie von dieser Klasse erben. [Modal/Bottom]DrawerLayout akzeptiert keinen Parameter „onStateChange“ 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 das Eintippen von
Modifier.padding().background() + anotherModifier
, was die Abfolge unterbricht und die Lesbarkeit erschwert (Iedd58, b/161529964)SubcomposeLayout wird hinzugefügt. Es ist ein Low-Level-Primitive, mit dem die untergeordneten Elemente während der Messung zusammengestellt werden können, wenn einige Werte erst später während der Messung für die Zusammensetzung der Unterstruktur verwendet werden sollen. Beispielsweise wird „WithConstraints“ nicht mit „SubcomposeLayout“ implementiert. (I25cc8)
„Material FilledTextField“ wurde in „TextField“ umbenannt und „foundational TextField“ in „BaseTextField“, damit die einfachste gewünschte API leicht zu finden und zu verwenden ist (Ia6242, b/155482676)
Modifier.drawBackground wurde in Modifier.background umbenannt (I13677)
Version 0.1.0-dev15
22. Juli 2020
androidx.compose.runtime:runtime-*:0.1.0-dev15
wird veröffentlicht. Version 0.1.0-dev15 enthält diese Commits.
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 oben unter Abhängigkeiten deklarieren aktualisieren.
API-Änderungen
Die Anmerkung „
@Model
“ ist jetzt eingestellt. Verwenden Sie stattdessen „state“ und „mutableStateOf“. Diese Entscheidung wurde nach sorgfältiger Prüfung getroffen.Begründung
Dazu gehören unter anderem:
- Reduziert die API-Oberfläche und die Konzepte, die wir vermitteln müssen
- Entspricht eher anderen vergleichbaren Toolkits (Swift UI, React, Flutter)
- Umkehrbare Entscheidung.
@Model
können wir später jederzeit wieder einführen. - Beseitigt Sonderfälle und schwer zu beantwortende Fragen zur Konfiguration von
@Model
, die wir bearbeiten müssen @Model
-Datenklassen, equals, Hash-Code usw.- Wie kann ich festlegen, dass einige Properties „beobachtet“ und andere nicht werden?
- Wie kann ich festlegen, ob bei der Beobachtung strukturelle oder referenzielle Gleichheit verwendet werden soll?
- Reduziert die „Magie“ im System. Dies verringert die Wahrscheinlichkeit, dass jemand annimmt, dass das System intelligenter ist als es ist (z. B. dass es weiß, wie eine Liste verglichen wird).
- Ermöglicht eine intuitivere Detaillierung der Beobachtungen.
- Verbesserte Umstellung von Variablen zu Eigenschaften in Klassen
- Ermöglicht möglicherweise manuelle, bundeslandspezifische Optimierungen
- Passt besser zum Rest des Systems und reduziert Unklarheiten in Bezug auf unveränderliche Zustände oder unsere „Akzeptanz von veränderlichen Zuständen“
Migrationshinweise
Fast alle vorhandenen Verwendungen von
@Model
können auf eine von zwei Arten relativ einfach umgewandelt werden. Im folgenden Beispiel wird beispielhaft eine@Model
-Klasse mit zwei Properties verwendet, die in einem Composeable eingebunden ist.@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 vereinfacht. Erstellen Sie im Grunde alle zuvor
var
-Properties alsval
-Properties einer Datenklasse, verwenden Sie dannstate
anstelle vonremember
und weisen Sie den Statuswert mithilfe dercopy(...)
-Methode der Datenklasse den geklonten Kopien des Originals zu.Hinweis: Dieser Ansatz funktioniert nur, wenn die einzigen Mutationen an dieser Klasse im selben Gültigkeitsbereich vorgenommen wurden, in dem die
State
-Instanz erstellt wird. Wenn sich die Klasse intern außerhalb des Verwendungsbereichs mutiert und Sie sich auf die Beobachtung dieser Mutation verlassen, 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 Delegate verwenden
Dieser Ansatz wird mit den Property Delegaten von Kotlin und der
mutableStateOf
API vereinfacht, mit der Sie MutableState-Instanzen außerhalb der Komposition erstellen können. Ersetzen Sie im Grunde allevar
-Properties der ursprünglichen Klasse durchvar
-Properties mitmutableStateOf
als Property-Delegierter. Das hat den Vorteil, dass sich die Verwendung der Klasse nicht ändert, sondern nur die interne Implementierung. Das Verhalten ist jedoch nicht vollständig mit dem ursprünglichen Beispiel identisch, da jede Property jetzt einzeln beobachtet und abonniert wird. Die Neuzusammensetzungen, die Sie nach dieser Umstrukturierung sehen, können 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 Codegenerierungsstrategie des Compose-Compilers. Vor der Änderung hat der Compose-Compiler Aufrufe in kombinierbare Funktionen umgewandelt. Durch diese Änderung wird der Body einer zusammensetzbaren Funktion jetzt transformiert und der Aufrufort bleibt (meistens) unverändert.
Das bedeutet, dass der Großteil der Logik, die mit der Compose-Laufzeit kommuniziert, am Anfang des Funktionsblocks statt am Aufrufort ausgeführt wird.
Diese Änderung sollte für alle Verwendungen von compose quellenkompatibel sein. Die meisten Nutzer von Compose müssen aufgrund dieser Änderung keinen Code aktualisieren.
Um diese Arbeit zu unterstützen, wurde die JVM-Signatur aller kombinierbaren Funktionen geändert. Eine kompostierbare Funktion, die einen einzelnen Parameter akzeptiert, wird in eine Funktion umgewandelt, die drei Parameter akzeptiert. Die zusätzlichen Parameter sind der Komponist, eine Ganzzahl „Schlüssel“ und eine Bitmasken-Ganzzahl, die zum Übertragen von Metadaten über Aufrufe verwendet wird.
Mit Compose werden jetzt auch Standardargumente in eine kombinierbare Funktion umgewandelt. Dies geschieht ohne zusätzliche synthetische Standardüberladung der Funktion selbst. Daher führt diese Änderung dazu, dass weniger Funktionen definiert werden.
Bekannte beabsichtigte Verhaltensänderungen, die sich daraus ergeben:
- Einige Anrufe werden übersprungen, die zuvor nicht übersprungen wurden.
- Zusammensetzbare Ausdrücke in Standardargumentausdrücken werden jetzt korrekt abonniert und verarbeitet.
Dabei wurden einige Optimierungen vorgenommen: Das Ergebnis von Parametervergleichen wird über den Aufrufgraphen an andere kombinierbare Funktionen weitergegeben. Dies führt zu weniger Vergleichen bei der Laufzeit, reduziert die Größe der Steckplatztabelle und führt dazu, dass zusammensetzbare Funktionen, die zuvor nicht übersprungen wurden, häufiger übersprungen werden. 2 Parameter, die zur Kompilierungszeit als „statisch“ eingestuft werden, werden in der Laufzeit nicht mehr verglichen oder gespeichert. Dadurch wird die Anzahl der Vergleiche und die Größe der Steckplatztabelle reduziert. 3. Die Kontrollflussstruktur des Funktionskörpers wird verwendet, um die Anzahl der generierten Gruppen zu minimieren. Dadurch wird die Größe der Steckplatztabelle reduziert und die Laufzeit wird entlastet. 4. Nicht verwendete Dispatch- und Empfängerparameter für Funktionen werden bei der Bestimmung der Überspringbarkeit der Funktion nicht berücksichtigt, wenn sie nicht im Funktionskörper verwendet werden.
Die meisten bahnbrechenden Änderungen betreffen APIs, auf die der Compiler direkt ausgerichtet ist. Die normale Verwendung von Compose ist davon nicht betroffen: 1. Composer::startExpr wurde entfernt. Composer::endExpr wurde entfernt. Composer::call wurde eingestellt. Die Überladungen von
key
ohne Varargs wurden entfernt. Verwenden Sie ab sofort die Versionvararg
. 5. Die Anmerkung „Pivotal“ wurde eingestellt. Verwenden Sie stattdessenkey
. 6. ScopeUpdateScope::updateScope wurde geändert, sodass jetzt eine Funktion 3 statt einer Funktion 1 erwartet wird. 7. „restartableFunction“ und „restartableFunctionN“ wurden um zusätzliche Parameter zur Kompilierungszeit ergänzt (I60756, b/143464846)sortWith und removeRange zu MutableVector hinzugefügt (Icccf7)
Standardmethode für CompositionLifecycleObserver hinzugefügt (I24289)
Für Applier ist jetzt eine clear()-Methode zum Entfernen von Kompositionen erforderlich (Ibe697)
MutableVector wurde asMutableList() hinzugefügt, damit es an die öffentliche API übergeben werden kann, ohne die gesamte Liste kopieren zu müssen. (I298df)
„rememberCoroutineScope()“ wurde hinzugefügt, um in der Komposition einen verwalteten CoroutineScope zum Starten von Jobs als Reaktion auf Ereignisse abzurufen. (I0e264)
MutableVector ist eine neue Sammlung, die keine der Standard-Collection-Schnittstellen implementiert. Diese Sammlung bietet eine höhere Geschwindigkeit als andere Anforderungen und ist nur für interne Implementierungen vorgesehen. (I8ebd6)
StableMutableList
undStableMutableMap
wurden vorübergehend entfernt, um ein Problem in der erforderlichen Version von Kotlin Compose zu vermeiden. Diese Schnittstellen werden wieder eingeführt, sobald Compose auf eine Kotlin-Version aktualisiert wurde, bei der das Problem nicht auftritt.SnapshotStateList
undSnapshotStateMap
sind jetzt öffentlich, werden aber eingestellt, sobaldStableMutableList
undStableMutableMap
wiederhergestellt sind. (Ia7769)Top-Level-Funktion „withFrameNanos“ für das Animations-Timing hinzufügen (Ie34c5)
Die Anmerkung „@Untracked“ wurde eingestellt. Ersetzen Sie das durch @ComposableContract(tracked=false) (Id211e).
„RestartableFunction“ und die zugehörigen APIs wurden in „ComposableLambda“ usw. umbenannt. Diese APIs wurden nur vom Compiler verwendet, sodass dies normalerweise keine Auswirkungen auf die Kompatibilität auf Quellebene hat. Die Umbenennung sollte vor allem dazu dienen, die Funktion dieser Klasse besser zu verdeutlichen, wenn sie in Stack-Traces erscheint (I7eb25).
Die @Composable-Anmerkung ist für Klassen nicht mehr gültig (Ia5f02)
Ambient<T>
ist jetzt @Stable statt @Immutable (I0b4bb)Vor dieser Änderung hat das Compose-Compiler-Plug-in Aufrufe an Konstruktoren innerhalb einer @Composable-Funktion nicht trivial abgefangen, wenn ein (I5205a, b/158123804)
Das Recompose-Komposit ist nicht mehr nützlich. Die meisten Neuzusammensetzungen sollten aufgrund von MutableState-Zuweisungen erfolgen. Für alles andere wird empfohlen, die Funktion
invalidate
zu verwenden, um eine Neuzusammensetzung des aktuellen Bereichs auszulösen. (Ifc992)„Beobachten“ ist keine nützliche Abstraktion mehr. Wenn Sie sie replizieren möchten, können Sie einfach eine kombinierbare Funktion erstellen, die einen kombinierbaren Lambda-Parameter ausführt. Beispiel:
@Composable fun Observe(body: @Composable () -> Unit) = body()
(I40d37)@Direct wurde zugunsten von @ComposableContract(restartable=false) eingestellt (If4708)
Es wurde ein Adapter für den kürzlich eingeführten StateFlow hinzugefügt, mit dem der Anfangswert vorab ausgefüllt werden kann, damit der zurückgegebene Status nicht null sein kann (I61dd8, b/156233789)
Adapter für Flow hinzugefügt Beispiel für die Verwendung: val value by flow.collectAsState() (If2198, b/153375923)
[Veränderlich]Operatoren für die Deklaration von Statuseigenschaften wurden in Erweiterungen verschoben, um die Optimierung von Property Delegate-Funktionen in Kotlin 1.4 zu unterstützen. Anrufer müssen Importe hinzufügen, um
by state { ... }
oderby mutableStateOf(...)
weiterhin verwenden zu können. (I5312c)androidx.compose.ViewComposer wurde in androidx.ui.node.UiComposer verschoben und androidx.compose.Emittable wurde entfernt. Es war mit ComponentNode redundant. androidx.compose.ViewAdapters wurde entfernt. Dieser Anwendungsfall wird nicht mehr unterstützt. Compose.composeInto wurde eingestellt. Verwenden Sie stattdessen
setContent
odersetViewContent
. Compose.disposeComposition wurde eingestellt. Verwenden Sie stattdessen die Methodedispose
auf dem vonsetContent
zurückgegebenenComposition
. androidx.compose.Compose.subcomposeInto wurde in androidx.ui.core.subcomposeInto verschoben ComponentNode#emitInsertAt wurde in ComponentNode#insertAt umbenannt ComponentNode#emitRemoveAt wurde in ComponentNode#removeAt umbenannt ComponentNode#emitMode wurde in ComponentNode#move umbenannt (Idef00)Das Flag
ComposeFlags.COMPOSER_PARAM
wurde intrue
geändert. Dadurch ändert sich die Codegenerierungsstrategie für das Compose-Plug-in. Im Allgemeinen 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 Änderung, die die Binärkompatibilität jedoch bei allen zulässigen Verwendungen von compose beibehalten sollte. (I7971c)Funktionsgefährdende Änderungen an der Ambients API Weitere Informationen finden Sie im Log und in der
Ambient<T>
-Dokumentation (I4c7ee, b/143769776).„ui-livedata“ wurde hinzugefügt – 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 werden nicht mehr unterstützt. „null“ ist nicht immer der beste Standardwert. Wenn Sie beispielsweise eine Liste haben, 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 typisierten Nullwerten verwendet werden (I6847f, b/153532190)Neue Funktionen „listSaver()“ und „mapSaver()“, mit denen sich benutzerdefinierte Saver-Objekte leichter schreiben lassen (I8cf68, b/152331508)
Neue Funktionen: „savedInstanceState()“ und „rememberSavedInstanceState()“. Sie ähneln „state()“ und „remember()“, unterstützen aber den gespeicherten Instanzstatus (If1987, b/152025209)
Fehlerkorrekturen
runOnIdleCompose
inrunOnIdle
umbenannt (I83607)- LayoutNode ist jetzt eine experimentelle API (I4f2e9)
- androidx.ui.foundation.TextFieldValue und androidx.ui.input.EditorValue wurden eingestellt. Die Composeables „TextField“, „FilledTextField“ und „CoreTextField“, die diesen Typ verwenden, werden ebenfalls eingestellt. Verwenden Sie stattdessen androidx.ui.input.TextFieldValue (I4066d, b/155211005).
- Die verworfene DrawBackground API wurde zugunsten der drawBackground-Erweiterungs-APIs für Modifier entfernt. Die Implementierungen von „color“, „brush“ und „paint drawBackground“ wurden überarbeitet, um Codepfade zu reduzieren und die Anforderung zu entfernen, dass Modifier als Teil der Komposition erstellt werden müssen. (I0343a)
- Zusammenstellende APIs der höheren Ebene, die einen Canvas bereitstellen, wurden aktualisiert, um stattdessen CanvasScope bereitzustellen. So müssen Nutzer keine eigenen Paint-Objekte mehr verwalten. Nutzer, die weiterhin Zugriff auf ein Canvas benötigen, können die Erweiterungsmethode „drawCanvas“ verwenden. Diese bietet einen Rückruf, um Zeichenbefehle für das zugrunde liegende Canvas auszugeben. (I80afd)
- Die API für die abschließende Lambda-Funktion „WithConstraints“ wurde geändert. Anstelle von zwei Parametern hat es jetzt einen Empfängerbereich, der zusätzlich zu „constraints“ und „layoutDirection“ die Eigenschaften „minWidth“, „maxWidth“, „minHeight“ und „maxHeight“ in Dp bietet (I91b9a, b/149979702)
- Modifikator für symmetrisches Padding hinzugefügt. (I39840)
- „wrapContentWidth“ und „wrapContentHeight“ wurden aktualisiert, damit eine vertikale oder horizontale Ausrichtung erwartet wird. Der Gravitationsmodifikator wurde aktualisiert, um eine vertikale oder horizontale Ausrichtung zuzulassen. „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).
- Verbesserungen an der DrawModifier API:
- Der Empfängerbereich für draw() wurde zu ContentDrawScope geändert.
- Alle Parameter für „draw()“ entfernt
- DrawScope hat dieselbe Oberfläche wie das bisherige 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) - Der Modifikator-Plus-Operator wurde durch Funktionen der werkseitigen Erweiterung ersetzt (I225e4)
- Auf Mitglieder von „RowScope“ und „ColumnScope“ kann jetzt auch außerhalb von „Row“ und „Column“ zugegriffen werden. (I3a641)
- „LayoutFlexible“ in „LayoutWeight“ umbenannt. Der Parameter „tight“ wurde in „fill“ umbenannt. (If4738)
- „WithConstraints“ hat den Parameter „LayoutDirection“ erhalten (I6d6f7)
- Der Hintergrund wurde in „DrawBackground“ umbenannt und standardmäßig gespeichert (Ia0bd3).
- ButtonStyle wurde durch separate Funktionen ersetzt und die Textüberladung (String) wurde entfernt. Nutzungsinformationen finden Sie in den aktualisierten Beispielen. (If63ab, b/146478620, b/146482131)
runOnIdleCompose
undrunOnUiThread
sind jetzt globale Funktionen anstelle von Methoden in ComposeTestRule. (Icbe8f)
Externer Beitrag
- Entfernen nicht benötigter APIs wie Looper und Handler aus der Compose Runtime-Portierungsebene (I6847d)
Flow<T>.collectAsState()
ohne Anfangswert wird eingestellt. Verwenden Sie stattdessenStateFlow<T>
oder geben Sie einen expliziten Anfangswert an. (I63f98, b/157674865)