Erstellungslaufzeit
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.Snapshots
(Siehe API-Referenzdokumentation für alle compose-Pakete
Letzte Aktualisierung | Stabile Version | Releasekandidat | Beta-Ausgabe | Alpharelease |
---|---|---|---|---|
17. April 2024 | 1.6.6 | − | − | 1.7.0-alpha07 |
Struktur
Compose ist eine Kombination aus sieben Maven-Gruppen-IDs in androidx
. Jede Gruppe enthält eine ausgewählte Teilmenge von Funktionen mit jeweils eigenen Versionshinweisen.
In dieser Tabelle werden die Gruppen und Links zu den einzelnen Versionshinweisen erläutert.
Gruppe | Beschreibung |
---|---|
compose.animation | Animationen in den Jetpack Compose-Anwendungen erstellen, um die Nutzererfahrung zu verbessern. |
compose.compiler | @Composable-Funktionen transformieren und Optimierungen mit einem Kotlin-Compiler-Plug-in aktivieren |
compose.foundation | Schreiben Sie Jetpack Compose-Anwendungen mit einsatzbereiten Bausteinen und erweitern Sie die Grundlage, um Ihre eigenen Designsystemteile zu erstellen. |
compose.material | Erstellen Sie Jetpack Compose-Benutzeroberflächen mit einsatzbereiten Material Design-Komponenten. Das ist der übergeordnete Einstiegspunkt von Compose. Hier stellen wir Komponenten bereit, die den unter www.material.io beschriebenen entsprechen. |
compose.material3 | Erstellen Sie Jetpack Compose-Benutzeroberflächen mit Material Design 3 Components, der nächsten Entwicklung des Material Design. Material 3 enthält aktualisierte Designs und Komponenten sowie Personalisierungsfunktionen wie dynamische Farben. Das Design ist an den visuellen Stil und die System-UI von Android 12 angepasst. |
compose.runtime | Grundlegende Bausteine des Programmiermodells und der Statusverwaltung von Compose sowie der Kernlaufzeit für das Targeting des Compiler-Plug-ins „Compose“. |
compose.ui | Grundlegende Komponenten der Editor-UI, die für die Interaktion mit dem Gerät erforderlich sind, einschließlich Layout, Zeichnung und Eingabe. |
Abhängigkeiten deklarieren
Zum Hinzufügen einer Abhängigkeit von Compose müssen Sie Ihrem Projekt das Google Maven-Repository hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.
Fügen Sie der Datei build.gradle
für Ihre Anwendung oder Ihr Modul die Abhängigkeiten für die benötigten Artefakte hinzu:
Groovig
dependencies { implementation "androidx.compose.runtime:runtime:1.6.6" implementation "androidx.compose.runtime:runtime-livedata:1.6.6" implementation "androidx.compose.runtime:runtime-rxjava2:1.6.6" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.12" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.runtime:runtime:1.6.6") implementation("androidx.compose.runtime:runtime-livedata:1.6.6") implementation("androidx.compose.runtime:runtime-rxjava2:1.6.6") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.12" } kotlinOptions { jvmTarget = "1.8" } }
Weitere Informationen zu Abhängigkeiten finden Sie unter Build-Abhängigkeiten hinzufügen.
Feedback
Dein Feedback hilft uns, Jetpack zu verbessern. Lassen Sie uns wissen, wenn Sie neue Probleme entdecken oder Ideen zur Verbesserung dieser Bibliothek haben. Sehen Sie sich die vorhandenen Probleme in dieser Bibliothek an, bevor Sie eine neue erstellen. Durch Klicken auf die Stern-Schaltfläche können Sie zu einem vorhandenen Problem abstimmen.
Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.
Runtime Tracing Version 1.0
Version 1.0.0-beta01
29. November 2023
androidx.compose.runtime:runtime-tracing:1.0.0-beta01
wird freigegeben. 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 freigegeben. Version 1.0.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
- Abhängigkeiten an die niedrigsten unterstützten stabilen Versionen (z. B. compose-runtime und Nachverfolgungslaufzeit) angepinnt
Version 1.0.0-alpha04
23. August 2023
androidx.compose.runtime:runtime-tracing:1.0.0-alpha04
wird freigegeben. Version 1.0.0-alpha04 enthält diese Commits.
Neue Funktionen
- Kompatibel mit den neuesten Versionen von Benchmark und Tracing Perfetto, wodurch Unterstützung für das Tracing von Kompositionen beim App-Start (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)- Tracing Perfetto SDK APIs mit
android.os.Trace
konsistent (I73ba0, b/282199917) - Voraussetzungen für das Tracing beim Anwendungsstart (Iad890)
- Experimentelle und öffentliche API-Dateien zusammengeführt (I0f2e1, b/278769092)
Version 1.0.0-alpha02
8. Februar 2023
androidx.compose.runtime:runtime-tracing:1.0.0-alpha02
wird freigegeben. Version 1.0.0-alpha02 enthält diese Commits.
Neue Funktionen
- Keine funktionalen Änderungen. Mehrere Leistungsoptimierungen in nachgelagerten Abhängigkeiten
androidx.tracing:tracing-perfetto*
.
Version 1.0.0-alpha01
7. September 2022
androidx.compose.runtime:runtime-tracing:1.0.0-alpha01
wird freigegeben. Version 1.0.0-alpha01 enthält diese Commits.
Neue Funktionen
androidx.compose.runtime:runtime-tracing
ist eine Bibliothek, die – sofern entsprechende Tools diese unterstützen (demnächst verfügbar) – erweitertes Tracing in einer Compose-App ermöglicht. Diese erste Version ist 1.0.0-alpha01.
Version 1.7
Version 1.7.0-alpha07
17. April 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha07
wird freigegeben. Version 1.7.0-alpha07 enthält diese Commits.
Neue Funktionen
- Es wurde die Möglichkeit hinzugefügt, ein lokales Kompositions-Lokal bereitzustellen, das auf der Grundlage der Werte anderer Kompositionsquellen berechnet wird, entweder standardmäßig mithilfe von
compositionLocalWithComputedDefault()
oder durch Bereitstellung einer Lambda-Funktion zur Berechnung des Werts mithilfe vonprovidesComputed
anstelle vonprovides
. - Der Wert einer lokalen Zusammensetzung kann mithilfe der
currentValue
-Eigenschaft der lokalen Zusammensetzung abgerufen werden, auf die innerhalb der Lambda-Berechnung der Wert zugegriffen werden kann. Wird anstelle voncurrent
verwendet, auf das nur in@Composable
-Funktionen zugegriffen werden kann. (Iadbc0)
API-Änderungen
- Neu erstellte Statusobjekte sind mit ihrem Ausgangszustand sofort über andere Snapshots, einschließlich des globalen Snapshots, zugänglich. Nachfolgende Änderungen sind erst sichtbar, wenn der Snapshot, in dem das Objekt erstellt wurde, angewendet wird.
- Der Anfangszustand von
mutableStateOf()
sowie deren primitive Versionen sind der Wert, der als Parameter anmutableStateOf()
übergeben wird. Der Anfangszustand vonmutableStateListOf()
undmutableStateMapOf()
ist leer. Snapshot.isInSnapshot
undSnapshot.PreexistingSnapshotId
wurden hinzugefügt, mit denen ein Statusobjekt aktiviert wird, um den sofortigen Zugriff über den globalen Snapshot nach seiner Erstellung zu unterstützen.- Benutzerdefinierte Statusobjekte können unterstützen, dass sofort darauf zugegriffen werden kann. Dazu folgen Sie dem Muster der Änderungen, die an den integrierten Snapshot-Objekten vorgenommen wurden. (I84a17)
Fehlerkorrekturen
- Das Zusammenführen von
readObserver
in verschachtelten Snapshots wurde korrigiert. Dies hat zur Unterentwertung verschachtelter abgeleiteter Status geführt, wenn sie in einemsnapshotFlow
verwendet werden. (Idf138)
Version 1.7.0-alpha06
3. April 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha06
wird freigegeben. Version 1.7.0-alpha06 enthält diese Commits.
Fehlerkorrekturen
- Korrektur nur zur Verarbeitung von
providesDefault
(538f45) mit einzelnen Werten - Deadlock beim Zugriff auf den Frame Clock mit Recomposer vermeiden (07e5c6)
Version 1.7.0-alpha05
20. März 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha05
wird freigegeben. Version 1.7.0-alpha05 enthält diese Commits.
Fehlerkorrekturen
- Verspätete Änderungen an der deaktivierten Zusammensetzung löschen (5950bc)
Version 1.7.0-alpha04
6. März 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha04
wird freigegeben. Version 1.7.0-alpha04 enthält diese Commits.
Leistungsverbesserungen
- Rufen Sie
Snapshot.current
einmal pro abgeleiteten Statusbewertung auf (ee7daf). currentRecord
einmal pro Beobachtung in der Zusammensetzung lesen (b882b2)- Versehentliche Zuweisung von Iterationen in
snapshotFlow
entfernen (231e56) nonSkippingGroupOptimization
für Erstellungsbibliotheken aktivieren. Dadurch wird der generierte Code für alle nicht neustartbaren zusammensetzbaren Funktionen in androidx effizienter. Wir planen, diese Option in Zukunft standardmäßig zu aktivieren. I(acbc08)
Version 1.7.0-alpha03
21. Februar 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha03
wird freigegeben. Version 1.7.0-alpha03 enthält diese Commits.
API-Änderungen
- Ersetzungsgruppen einführen, um die Erkennung von Änderungen zu verbessern (0941b5)
Leistungsverbesserungen
- Arbeitsspeicherzuweisung bei der Erkennung von Änderungen verbessern (53e7fd)
- Speicherleck im Composer beheben (0e097d)
- Verwenden Sie
ScopeMap
, um bei der Neuzusammensetzung Entwertungen zu übergeben (e19a7e). - Zuordnung für Entwertungen optimieren, um nur abgeleitete Status beizubehalten (f11c44)
IdentityArraySet
-Nutzungen durchScatterSet
(db572e) ersetzenremoveScope
inScopeMap
optimieren (bb0530)
Version 1.7.0-alpha02
7. Februar 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha02
wird freigegeben. Version 1.7.0-alpha02 enthält diese Commits.
Fehlerkorrekturen
- Zusammensetzbare Lambdas in Unterzusammensetzungen im selben Frame entwerten. (98301c)
- Rufe den
onRelease
-Callback in der gleichen Reihenfolge wieonForgotten
auf. (2cd790) - Geänderte Status filtern, die in
snapshotFlow
nicht beobachtet werden. (796b80)
Leistungsverbesserungen
- Ändern Sie den Snapshot-Beobachter, wenn er bereits transparent ist. (f60f30)
SnapshotIdSet.lowest()
optimieren. (7ae149)- Verwenden Sie einen
fold()
ohne Zuweisung inSnapshotIdSet
. (532b7d) - Iterator-Zuweisung entfernen (83f96b)
Version 1.7.0-alpha01
24. Januar 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha01
wird freigegeben. Version 1.7.0-alpha01 enthält diese Commits.
Leistungsoptimierungen
- Möglichkeit zum Erstellen von Slots hinzufügen, nachdem eine untergeordnete Gruppe hinzugefügt wurde (b5960c)
- Aufzeichnungsänderungen von Snapshot-Status optimieren (28c3fe)
- Modus für starkes Überspringen aktivieren (ed1766)
Fehlerkorrekturen
- Standardparameter-Meta in intrinsischer Speicher berücksichtigen (096665)
currentCompoundHashKey
in weiteren Fällen eindeutig machen (d4a872)- Gruppen beim Beenden des Inline-Funktionsaufrufs realisieren (2a90fc)
Version 1.6
Version 1.6.6
17. April 2024
androidx.compose.runtime:runtime-*:1.6.6
wird freigegeben. Keine Änderungen seit dem letzten Release.
Version 1.6.5
3. April 2024
androidx.compose.runtime:runtime-*:1.6.5
wird freigegeben. Version 1.6.5 enthält diese Commits.
Version 1.6.4
20. März 2024
androidx.compose.runtime:runtime-*:1.6.4
wird freigegeben. Version 1.6.4 enthält diese Commits.
Version 1.6.3
6. März 2024
androidx.compose.runtime:runtime-*:1.6.3
wird freigegeben. Version 1.6.3 enthält diese Commits.
Version 1.6.2
21. Februar 2024
androidx.compose.runtime:runtime-*:1.6.2
wird freigegeben. Version 1.6.2 enthält diese Commits.
Version 1.6.1
7. Februar 2024
androidx.compose.runtime:runtime-*:1.6.1
wird freigegeben. Version 1.6.1 enthält diese Commits.
Fehlerkorrekturen
- Rufe den
onRelease
-Callback in der gleichen Reihenfolge wieonForgotten
auf. (2cd790) - Geänderte Status filtern, die in
snapshotFlow
nicht beobachtet werden. (796b80)
Version 1.6.0
24. Januar 2024
androidx.compose.runtime:runtime-*:1.6.0
wird freigegeben. Version 1.6.0 enthält diese Commits.
Wichtige Änderungen seit Version 1.5.0
Neue Funktionen
- Erneute Auslösen von Ausnahmen, die während der Neuzusammensetzungsschleife verschluckt werden (4dff9a)
Leistungsoptimierungen
- Aufzeichnungsänderungen von Snapshot-Status optimieren (28c3fe)
rememberSaveable
optimieren (f01d79)- Erneutes Lesen von abgeleiteten Status aufschieben, bis Änderungen aufgezeichnet werden (f38099)
- Bereitstellung lokaler Zusammensetzungswerte verbessern (a337ea)
Fehlerkorrekturen
- Speicherleck in Slottabelle beheben (73fcfe)
- Neuzusammensetzung von Unterkomponenten überspringen, die entfernt werden sollen. (Ieeb99, b/254645321)
- Lösen Sie
RememberObserver
-Lebenszyklen nur aus, wenn sie in der Merken-Berechnung gespeichert werden. f6b4dc - Beschränken Sie die
$dirty
-Erfassung auf Inline-Lambdas. acfca0. - Korrigieren Sie verschiebbare Inhalte, die gelegentlich die falsche lokale Komposition erhalten. (035cd6)
Version 1.6.0-rc01
10. Januar 2024
androidx.compose.runtime:runtime-*:1.6.0-rc01
wird freigegeben. 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 freigegeben. 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 freigegeben. 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 freigegeben. Version 1.6.0-beta01 enthält diese Commits.
API-Änderungen
- Bestimmte Stabilitätswerte in der Anmerkung weitergeben. (274a4c)
Fehlerkorrekturen
- Verwenden Sie die referenzielle Richtlinie für den Zusammensetzungsstatus des lokalen Geltungsbereichs im Kontext. (83361c)
- $dirty Capture auf Inline-Lambdas beschränken.
- Korrigieren Sie verschiebbare Inhalte, die gelegentlich die falsche lokale Komposition erhalten. (035cd6)
- Verwenden Sie schnellere, nicht zugewiesene Hashmaps in
RecomposeScopeImpl
. (D79494) ObjectIntMap
inDerivedState
verwenden.- Verwenden Sie
IntRef
für GanzzahlSnapshotThreadLocal
inDerivedState
.
Version 1.6.0-alpha08
18. Oktober 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha08
wird freigegeben. Version 1.6.0-alpha08 enthält diese Commits.
Fehlerkorrekturen
- Lösen Sie
RememberObserver
-Lebenszyklen nur aus, wenn sie in der Merken-Berechnung gespeichert werden. f6b4dc - Zuweisungen beim Sortieren von Entwertungslisten verbessern. (954d63)
- Neue Karten ohne Zuordnung in
SnapshotStateObserver
verwenden. (4303ce) - Entwertungen löschen, wenn die Zusammensetzung deaktiviert ist. (e001be)
Version 1.6.0-alpha07
4. Oktober 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha07
wird freigegeben. Version 1.6.0-alpha07 enthält diese Commits.
API-Änderungen
SnapshotStateList
ist jetzt alsRandomAccess
markiert, damit die direkte Indexierungsversion von Listenhilfen verwendet werden kann. (I5210c, b/219554654)
Version 1.6.0-alpha06
20. September 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha06
wird freigegeben. 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 freigegeben. 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 freigegeben. Version 1.6.0-alpha04 enthält diese Commits.
Neue Funktionen
- Erneute Auslösen von Ausnahmen, die während der Neuzusammensetzungsschleife verschluckt werden (4dff9a)
API-Änderungen
- Es wurde eine Methode zum Deaktivieren von
ReusableComposition
hinzugefügt. Dabei werden Beobachtungen entfernt, aber die Knoten bleiben erhalten. Die deaktivierte Zusammensetzung kann durch Aufrufen vonsetContent
wieder aktiviert werden. (Ib7f31) ReusableComposition
-Schnittstelle zum Verwalten des Lebenszyklus und zur Wiederverwendung von Unterzusammensetzungen wurde hinzugefügt. (I812d1, b/252846775)
Version 1.6.0-alpha03
9. August 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha03
wird freigegeben. Version 1.6.0-alpha03 enthält diese Commits.
Fehlerkorrekturen
- Neue
CompositionLocalProvider
-Optimierung korrigieren (3118e88) - Korrigieren Sie, wie bewegliche Inhaltsknoten zerlegt werden. (5e3d59b)
Version 1.6.0-alpha02
26. Juli 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha02
wird freigegeben. Version 1.6.0-alpha02 enthält diese Commits.
Neue Funktionen und Leistungsverbesserungen
rememberSaveable
optimieren (f01d79)- Erneutes Lesen von abgeleiteten Status aufschieben, bis Änderungen aufgezeichnet werden (f38099)
- Bereitstellung lokaler Zusammensetzungswerte verbessern (a337ea)
SideEffect
ist als@ExplicitGroupsComposable
markiert, damit keine Gruppe erstellt wird. (I74815)- Vergleiche lokaler Karten bei der Wiederverwendung vermeiden (782071)
API-Änderungen
- Es wurde eine Sonderfallüberlastung für
CompositionLocalProviders
hinzugefügt. Damit wird der Overhead für die schnellere Bereitstellung mehrerer Werte vermieden, der jedoch bei der Bereitstellung eines einzelnen Werts unnötig ist. (I6d640, b/288169379)
Fehlerkorrekturen
- Speicherleck in Slottabelle beheben (73fcfe)
- Fehler bei der Wiederherstellung von
rememberSaveable
beheben, wennstateSaver
null zurückgibt (90748c)
Version 1.6.0-alpha01
21. Juni 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha01
wird freigegeben. Version 1.6.0-alpha01 enthält diese Commits.
Fehlerkorrekturen
- Neuzusammensetzung von Unterkomponenten überspringen, die entfernt werden sollen. (Ieeb99, b/254645321)
- Die Zuweisungen beim Anwenden von Snapshots wurden reduziert. (I65c09)
- Berechnen Sie
readableHash
nicht inDerivedState
, wenn der Snapshot nicht geändert wurde (68c565)
Version 1.5
Version 1.5.4
18. Oktober 2023
androidx.compose.runtime:runtime-*:1.5.4
wird freigegeben. Version 1.5.4 enthält diese Commits.
Version 1.5.3
4. Oktober 2023
androidx.compose.runtime:runtime-*:1.5.3
wird freigegeben. Version 1.5.3 enthält diese Commits.
Version 1.5.2
27. September 2023
androidx.compose.runtime:runtime-*:1.5.2
wird freigegeben. Version 1.5.2 enthält diese Commits.
Version 1.5.1
6. September 2023
androidx.compose.runtime:runtime-*:1.5.1
wird freigegeben. Version 1.5.1 enthält diese Commits.
Version 1.5.0
9. August 2023
androidx.compose.runtime:runtime-*:1.5.0
wird freigegeben. Version 1.5.0 enthält diese Commits.
API-Änderungen
- Zuweisungen bei Neuzusammensetzung, Farbanimationen und
AndroidComposeView
wurden entfernt. Ib2bfa. - Eine
@StateFactoryMarker
-Annotation wurde hinzugefügt, um Funktionen zu markieren, die Status erstellen und in einenremember
-Aufruf eingebunden werden müssen. (I64550) - Einfache Versionen von State 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 zu diesem Zweck die neuen Factory-MethodenmutableIntState(Int)
,mutableFloatStateOf(Float)
usw. (I48e43)
Fehlerkorrekturen
- Neuzusammensetzung von Unterkomponenten überspringen, die entfernt werden sollen. (Ieeb99, b/254645321)
- Snapshot-Referenz nicht in
ComposerImpl
beibehalten (0206f7) - Komposition nicht zweimal anwenden (f5791b)
- Achten Sie darauf, dass die Entwertung für nicht initialisierte abgeleitete Statuswerte sichergestellt ist (aa2a92)
- Rufe während der Zusammensetzung
onEndChanges
auf. (62cc8c) - Probleme beim Verschieben von Inhalten in eine Unterzusammensetzung beheben (4beb41)
- Potenzielle Deadlocks beheben (c1a425 und 8edce0)
- Die für ein Android-Fenster erstellte Recomposer blockiert jetzt nur Aufrufe an
withFrameNanos
anstelle der gesamten Komposition, wenn sie eine ON_STOP-Benachrichtigung erhält. Das bedeutet, dass Fenster, die mit beendeten Aktivitäten verknüpft sind, weiterhin für Datenänderungen neu zusammengesetzt werden, aber die Animationen oder andere Aufrufe vonwithFrameNanos
werden blockiert. (Id9e7f, b/240975572) - Führen Sie einen Deaktivierungs-Callback für
LayoutNode
aus, bevor Sie die Effekte 3784073 entkräften. - Geänderte Flags für neu gestartete Lambdas ea81df9 korrigieren
- Problem mit der Regression der Live-Bearbeitung für zusammensetzbare Funktionen mit den Knoten 73fd4d8 beheben
- ON_STOP sollte die Frame-Clock-Übertragungen anstelle der Komposition ae276f1 anhalten.
SnapshotStateObserver
-Bereiche für unveränderte abgeleitete Status entwerten 84d9b1c- Potenzielle Deadlocks beim Löschen von Kompositionen beheben 28761fc
- Probleme beim Verschieben von Inhalten in eine Unterzusammensetzung 92d4156 beheben
- Geänderte Flags für neu gestartete Lambdas korrigieren (8a03e9)
- Führen Sie Deaktivierungs-Callbacks für
LayoutNode
aus, bevor Sie Effekte entsorgen (8b0fa4) - Beim Beenden von Knotengruppen wird das Problem
endToMarker()
behoben. (d71d980) - Aktuelle
SlotWriter
-Gruppe zur Prüfung nach Deaktivierung verwenden (a0b518b) fill
ausSlotTable.moveSlotGapTo()
entfernen und schließen (81f9935)- Fehlende Entwertungen beheben, wenn verschiebbare Inhalte verschoben werden (1d7c024)
- Sofortige Entwertungen für verschobene verschiebbare Inhalte korrigieren (8676618)
Leistungsverbesserungen
- Berechnen Sie
readableHash
nicht inDerivedState
, wenn der Snapshot nicht geändert wurde. (307102) - Reduzierte Zuweisungen (I65c09, d7ea77, 727974 und 445808)
- Schnelle Stornierung des Schreibens
CoroutineScopes
(a55362 und bd382f) - Einträge von Statusobjekten mit nicht zugänglichen Statuseinträgen überschreiben (c986960)
- Composer mit dem richtigen Bereich für die Realisierung von Gruppen verwenden (9a5e5b6)
- Verwenden Sie
IdentityArraySet
zum Speichern von Snapshot-Entwertungen (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 freigegeben. Version 1.5.0-rc01 enthält diese Commits.
Fehlerkorrekturen
Erneutes Lesen von abgeleiteten Status aufschieben, bis Änderungen aufgezeichnet werden (f38099)
Es ist eine optionale Prüfung verfügbar, mit der empfohlen wird,
mutableStateOf()
-Aufrufe zu den entsprechenden spezialisierten Typen für 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 den Schweregrad von „Informational“ (Information) in „Warnung“ (oder höher), indem Siewarning "AutoboxingStateCreation"
in der Konfiguration des Moduls „build.gradle“ oder „build.gradle.kts“ wie hier gezeigt (I34f7e) deklarieren:android { lint { warning "AutoboxingStateCreation" } ... }
Version 1.5.0-beta03
28. Juni 2023
androidx.compose.runtime:runtime-*:1.5.0-beta03
wird freigegeben. Version 1.5.0-beta03 enthält diese Commits.
Fehlerkorrekturen
- Neuzusammensetzung von Unterkomponenten überspringen, die entfernt werden sollen. (Ieeb99, b/254645321)
Version 1.5.0-beta02
7. Juni 2023
androidx.compose.runtime:runtime-*:1.5.0-beta02
wird freigegeben. Version 1.5.0-beta02 enthält diese Commits.
Leistungsverbesserungen
- Berechnen Sie
readableHash
nicht inDerivedState
, wenn der Snapshot nicht geändert wurde. (307102)
Version 1.5.0-beta01
24. Mai 2023
androidx.compose.runtime:runtime-*:1.5.0-beta01
wird freigegeben. Version 1.5.0-beta01 enthält diese Commits.
API-Änderungen
- Zuweisungen bei Neuzusammensetzung, Farbanimationen und
AndroidComposeView
entfernt (Ib2bfa) - Eine
@StateFactoryMarker
-Annotation wurde hinzugefügt, um Funktionen zu markieren, die Status erstellen und in einenremember
-Aufruf eingebunden werden müssen. (I64550) - Einfache Versionen von State und
MutableState
hinzufügen (fb3d89) Snapshot.isApplyObserverNotificationPending
(I672a5) hinzugefügt
Fehlerkorrekturen
- Reduzierte Zuweisungen (I65c09, d7ea77, 727974 und 445808)
- Snapshot-Referenz nicht in
ComposerImpl
beibehalten (0206f7) - Schnelle Stornierung des Schreibens
CoroutineScopes
(a55362 und bd382f) - Komposition nicht zweimal anwenden (f5791b)
- Achten Sie darauf, dass die Entwertung für nicht initialisierte abgeleitete Statuswerte sichergestellt ist (aa2a92)
- Rufe während der Zusammensetzung
onEndChanges
auf. (62cc8c) - Probleme beim Verschieben von Inhalten in eine Unterzusammensetzung beheben (4beb41)
- Potenzielle Deadlocks beheben (c1a425
- ON_STOP sollte anstelle der Zusammensetzung die Frame-Clock-Übertragung anhalten (f4a2d1).
- Geänderte Flags für neu gestartete Lambdas korrigieren (8a03e9)
- Führen Sie Deaktivierungs-Callbacks für
LayoutNode
aus, bevor Sie Effekte entsorgen (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 freigegeben. 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 zu diesem Zweck die neuen Factory-MethodenmutableIntState(Int)
,mutableFloatStateOf(Float)
usw. (I48e43)
Fehlerkorrekturen
Rufe während der Zusammensetzung
onEndChanges
auf. Die während „Composition.dispose
“ entfernten Fokusknoten abonnierenonEndChanges
, um den Fokus zurückzusetzen.(03d4a47)Achten Sie darauf, dass die Entwertung für nicht initialisierte abgeleitete Statuswerte sichergestellt ist. Jeder abgeleitete Status wird einer Liste der zugehörigen Abhängigkeiten in
SnapshotStateObserver
zugeordnet. Damit werden die mit dem abgeleiteten Status verknüpften Bereiche ungültig, wenn sich die Abhängigkeit ändert. Die Abhängigkeitsänderung wird beim Fortsetzen des Snapshots registriert, was nach dem Lesen des abgeleiteten Status passieren kann (aufgrund des Aufrufs vonSnapshot.notifyObjectsInitialized()
).Die vorherige abgeleitete Beobachtungslogik in
SnapshotStateObserver
bestand darin, alte Abhängigkeiten zu bereinigen und dann den neuen Wert zu lesen. Dies führte zu einer Race-Bedingung mit einer Entwertung in einem bereinigten Zustand, in dem die Abhängigkeitsentwertung nicht registriert wurde.Durch diese Änderung werden Lesevorgänge für abgeleitete Status und die Abhängigkeitsbereinigung neu angeordnet. Dadurch wird sichergestellt, dass die Entwertung immer in einem gültigen Status erfolgt. (c472be6)
Version 1.5.0-alpha03
19. April 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha03
wird freigegeben. Version 1.5.0-alpha03 enthält diese Commits.
API-Änderungen
- Die für ein Android-Fenster erstellte Recomposer blockiert jetzt nur Aufrufe an
withFrameNanos
anstelle der gesamten Komposition, wenn sie eine ON_STOP-Benachrichtigung erhält. Das bedeutet, dass Fenster, die mit beendeten Aktivitäten verknüpft sind, weiterhin für Datenänderungen neu zusammengesetzt werden, aber die Animationen oder andere Aufrufe vonwithFrameNanos
werden blockiert. (Id9e7f, b/240975572)
Fehlerkorrekturen
- Potenziellen Deadlock in Snapshot-Liste und Karte 5c1a425 beheben
- Führen Sie einen Deaktivierungs-Callback für
LayoutNode
aus, bevor Sie die Effekte 3784073 entkräften. - Geänderte Flags für neu gestartete Lambdas ea81df9 korrigieren
- Problem mit der Regression der Live-Bearbeitung für zusammensetzbare Funktionen mit den Knoten 73fd4d8 beheben
- ON_STOP sollte die Frame-Clock-Übertragungen anstelle der Komposition ae276f1 anhalten.
SnapshotStateObserver
-Bereiche für unveränderte abgeleitete Status entwerten 84d9b1c- Potenzielle Deadlocks beim Löschen von Kompositionen beheben 28761fc
- Probleme beim Verschieben von Inhalten in eine Unterzusammensetzung 92d4156 beheben
Version 1.5.0-alpha02
5. April 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha02
wird freigegeben. Version 1.5.0-alpha02 enthält diese Commits.
Neue Funktionen
- Der
getValue
-Operator von Kotlin kann jetzt zusammensetzbar werden (f174f6e).
Fehlerkorrekturen, Leistungsverbesserungen
- Einträge von Statusobjekten mit nicht zugänglichen Statuseinträgen überschreiben (c986960)
- Composer mit dem richtigen Bereich für die Realisierung von Gruppen verwenden (9a5e5b6)
- Beim Beenden von Knotengruppen wird das Problem
endToMarker()
behoben. (d71d980) - Aktuelle
SlotWriter
-Gruppe zur Prüfung nach Deaktivierung verwenden (a0b518b) - Verwenden Sie
IdentityArraySet
zum Speichern von Snapshot-Entwertungen (7f60cca). fill
ausSlotTable.moveSlotGapTo()
entfernen und schließen (81f9935)- Fehlende Entwertungen beheben, wenn verschiebbare Inhalte verschoben werden (1d7c024)
- Sofortige Entwertungen für verschobene verschiebbare Inhalte korrigieren (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 freigegeben. Version 1.5.0-alpha01 enthält diese Commits.
Neue Funktionen
- Fügt
Modifier.Node#coroutineScope
hinzu, damitModifier.Nodes
Koroutinen starten kann (I76ef9) - Erlauben Sie
Modifier.Nodes
,CompositionLocals
zu lesen, indem Sie dieCompositionLocalConsumerModifierNode
-Schnittstelle implementieren. Ib44df
Version 1.4
Version 1.4.3
3. Mai 2023
androidx.compose.runtime:runtime-*:1.4.3
wird ohne Änderungen veröffentlicht.
Version 1.4.2
19. April 2023
androidx.compose.runtime:runtime-*:1.4.2
wird freigegeben. Version 1.4.2 enthält diese Commits.
Fehlerkorrekturen
Potenziellen Deadlock in Snapshot-Liste und Karte 2eb6570 beheben
Beim Hinzufügen von Inhalten zu einem
SnapshotStateList
oderSnapshotStateMap
kann ein Deadlock auftreten, wenn die Änderung zeitgleich mit einem direkten Schreibvorgang für den Statusdatensatz erfolgt. Dies trat bei den Änderungen von 93fcae828b, bei denen nicht verwendete Datensätze durch direkte Schreibvorgänge freigegeben werden, deutlich häufiger auf.Die Sperren sind jetzt so angeordnet, dass bei einer Karten- oder Listensperre nie versucht wird, eine Snapshot-Sperre aufzunehmen.
Version 1.4.1
5. April 2023
androidx.compose.runtime:runtime-*:1.4.1
wird freigegeben. Version 1.4.1 enthält diese Commits.
Fehlerkorrekturen
- Beim Beenden von Knotengruppen wird
endToMarker()
korrigiert. d71d980
Version 1.4.0
22. März 2023
androidx.compose.runtime:runtime-*:1.4.0
wird freigegeben. Version 1.4.0 enthält diese Commits.
Wichtige Änderungen seit Version 1.3.0
- Initialisierten Wert aus
LiveData
für die erste Komposition 3680e25 verwenden - Fügen Sie
ComposeNodeLifecycleCallback
hinzu, um den Lebenszyklus der Zusammensetzungsknoten zu beobachten. 8b6a258 - Property „
parameterTypes
“ zu „ComposableMethod
“ 7b6c7ad hinzufügen
Fehlerkorrekturen und Leistungsverbesserungen
- Beide Bereichsindexe in
SnapshotStateObserver
löschen 29f4a3e - Fügen Sie Gruppen hinzu, die im Text von nicht überspringbaren Lambdas benötigt werden 7d06752
- Speicherreferenzmerkmale des Snapshot-Status 93fcae8 verbessern
- Boxen in lokalen Kompositionen suchen 0875717
- Korrekten Schlüssel für nicht wiederverwendbare Knotengruppen verwenden 6388d8d
SnapshotStateObserver
vor rekursiven und gleichzeitigen Anwendungen von 98cb6ba schützen- In der get-Methode 35a77d3 von
IdentityArraySet
wurde eine Check-Index-bounds-Prüfung hinzugefügt. - Das Editor-Modul zur Verwendung der
ViewTreeLifecycleOwner
-Erweiterungen aktualisieren 21c2122 - Benachrichtigungen zum Anwenden senden, nachdem Recomposer den Frame beendet hat. 98f2641
- Behebung eines Indexabsturzes außerhalb des Bereichs beim Abbrechen von Recomposer 8f8656f
- Neuzusammensetzung immer erzwingen, wenn übergeordnete Anbieter der Komposition 9526fcc geändert haben
- Recomposer-Toleranz für abgebrochene Jobs a55f7ed
- Verarbeitung von Entwertungen für eine große Anzahl von Komponisten verbessern 9b7ed67
- Problem beim Generieren von schließenden Gruppen für nicht lokale Rückgaben b6f590c beheben
Version 1.4.0-rc01
8. März 2023
androidx.compose.runtime:runtime-*:1.4.0-rc01
wird freigegeben. Version 1.4.0-rc01 enthält diese Commits.
Fehlerkorrekturen
Version 1.4.0-beta02
22. Februar 2023
androidx.compose.runtime:runtime:1.4.0-beta02
und androidx.compose.runtime:runtime-saveable:1.4.0-beta02
werden veröffentlicht. Version 1.4.0-beta02 enthält diese Commits.
Version 1.4.0-beta01
8. Februar 2023
androidx.compose.runtime:runtime-*:1.4.0-beta01
wird freigegeben. Version 1.4.0-beta01 enthält diese Commits.
API-Änderungen
ComposeNodeLifecycleCallback
wurde hinzugefügt, mit dem der Lebenszyklus von Compose-Knoten beobachtet werden kann (I3731b)@TestOnly
wurde zuComposer.disableSourceInformation()
hinzugefügt, da diese Funktion nur sicher in einem Test aufgerufen werden kann. (I896c8)
Fehlerkorrekturen
- Boxen in lokalen Mischungssuchen entfernen (62f66a)
- Speicherreferenzmerkmale des Snapshot-Status verbessern (dfb451)
Version 1.4.0-alpha05
25. Januar 2023
androidx.compose.runtime:runtime:1.4.0-alpha05
und androidx.compose.runtime:runtime-saveable:1.4.0-alpha05
werden veröffentlicht. Version 1.4.0-alpha05 enthält diese Commits.
API-Änderungen
- Mehr Typ-/Null-Zulässigkeit von Inline-/Verworfen-hidden-Funktionen (I24f91)
Version 1.4.0-alpha04
11. Januar 2023
androidx.compose.runtime:runtime-*:1.4.0-alpha04
wird freigegeben. Version 1.4.0-alpha04 enthält diese Commits.
API-Änderungen
- In
TestMonotonicFrameClock
wird jetzt die korrekte experimentelle Anmerkung verwendet. (I95c9e)
Fehlerkorrekturen
SnapshotStateObserver
vor rekursiven und gleichzeitigen Anwendungsmöglichkeiten schützen (d902fb)
Version 1.4.0-alpha03
7. Dezember 2022
androidx.compose.runtime:runtime-*:1.4.0-alpha03
wird freigegeben. Version 1.4.0-alpha03 enthält diese Commits.
API-Änderungen
- Hinzufügen einer neuen öffentlichen Methode zur Klasse
ComposableMethod
, analog zujava.lang.reflect.Method#getParameterTypes()
(Iab0c3)
Fehlerkorrekturen
- Benachrichtigungen zum Anwenden von Snapshots werden jetzt gesendet, nachdem
Recomposer
die Änderungen übernommen hat. (Iad6c0, b/222093277)
Version 1.4.0-alpha02
9. November 2022
androidx.compose.runtime:runtime-*:1.4.0-alpha02
wird freigegeben. 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 freigegeben. Version 1.4.0-alpha01 enthält diese Commits.
API-Änderungen
- In
SnapshotStateList
undSnapshotStateMap
wurdentoList()
undtoMap()
respektvoll implementiert. Mit diesen Methoden wird der aktuelle Inhalt zurückgegeben, ohne eine Kopie zu erstellen, da sie die internen unveränderlichen Daten zurückgeben, die zum Speichern des Inhalts verwendet werden. Dieser Wert kann beispielsweise verwendet werden, um einen Wertefluss mitsnapshotFlow
zu erzeugen, ohne dass die Daten kopiert werden müssen. (Ica2bd)
Version 1.3
Version 1.3.3
11. Januar 2023
androidx.compose.runtime:runtime-*:1.3.3
wird freigegeben. Version 1.3.3 enthält diese Commits.
- Keine Änderungen seit Version 1.3.2
Version 1.3.2
7. Dezember 2022
androidx.compose.runtime:runtime-*:1.3.2
wird freigegeben. Version 1.3.2 enthält diese Commits.
Fehlerkorrekturen
- Aktualisierung zur Unterstützung von androidx.compose.ui 1.3.2
Version 1.3.1
9. November 2022
androidx.compose.runtime:runtime-*:1.3.1
wird freigegeben. Version 1.3.1 enthält diese Commits.
Version 1.3.0
24. Oktober 2022
androidx.compose.runtime:runtime-*:1.3.0
wird freigegeben. Version 1.3.0 enthält diese Commits.
Wichtige Änderungen seit Version 1.2.0
Umgang mit Ausnahmefällen / Support bei der Bearbeitung von Live-Bearbeitungen
- Zur besseren Unterstützung der Live-Bearbeitung wurden APIs hinzugefügt, um die Verarbeitung von Ausnahmen während der Zusammensetzung zu ermöglichen.
- Umgang mit Zusammensetzungsfehlern beim Hot Refresh
- Fehler bei Live-Bearbeitungen beim Speichern/Wiederherstellen beheben
Nachverfolgung von Kompositionen
- Zur Unterstützung neuer Tools für das Tracing der Zusammensetzung wurden APIs für das Laufzeit-Tracing hinzugefügt.
- Start-/Endaufrufe für zusammensetzbare Trace-Ereignisse generieren
- ComposerKt.traceEventStart(Int, String) wieder hinzugefügt
Zusammensetzbare Reflexions-APIs
- Eine neue
ComposableMethod
API wurde hinzugefügt, um zuverlässigere Aufrufe von zusammensetzbaren APIs auf Grundlage von Spiegelungen zu ermöglichen. - InvokeComposable verschieben, um Laufzeit zu erstellen
- API zum Aufrufen der zusammensetzbaren Methode überarbeiten
Fehler bei der Laufzeit beheben
- Fehlerhaften Bereichstest für die Prüfung von Slottabellen auf Markierungen korrigieren
- Zulassen, dass verschiebbare Inhalte in „SubcomposeLayout“ verschoben und daraus entfernt werden
- Probleme beim Verschieben von Inhalten auf neuen Inhalt einer Unterzusammensetzung beheben
Snapshot-System
- Das Snapshot-System wurde in Bezug auf Speicherverwaltung, Leistung und Richtigkeit verbessert.
- Entfernen von Bereichen in SnapshotStateObserver optimieren
- Verschachtelte Snapshots entsorgen, die aus transparenten Snapshots erstellt wurden
- Behobene Race-Bedingung beim Lesen des Status aus dem globalen Snapshot
- DerivedState in SnapshotStateObserver unterstützen
- Entfernen des abgeleiteten Status aus der Zusammensetzung verhindern, wenn er in anderen Bereichen gelesen wird
- IdentityArrayMap anstelle von HashMap in DerivedState verwenden
- Abgeleitete Statusbeobachter zur Verwendung eines änderbaren Vektors aktualisieren
- SnapshotStateObserver-Statusbereinigung aktualisieren
- SnapshotStateObserver.invalidated durch ArraySet ersetzen
- Behobene Race-Bedingung beim Lesen des Status aus dem globalen Snapshot
- Verwendung eines veralteten Eintrags bei der DerivedState-Hash-Berechnung korrigiert
- Race-Bedingung beim Übergang zum globalen Snapshot korrigieren
- Bereinigung von Bereichsbeobachtungen in SnapshotStateObserver beschleunigen
Version 1.3.0-rc01
5. Oktober 2022
androidx.compose.runtime:runtime-*:1.3.0-rc01
wird freigegeben. Version 1.3.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Problem mit
ArrayIndexOutOfBoundsException
aus der Slot-Tabelle behoben (b/249076084)
Version 1.3.0-beta03
21. September 2022
androidx.compose.runtime:runtime-*:1.3.0-beta03
wird freigegeben. Version 1.3.0-beta03 enthält diese Commits.
Verhaltensänderung
- Der Parameter in
remember
undrememberCoroutineScope
, wobei er zucrossinline
geändert wurde. Dadurch wird bei einer vorzeitigen Rückgabe ein Fehler gemeldet, anstatt eine frühe Rückgabe zuzulassen, durch die später ein interner Fehler gemeldet wird. - Diese Änderung kann möglicherweise dazu führen, dass neue Compiler-Fehler gemeldet werden, was dazu führt, dass nicht lokale Rückgaben von den Lambdas entfernt werden, die an diese Funktionen übergeben werden. (Ibea62)
Version 1.3.0-beta02
7. September 2022
androidx.compose.runtime:runtime-*:1.3.0-beta02
wird freigegeben. 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 freigegeben. Version 1.3.0-beta01 enthält diese Commits.
API-Änderungen
CompositionData
wurde einefind
-Methode hinzugefügt, damit Entwicklertools, die diese API verwenden, schnell eine Untergruppe von Kompositionen 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 freigegeben. 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 freigegeben. Version 1.3.0-alpha02 enthält diese Commits.
API-Änderungen
ComposerKt.traceEventStart(Int, String)
wurde für Abwärtskompatibilität wieder hinzugefügt (I6e6de)
Version 1.3.0-alpha01
29. Juni 2022
androidx.compose.runtime:runtime-*:1.3.0-alpha01
wird freigegeben. Version 1.3.0-alpha01 enthält diese Commits.
API-Änderungen
- Dienstprogrammfunktionen in die Laufzeit verschieben (I4f729)
Version 1.2
Version 1.2.1
10. August 2022
androidx.compose.runtime:runtime-*:1.2.1
wird freigegeben. Version 1.2.1 enthält diese Commits.
Fehlerkorrekturen
- Speicherleck behoben: Verschachtelte Snapshots, die aus transparenten Snapshots erstellt wurden, entsorgen b/239603305
Version 1.2.0
27. Juli 2022
androidx.compose.runtime:runtime-*:1.2.0
wird freigegeben. Version 1.2.0 enthält diese Commits.
Wichtige Änderungen seit dem 1.1.0
Compose Runtime verfügte über eine Reihe von Funktionen, die in Version 1.2.0 eingeführt wurden, sowie viele Fehlerkorrekturen bei der Stabilisierung. Die wichtigste neue Funktion war die Einführung der
movableContentOf
API, mit der eine komplexe UX wie Übergänge gemeinsam genutzter Elemente ermöglicht werden kann. DiemovableContentOf
API wandelt eine zusammensetzbare Lambda-Funktion in ein Lambda um, das ihren Zustand und die entsprechenden Knoten an einen 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 Lambda-Aufruf in die Zusammensetzung eintritt, werden der Status und die zugehörigen Knoten an den Standort des neuen Aufrufs verschoben. Wenn kein neuer Aufruf hinzugefügt wird, wird der Status dauerhaft entfernt und die Beobachter werden benachrichtigt.Wenn ein
movableContentOf
-Lambda mehrmals in derselben Zusammensetzung aufgerufen wird, werden für jeden Aufruf ein neuer Status und Knoten erstellt. Wenn Aufrufe die Zusammensetzung verlassen und neue Aufrufe eingehen, wird der Status vom ersten ausgehenden Aufruf zu den eingehenden Aufrufen in der Reihenfolge verschoben, in der sie aufgerufen werden. Alle Status, auf die keine neuen Aufrufe erhoben werden, werden endgültig entfernt.Zusätzlich zu dieser und einigen anderen neuen Funktionen wurde viel Zeit dafür aufgewendet, die Laufzeit und das Snapshot-Statussystem zu stabilisieren. Verschiedene Speicherlecks wurden beseitigt und die Codepfade wurden optimiert.
Eine Zusammenfassung der Änderungen finden Sie unten:
Neue Funktionen in 1.2
- Experimentellen Snapshot mit unsicherem Eingabe/Verlassen hinzufügen
- Experimentelle Snapshot.asContextElement API hinzufügen
- Einführung von Snapshot.withoutReadObservation
- Verschieben des Status innerhalb einer Komposition zulassen
- Nachzeichnen von Neuzusammensetzungen in der Funktion „Compose“
Leistung in 1.2
- Lokale Leistung der Zusammensetzung verbessern
- Baseline-Profile für die Funktion „Compose“ sollten anhand von Benchmarks abgeleitet werden.
Fehlerkorrekturen in 1.2
- Tracking-Informationen aus den Neuzusammensetzungsbereichen von Releases entfernen
- Entfernen des abgeleiteten Status aus der Zusammensetzung verhindern, wenn er in anderen Bereichen gelesen wird
- Effizientere removeScope()-Methode in SnapshotStateObserver verwenden
- Abhängigkeiten des abgeleiteten Status in der Zusammensetzung bereinigen
- Änderung von currentComponentKeyHash nach der inneren Neuzusammensetzung innerhalb von verschiebbaren Inhalten korrigieren
- Entsorgte Inhaltsstoffe bei der Entsorgung entfernen
- Fehler beim Ableitungsstatus während der Neuzusammensetzung beheben
- Speicherleck bei der Beobachtung abgeleiteter Statusobjekte beheben
- Zusammengesetzten Hash-Schlüssel „movableContent“ wurde zur Konsistenz korrigiert
- Eckfehler beim Absturz des Composers beheben
- Sicherstellen, dass die erzwungene Entwertung einer Gruppe eine Neuzusammensetzung erzwingt
- Fehler behoben, der bei der Wiederherstellung der Eingabe von „MemorySaveable“ mit Eingabe in der falschen Reihenfolge
Version 1.2.0-rc03
29. Juni 2022
androidx.compose.runtime:runtime-*:1.2.0-rc03
wird freigegeben. Version 1.2.0-rc03 enthält diese Commits.
Fehlerkorrekturen
- Abgeleitete Zustandsbeobachtungen wurden zuvor bedingungslos aus dem Zusammensetzungsbereich und der Zusammensetzung entfernt, wodurch andere Umfänge durchbrochen wurden, die möglicherweise noch den abgeleiteten Zustand beobachten. Durch diese Änderung werden Instanzen des abgeleiteten Status nur entfernt, wenn sie von anderen Bereichen nicht mehr beobachtet werden. (b/236618362)
Version 1.2.0-rc02
22. Juni 2022
androidx.compose.runtime:runtime-*:1.2.0-rc02
wird freigegeben. 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 freigegeben. Version 1.2.0-rc01 enthält diese Commits.
API-Änderungen
- Schnittstellen in compose-Bibliotheken werden jetzt mit den jdk8-Standardschnittstellenmethoden (I5bcf1) erstellt.
Version 1.2.0-beta03
1. Juni 2022
androidx.compose.runtime:runtime-*:1.2.0-beta03
wird freigegeben. 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 freigegeben. 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 freigegeben. Version 1.2.0-beta01 enthält diese Commits.
Neue Funktionen
- Dies ist die erste Betaversion von 1.2.
API-Änderungen
- Experimentelle
Snapshot.unsafeEnter/unsafeLeave
(I108f3) hinzugefügt - Die experimentelle
Snapshot.asContextElement()
API (Iff072) wurde hinzugefügt. - Die Annotation
@ComposableTarget
und die durch@ComposableTargetMarker
markierten Annotationen können jetzt auf Dateiebene mit dem Präfix@file
verwendet werden. Wenn Sie eine Zielanmerkung im Dateibereich verwenden, nimmt der Compiler an, dass alle zusammensetzbaren Funktionen in der Datei als Ziel für die zugehörige Anwendung vorgesehen sind. Mit@file:UiComposable
wird beispielsweise deklariert, dass alle@Composable
-Funktionen auf den Anwendungsprogramm „Compose UI“ ausgerichtet sind. Eine Funktion, die ein Targeting auf eine andere App vornehmen muss, muss explizit die Annotation der Zielmarkierung für die gewünschte App angeben. (I40804)
Version 1.2.0-alpha08
20. April 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha08
wird freigegeben. Version 1.2.0-alpha08 enthält diese Commits.
API-Änderungen
TracingInProgress
wurde derCompositionTracer
-Schnittstelle hinzugefügt. (Ic6f12)recomposeScopeIdentity
zu Composer hinzufügen (I0c873)- Eingeschränkte Tracing-APIs (Composer.setTracer) auf
OptIn(InternalComposeTracingApi)
(I9187f) ResuableContentHost
wurde hinzugefügt, um die Lebensdauer des Status, der für wiederverwendbare Inhalte erstellt wird, besser zu kontrollieren. Wenn beispielsweise eine Unterzusammensetzung vorübergehend nicht verwendet wird, kann der Inhalt deaktiviert werden, wodurch alle gespeicherten Status in der Komposition vergessen werden, z. B. alle Wegwerfeffekte. (I2c0f2, b/220322704)
Version 1.2.0-alpha07
6. April 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha07
wird freigegeben. Version 1.2.0-alpha07 enthält diese Commits.
API-Änderungen
- Die neue Funktion "
Snapshot.withoutReadObservation { ... }
" wurde hinzugefügt. Damit können Nutzer die übergebene Lambda-Funktion ausführen, ohne die Änderungen der Statuswerte zu abonnieren, die während dieses Blocks gelesen werden. Das kann in Anwendungsfällen nützlich sein, in denen Sie von den Snapshot-basierten Thread-sicheren Schreib-/Lesevorgängen profitieren, den Wert aber lesen möchten, ohne unnötige Neuzusammensetzung 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 freigegeben. 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 freigegeben. Version 1.2.0-alpha05 enthält diese Commits.
Externer Beitrag
- Für die Verwendung von Kotlinx-Coroutinen 1.6.0 (I3366d) aktualisiert
Version 1.2.0-alpha04
23. Februar 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha04
wird freigegeben. Version 1.2.0-alpha04 enthält diese Commits.
API-Änderungen
ComposableTarget
,ComposableTargetMarker
undComposableOpenTarget
wurden hinzugefügt. Damit können während der Kompilierungszeit Berichte dazu erstellt werden, wann eine zusammensetzbare Funktion aufgerufen wird, die auf eine Anwendung ausgerichtet ist, für die sie nicht vorgesehen ist.In den meisten Fällen können die Annotationen vom Compiler-Plug-in „compose“ abgeleitet werden, sodass die direkte Verwendung dieser Annotationen eher selten ist . Zu den Fällen, die sich nicht ableiten lassen, gehören das Erstellen und Verwenden einer benutzerdefinierten Anwendung, abstrakten zusammensetzbaren Funktionen (z. B. Schnittstellenmethoden), Feldern oder globalen Variablen, die zusammensetzbare Lambdas sind (lokale Variablen und Parameter werden abgeleitet), oder die Verwendung von
ComposeNode
oder einer zugehörigen zusammensetzbaren Funktion.Bei benutzerdefinierten Anwendungen müssen die zusammensetzbaren Funktionen, die
ComposeNode
oderReusableComposeNode
aufrufen, eineCompoableTarget
-Annotation für die Funktion und alle zusammensetzbaren Lambda-Parametertypen hinzufügen. Es empfiehlt sich jedoch, eine Annotation zu erstellen, die mitComposableTargetMarker
annotiert ist, und dann direkt die markierte Annotation anstelle vonComposableTarget
zu verwenden. Eine zusammensetzbare Annotation, die mitComposableTargetMarker
gekennzeichnet ist, entspricht einerComposbleTarget
mit dem voll qualifizierten Namen der Attributklasse als Anwendungsparameter. 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 freigegeben. Version 1.2.0-alpha03 enthält diese Commits.
API-Änderungen
movableContentOf
wurde hinzugefügt, das ein zusammensetzbares Lambda in ein Lambda umwandelt, das seinen Zustand und entsprechende Knoten an einen 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 Lambda-Aufruf in die Zusammensetzung eingeht, werden der Status und die zugehörigen Knoten an den Ort des neuen Aufrufs verschoben. Wenn kein neuer Aufruf hinzugefügt wird, wird der Status dauerhaft entfernt und die Beobachter werden benachrichtigt.Wenn ein
movableContentOf
-Lambda mehrmals in derselben Zusammensetzung aufgerufen wird, werden für jeden Aufruf ein neuer Zustand und neue Knoten erstellt. Wenn Aufrufe die Zusammensetzung verlassen und neue Aufrufe eingehen, wird der Zustand vom ersten ausgehenden Aufruf in der Reihenfolge, in der sie aufgerufen werden, zu den eingehenden Aufrufen verschoben. Alle Status, die nicht von neuen Aufrufen beansprucht werden, werden endgültig entfernt. (Ib4850)Der Zusammensetzung wurde eine Tracing API hinzugefügt, mit der Tools ein detaillierteres Tracing von zusammensetzbaren Funktionen ermöglichen können. Der Compiler generiert jetzt Aufrufe an die Tracing API, die Quellinformationen enthalten. (Ib0eb5)
Fügen Sie die folgende Proguard-Regel hinzu, um diese Aufrufe und die zugehörigen Quellinformationen aus einem Release-Build zu entfernen:
-assumenosideeffects public class androidx.compose.runtime.ComposerKt { boolean isTraceInProgress(); void traceEventStart(int,java.lang.String); void traceEventEnd(); }
Fügen Sie
InternalComposeScope
hinzu, damit Tools eine zusammensetzbare Funktion bei der Neuzusammensetzung identifizieren können. (I07a3f)
Version 1.2.0-alpha02
26. Januar 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha02
wird freigegeben. 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 freigegeben. Version 1.2.0-alpha01 enthält diese Commits.
API-Änderungen
CompositionData
wurde das Feldidentity
hinzugefügt, um im Layout Inspector invarianten IDs zu generieren. (Ic116e)
Aktualisierungen von Abhängigkeiten
- Jetzt hängt der Kotlin-Code
1.6.10
ab.
Version 1.1
Version 1.1.1
23. Februar 2022
androidx.compose.runtime:runtime-*:1.1.1
wird freigegeben. Version 1.1.1 enthält diese Commits.
Fehlerkorrekturen
NullPointerException
korrigieren unterandroidx.compose.ui.platform.RenderNodeLayer.updateDisplayList
(aosp/1947059, b/206677462)- Ein Absturz wurde behoben, der durch Inhalte in der Zwischenablage beim Lesen aus der Zwischenablage auf Android-Geräten verursacht wurde. (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 freigegeben. Version 1.1.0 enthält diese Commits.
Wichtige Änderungen seit Version 1.0.0
- Stabile Unterstützung für den Overscroll-Effekt von Android 12
- Verbesserungen bei der Größe von Berührungszielbereichen
- Beachten Sie, dass in Compose 1.0 der Layoutbereich von Material-Komponenten erweitert wird, um die Material-Richtlinien für Barrierefreiheit im Hinblick auf die Größe des Berührungszielbereichs zu erfüllen. Beispielsweise wird das Berührungsziel auf der Schaltfläche auf eine Mindestgröße von
48x48dp
erweitert, auch wenn du eine kleinere Größe festgelegt hast. Dadurch wird das Verhalten von „Compose-Material“ an das gleiche Verhalten wie Material Design-Komponenten angepasst, was beim Mischen von Ansichten und der Funktion „Compose“ zu einem einheitlichen Verhalten führt. Durch diese Änderung wird auch sichergestellt, dass beim Erstellen Ihrer Benutzeroberfläche mit Compose Material-Komponenten die Mindestanforderungen für die Barrierefreiheit des Berührungszielbereichs erfüllt werden. - Stabile Unterstützung für Navigationsschienen
- Eine Reihe von zuvor experimentellen APIs wird zu einer stabilen Version umgestellt
- Unterstützung neuerer Versionen von Kotlin
Version 1.1.0-rc03
26. Januar 2022
androidx.compose.runtime:runtime-*:1.1.0-rc03
wird freigegeben. Version 1.1.0-rc03 enthält diese Commits.
Fehlerkorrekturen
- Aktualisiert, um „Compose-Material“ zu unterstützen
1.1.0-rc03
Version 1.1.0-rc01
15. Dezember 2021
androidx.compose.runtime:runtime-*:1.1.0-rc01
wird freigegeben. 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 freigegeben. Version 1.1.0-beta04 enthält diese Commits.
Neue Funktionen
- Für Kotlin-Kompatibilität aktualisiert
1.6.0
Version 1.1.0-beta03
17. November 2021
androidx.compose.runtime:runtime-*:1.1.0-beta03
wird freigegeben. 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 freigegeben. Version 1.1.0-beta02 enthält diese Commits.
API-Änderungen
- Der Snapshot-Code wurde in mehrere Dateien aufgeteilt, befindet sich aber alle weiterhin in derselben JVM-Klasse. (Ic6c98)
Version 1.1.0-beta01
27. Oktober 2021
androidx.compose.runtime:runtime-*:1.1.0-beta01
wird freigegeben. 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 freigegeben. Version 1.1.0-alpha06 enthält diese Commits.
API-Änderungen
InternalCompilerApi
wurde aus den Composer-Methoden entfernt, die modulübergreifend aufgerufen werden müssen (I1aa0b).Recomposer.state
wurde verworfen 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 freigegeben. 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 freigegeben. 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 freigegeben. 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 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)
- Aktualisierung von „Compose“-
1.1.0-alpha03
auf eine Abhängigkeit von Kotlin-1.5.30
wurde aktualisiert. (I74545)
Version 1.1.0-alpha02
18. August 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha02
wird freigegeben. 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 freigegeben. 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 freigegeben. Version 1.0.5 enthält diese Commits.
Fehlerkorrekturen
- Ein Absturz-Tracking für abgeleiteteStateOf-Instanzen wurde behoben. (aosp/1792247)
Version 1.0.4
13. Oktober 2021
androidx.compose.runtime:runtime-*:1.0.4
wird freigegeben. Version 1.0.4 enthält diese Commits.
Aktualisierungen von Abhängigkeiten
- Aktualisiert und hängt von Kotlin ab
1.5.31
Version 1.0.3
29. September 2021
androidx.compose.runtime:runtime-*:1.0.3
wird freigegeben. Version 1.0.3 enthält diese Commits.
Aktualisierungen von Abhängigkeiten
- Aktualisiert und hängt von Kotlin ab
1.5.30
Version 1.0.2
1. September 2021
androidx.compose.runtime:runtime-*:1.0.2
wird freigegeben. Version 1.0.2 enthält diese Commits.
Aktualisiert, um den Compose-Release 1.0.2
zu unterstützen. „Compose“ 1.0.2
ist weiterhin mit Kotlin 1.5.21
kompatibel.
Version 1.0.1
4. August 2021
androidx.compose.runtime:runtime-*:1.0.1
wird freigegeben. Version 1.0.1 enthält diese Commits.
Aktualisierungen von Abhängigkeiten
- Aktualisiert, sodass sie von Kotlin-
1.5.21
abhängig sind.
Version 1.0.0
28. Juli 2021
androidx.compose.runtime:runtime-*:1.0.0
wird freigegeben. Version 1.0.0 enthält diese Commits.
Hauptfunktionen von Version 1.0.0
Dies ist die erste stabile Version von „Compose“. Weitere Informationen finden Sie im offiziellen Blog zur Compose-Version.
Bekannte Probleme
Wenn du Android Studio Bumblebee Canary 4 oder AGP
7.1.0-alpha04
/7.1.0-alpha05
verwendest, kann es zu folgendem Absturz kommen:java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
Erhöhen Sie in der Datei
build.gradle
vorübergehend die minSdkVersion auf 24 oder höher. Dieses Problem wird in der nächsten Version von Android Studio Bumblebee und AGP7.1
behoben. (b/194289155)
Version 1.0.0-rc02
14. Juli 2021
androidx.compose.runtime:runtime-*:1.0.0-rc02
wird freigegeben. Version 1.0.0-rc02 enthält diese Commits.
- Race-Bedingungen in SnapshotStateObserver, die spurratische NullPointerExceptions verursachten, wurden behoben. (aosp/1763445, aosp/1758105, b/192677711)
- Probleme mit Laufzeit-Snapshots behoben, die
java.lang.IllegalStateException: Reading a state that was created after the snapshot was taken or in a snapshot that has not yet been applied
-Abstürze verursachten. (b/193006595, b/192570897)
Version 1.0.0-rc01
1. Juli 2021
androidx.compose.runtime:runtime-*:1.0.0-rc01
wird freigegeben. 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 freigegeben. Version 1.0.0-beta09 enthält diese Commits.
Hinzugefügte Profilregeln
In diesem Release werden Profilregeln zu den folgenden Erstellungsmodulen (I14ed6) 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.geometrie
- androidx.compose.ui.graphics
- androidx.compose.ui.text
- androidx.compose.ui.text
- androidx.compose.ui.unit
- androidx.compose.ui.util-Datei
Was sind Profilregeln?
Profilregeln für eine Bibliothek sind in der Textdatei
baseline-prof.txt
imsrc/main
oder einem entsprechenden Verzeichnis angegeben. In der Datei ist eine Regel pro Zeile angegeben, wobei eine Regel in diesem Fall ein Muster für den Abgleich mit Methoden oder Klassen in der Bibliothek ist. Die Syntax für diese Regeln ist eine Obermenge des menschenlesbaren ART-Profilformats, das bei Verwendung vonadb shell profman --dump-classes-and-methods ...
verwendet wird. Für die Ausrichtung auf Methoden oder Klassen stehen zwei Regeln für diese Regeln zur Verfügung.Eine Methodenregel hat das folgende Muster:
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
Und eine Klassenregel hat das folgende Muster:
<CLASS_DESCRIPTOR>
In diesem Fall ist
<FLAGS>
mindestens eines 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 Rückgabetypen der Methode. Die Methodefun isPlaced(): Boolean
fürLayoutNode
hat beispielsweise die SignaturisPlaced()Z
.Diese Muster können Platzhalter (
**
,*
und?
) enthalten, damit eine einzelne Regel mehrere Methoden oder Klassen umfasst.
Wozu dienen die Regeln?
Eine Methode mit dem Flag
H
gibt an, dass diese Methode eine "heiße" Methode ist und im Voraus kompiliert werden sollte.Eine Methode mit dem Flag
S
gibt an, dass es sich um eine Methode handelt, die beim Start aufgerufen wird und im Voraus kompiliert werden sollte, um Kosten für Kompilierung und Interpretation der Methode beim Start zu vermeiden.Eine Methode mit dem Flag
P
gibt an, dass es sich um eine Methode handelt, die nach dem Start aufgerufen wird.Eine in dieser Datei vorhandene Klasse weist darauf hin, dass sie beim Start verwendet wird und im Heap vorab zugewiesen werden sollte, um die Kosten für das Laden der Klasse zu vermeiden.
So funktioniert's
- Bibliotheken können diese Regeln definieren, die in AAR-Artefakte verpackt werden. Wenn dann eine App erstellt wird, die diese Artefakte enthält, werden diese Regeln zusammengeführt und die zusammengeführten Regeln verwendet, um ein kompaktes binäres ART-Profil zu erstellen, das für die App spezifisch ist. ART kann dieses Profil dann bei der Installation der App auf Geräten nutzen, um vorab eine bestimmte Teilmenge der Anwendung zu kompilieren und so die Leistung der Anwendung, insbesondere die erste Ausführung, zu verbessern. Dies hat keine Auswirkungen auf Anwendungen, die debuggen werden können.
Version 1.0.0-beta08
2. Juni 2021
androidx.compose.runtime:runtime-*:1.0.0-beta08
wird freigegeben. Version 1.0.0-beta08 enthält diese Commits.
API-Änderungen
State<T>
ist jetztState<out T>
(I69049)ControlledComposition
-API-Änderung, um die Neuzusammensetzung von Änderungen in einer einzelnen Neuzusammensetzung zu ermöglichen. (Iaafd1, b/184173932)
Version 1.0.0-beta07
18. Mai 2021
androidx.compose.runtime:runtime-*:1.0.0-beta07
wird freigegeben. 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 bei der Reduzierung von Quellinformationen entfernt werden können. (Ia34e6)
Führt
ReusableContent
ein, das versucht, die Knoten in ihrem 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 Slottabelle für den Inhalt ignoriert. Ausgenommen hiervon sind die generierten Knoten und die Werte, die zum Aktualisieren der Knoten verwendet wurden.Führt
ReusableComposeNode
ein, das den ausgegebenen Knoten wiederverwendet, anstatt ihn zu ersetzen, wie es fürComposeNode
der Fall ist. (I1dd86)@ComposeCompilerApi
nicht mehr@RequiresOptIn
(Iab690)
Fehlerkorrekturen
- LazyColumn/Row sorgt nun dafür, dass bis zu zwei zuvor sichtbare Elemente aktiv (nicht verworfen) bleiben, auch wenn sie bereits herausgescrollt werden. Auf diese Weise kann die Komponente die aktiven Unterzusammensetzungen wiederverwenden, wenn wir ein neues Element zusammensetzen müssen, was die Scroll-Leistung verbessert. (Ie5555)
Version 1.0.0-beta06
5. Mai 2021
androidx.compose.runtime:runtime-*:1.0.0-beta06
wird freigegeben. 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 freigegeben. Version 1.0.0-beta05 enthält diese Commits.
API-Änderungen
@InternalComposeApi
für Aufzeichnung von Lese- und Schreibvorgängen von Snapshots entfernt (Id134d)
Fehlerkorrekturen
- Die AndroidManifest-Dateien aus „ui-test-manifest“ und „ui-tooling-data“ sind jetzt mit Android 12 (I6f9de, b/184718994) kompatibel.
Version 1.0.0-beta04
7. April 2021
androidx.compose.runtime:runtime-*:1.0.0-beta04
wird freigegeben. Version 1.0.0-beta04 enthält diese Commits.
Fehlerkorrekturen
Bisher waren lokale zusammensetzbare Funktionen aufgrund ihrer Parameter überspringbar. Nach dieser Änderung werden keine lokalen zusammensetzbaren Funktionen mehr übersprungen. Diese Änderung wurde vorgenommen, da es üblich ist und erwartet wird, dass lokale Funktionen Parameter aus der übergeordneten Funktion erfassen. Wenn sie übersprungen werden, kommt es häufig zu Programmfehlern.
Schauen wir uns das Beispiel an:
@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 wenn der Parametercount
aktualisiert wurde. Diese Änderungen haben wir jedoch nicht vorgenommen (I5648a)Das Problem, bei dem
rememberSaveable()
den alten Wert wiederhergestellt hat, wenn er mit Eingabeparametern verwendet wurde (I1b110, b/182403380) wurde behoben.
Version 1.0.0-beta03
24. März 2021
androidx.compose.runtime:runtime-*:1.0.0-beta03
wird freigegeben. Version 1.0.0-beta03 enthält diese Commits.
API-Änderungen
DefaultMonotonicFrameClock
wurde verworfen. Durch den Aufruf vonwithFrameNanos
oderRecomposer.runRecomposeAndApplyChanges
ohneMonotonicFrameClock
wird jetztIllegalStateException
ausgegeben. (I4eb0d)
Version 1.0.0-beta02
10. März 2021
androidx.compose.runtime:runtime-*:1.0.0-beta02
wird freigegeben. Version 1.0.0-beta02 enthält diese Commits.
Fehlerkorrekturen
- Einschränkungen für die öffentliche Nutzung experimenteller APIs erzwingen (I6aa29, b/174531520)
- Ein Fehler wurde behoben, der bei der Verwendung von
rememberSaveable { mutableStateOf(0) }
im Ziel von „navigation-compose“ fehlerhaft war. (I1312b, b/180042685, b/180701630)
Version 1.0.0-beta01
24. Februar 2021
androidx.compose.runtime:runtime-*:1.0.0-beta01
wird freigegeben. Version 1.0.0-beta01 enthält diese Commits.
Dies ist die erste Version der Betaversion von Compose 1.0.0.
API-Änderungen
- Fügen Sie die experimentelle API
Recomposer.runRecomposeConcurrentlyAndApplyChanges
hinzu, um ungültig erklärte Kompositionen aus der Mainframe-Schleife neu zusammenzusetzen. (I342d0) - Alle zusammensetzbaren Funktionen, die mit @ReadOnlyComposable gekennzeichnet sind, werden jetzt nach der Kompilierungszeit validiert, damit nur Aufrufe an andere @ReadOnlyComposables (I58961) gesendet werden
defaultFactory
fürcompositionLocalOf
undstaticCompositionLocalOf
ist jetzt erforderlich und nicht mehr optional.Durch diese Änderung wird ein potenzieller Typfehler für Typen beseitigt, die keine Nullwerte zulassen und für die keine Standard-Factory bereitgestellt wurde. Zuvor wurde dadurch ein Nullverweis für einen Typ bereitgestellt, der keine Nullwerte zulässt.
Wenn für Typen Nullwerte zulässig sind, sollten Sie
{ null }
als Standard-Factory angeben.Wir raten davon ab, lokale Parameter mit Typen zu verwenden, die keine Nullwerte zulassen, es sei denn, ein vernünftiger Standardwert kann angegeben werden. Wenn kein vernünftiger Standardwert vorhanden ist, sollte das Lambda
defaultFactory
eine Ausnahme ausgeben. Allerdings bedeutet das Auslösen einer Ausnahme, dass Nutzer des lokalen Netzwerks eine implizite Abhängigkeit von der Bereitstellung haben, die vom Typsystem nicht erzwungen wird. (Ifbd2a)Verworfene Symbole wurden aus der Erstellungslaufzeit entfernt (I3252c)
Das eingestellte
emptyContent()
wird entfernt. Verwende stattdessen{}
. (Idb33f, b/179432510)Provider wurde in CompositionLocalProvider umbenannt
- Der Kompositionskonstruktor akzeptiert keinen Schlüsselparameter mehr und wurde eingestellt.
- CurrentsCompositeKeyHash wurde in eine zusammensetzbare Top-Level-Eigenschaft anstelle einer zusammensetzbaren Funktion der obersten Ebene umgewandelt.
- CompositionData und CompositionGroup wurden in den Namespace „androidx.compose.runtime.tooling“ verschoben
- ComposableLambda wurde anstelle einer konkreten Klasse als Interface erstellt und verfügt nicht mehr über Typparameter.
- ComposableLambdaN wurde als Schnittstelle anstelle einer konkreten Klasse erstellt und verfügt nicht mehr über Typparameter.
- Die Funktion „SnapshotFlow“ wurde in den Namespace „androidx.compose.runtime“ verschoben
- Die Zusammenführungsmethode von SnapshotMutationPolicy ist nicht mehr experimentell
- Die Top-Level-Funktion „clearRoots“ von @TestOnly wurde entfernt. Es ist nicht mehr erforderlich.
- Die Funktionen „keySourceInfoOf“ und „resetSourceInfo“ wurden entfernt. Sie werden nicht mehr benötigt.
- Composer.collectKeySourceInformation wurde entfernt. Es ist nicht mehr erforderlich.
- Die Methoden "isJoinedKey", "joinKeyLeft" und "joinKeyRight" wurden entfernt. Sie werden nicht mehr benötigt.
- Verschiedene APIs auf oberster Ebene wurden verschoben und in verschiedene Dateien neu organisiert. Aufgrund der Semantik der Dateiklassen von Kotlin beeinträchtigt dies die Binärkompatibilität, aber nicht die Quellkompatibilität. Daher sollte dies für die meisten Nutzer kein Problem sein.
- (I99b7d, b/177245490)
SnapshotStateObserver ist nicht mehr experimentell (Id2e6a)
Einige zuvor verworfene APIs (Ice5da, b/178633932) wurden gelöscht.
Die folgenden Material API-Änderungen wurden vorgenommen:
- Der contentPadding-Parameter wurde zu Top/BottomAppBar hinzugefügt, um das Anpassen des Standardabstands zu ermöglichen.
- Parameter in BackdropScaffold neu geordnet, um den API-Richtlinien zu entsprechen, wenn erforderliche Parameter vor optionalen Parametern liegen.
- Der Parameter
icon
in BottomNavigationItem wurde so verschoben, dass er nachselected
undonClick
liegt. - Der Parameter
alwaysShowLabels
in BottomNavigationItem wurde inalwaysShowLabel
umbenannt. bodyContent
-Parameter wurden in einigen Komponenten in nurcontent
umbenannt.- Parameter in
ButtonDefaults.buttonColors()
neu geordnet. Da sich der Typ der Parameter nicht geändert hat, führt dies nicht zu einem Fehler in Ihrem Code. Stellen Sie sicher, dass Sie entweder benannte Parameter verwenden oder die Reihenfolge manuell aktualisieren. Andernfalls funktioniert der Code nicht wie zuvor. - Der Parameter
secondaryVariant
wurde zudarkColors()
hinzugefügt. Diese Farbe hat in der Regel die gleiche Farbe wiesecondary
im dunklen Design, sie bietet aber mehr Einheitlichkeit und eine weitere Anpassung. - ElevationDefaults und animateElevation() wurden von der öffentlichen API-Oberfläche entfernt, da sie nicht häufig verwendet bzw. nützlich waren.
onValueChangeEnd
wurde inSlider
inonValueChangeFinished
umbenannt und Nullwerte zulässig.- Der Parameter
text
inSnackbar
wurde aus Gründen der Einheitlichkeit incontent
umbenannt. - Der Parameter
contentPadding
wurde zuDropdownMenuItem
hinzugefügt, um das Anpassen des Standardabstands zu ermöglichen. Außerdem wurdecontent
als Erweiterung fürRowScope
entwickelt. 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 freigegeben. Version 1.0.0-alpha12 enthält diese Commits.
API-Änderungen
- Die Unterstützung für ViewGroups wurde von UiApplier entfernt. Die veralteten zusammensetzbaren Funktionen „emitView“ wurden entfernt. (Ifb214)
- CompositionReference wurde in CompositionContext umbenannt (I53fcb)
- ComponentActivity.setContent wurde nach androidx.activity.compose.setContent im Modul androidx.activity:activity-compose verschoben. ICF416
- Die Snapshot API wurde aktualisiert, damit sie den API-Richtlinien entspricht und interne Implementierungsklassen vor der öffentlichen API ausgeblendet wird. (Id9e32)
- Ambients wurden umbenannt, sodass sie unter Ambient > CompositionLocal umbenannt werden. Ambients hießen früher „AmbientFoo“, jetzt heißt „CompositionLocals“ LocalFoo. (I2d55d)
- Umbenennung von „Ambient“ in „CompositionLocal“ und „AmbientOf“/„staticAmbientOf“ in „compositionLocalOf“ bzw. „staticCompositionLocalOf“. Durch diese Änderung wird der Zweck von CompositionLocal deutlicher: ein Mechanismus zum Bereitstellen / Abrufen lokaler Werte für eine Komposition. CompositionLocal-Instanzen sollte das Präfix
Local
vorangestellt werden, z. B. val LocalFoo = CompositionLocalOf { Foo() }. (Ia55b6) - „takeMutableSnapshot“ und „takeSnapshot“ wurden zu Begleitmethoden von „Snapshot“. (I91f19)
@ComposableContract
wurde eingestellt und durch drei spezifischere Annotationen ersetzt.@ComposableContract(restartable = false)
wurde zu@NonRestartableComposable
@ComposableContract(readonly = true)
wurde zu@ReadOnlyComposable
@ComposableContract(preventCapture = true)
wurde zu@DisallowComposableCalls
@ComposableContract(tracked = true)
wurde entfernt. (I60a9d)Die Dienstprogramme emptyContent() und (@Composable () -> Unit).orEmpty() wurden verworfen, da sie keine positiven Auswirkungen auf die Leistung oder den Wert mehr haben (I0484d).
snapshotFlow
undwithMutableSnapshot
sind nicht mehr experimentell (I6a45f)Recomposer können jetzt geschlossen werden. Bei geschlossenen Neuzusammensetzungen wird die Neuzusammensetzung so lange fortgesetzt, bis die untergeordneten Koroutinen abgeschlossen sind. Recomposer.shutDown wurde in „Abbrechen“ umbenannt, um einen Kontrast mit „Schließen“ zu bilden. (Ib6d76)
Das Artefakt
compose:runtime-dispatch
wurde jetzt eingestellt. MonotonicFrameClock ist jetzt in „compose:runtime“ und „AndroidUiDispatcher“ in „compose:ui“ zu finden. (Ib5c36)Die API, auf die das Compiler-Plug-in „Compose“ ausgerichtet ist, wurde umgestaltet, um eine Schnittstelle anstelle einer konkreten Klasse zu verwenden. In der Schnittstelle wird auch kein Typparameter mehr verwendet.
Dies ist eine interne Änderung, die sich nicht auf die Quellcode-Kompatibilität auswirken sollte, ist aber eine funktionsgefährdende Änderung. (I3b922, b/169406779)
SnapshotMutableState wurde eingeführt (Icfd03).
DisposableEffectDisposable wurde in DisposaleEffectResult (Ica7c6) umbenannt
Recomposer.current() wurde entfernt. [Abstrakt]ComposeView werden jetzt standardmäßig auf verzögerte, fensterbezogene Recomposers verwendet, die vom ViewTreeLifecycleOwner für das Fenster gesteuert werden. Die Neuzusammensetzung und mit FrameNanos-basierte Animationsmarkierungen werden pausiert, während der Hostlebenszyklus angehalten wird. (I38e11)
Recomposer.runningRecomposers bietet jetzt einen globalen StateFlow mit schreibgeschütztem RecomposerInfo zur Beobachtung des laufenden Kompositionsstatus während des Prozesses. Bevorzugen Sie diese API Recomposer.current(), da diese mittlerweile eingestellt wurde. (If8ebe)
DisposableEffectDisposable wurde in DisposaleEffectResult (I3ea68) umbenannt
Version 1.0.0-alpha11
28. Januar 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha11
wird freigegeben. Version 1.0.0-alpha11 enthält diese Commits.
API-Änderungen
- onCommit, onDispose und onActive wurden zugunsten der SideEffect und DisposableEffect APIs (If760e) eingestellt
- Die emit() API und alle Überlastungen wurden verworfen und in ComposeNode umbenannt. Die APIs sind identisch, nur ein anderer Name, um den Namenskonventionen von Compose zu entsprechen (I4137b).
- "invalid" und "compositionReference()" wurden zugunsten von "currentRecomposeScope" und "memoryCompositionReference" eingestellt. (I583a8)
MerkObserver ersetzt CompositionLifecycleObserver und CompositionLifecycleObserver wurde jetzt eingestellt.
RememberObserver
ist ein Ersatz fürCompositionLifecycleObserver
mit geänderter Semantik und umbenannten Methoden. Der Wechsel zur neuen API kann mechanisch für Objekte erfolgen, die nur einmal gespeichert werden. Dies ist und bleibt die empfohlene Vorgehensweise. Wenn eine Referenz jedoch in einer Komposition mehr als einmal gespeichert wurde, wirdonRemembered
für jede Referenz aufgerufen, wobeionEnter
nur einmal aufgerufen wird.onEnter
wurde mehrmals aufgerufen, wenn das Objekt in Unterzusammensetzungen wieWithConstraints
undScaffold
verwendet wurde, wodurch die Garantie für einen einzelnenonEnter
-Aufruf unzuverlässig wurde und fürRememberObserver
entfernt wurde.RememberObserver
fügtonAbandoned
hinzu, die aufgerufen wird, wenn dieRememberObserver
-Instanz von dem anremember
übergebenen Callback zurückgegeben wird, aber im Zusammensetzungsstatus nicht gespeichert wurde. Daher wirdonRemembered
nie aufgerufen. Dies kann auftreten, wenn eine Ausnahme die Komposition vor dem Abschluss beendet oder die Zusammensetzung verworfen wird, weil der Status, für den eine Komposition erstellt wurde, nicht mehr aktuell ist oder nicht mehr benötigt wird. Wenn die Instanz vonRememberObserver
, die der oben genannten Referenzempfehlung folgt, eine externe Ressource sowohlonForgotten
als auchonAbandoned
verfolgt, weisen beide darauf hin, dass die Ressource nicht mehr benötigt wird. Wenn das Objekt die gestarteten Arbeitsschritte oder inonRemembered
zugewiesenen Ressourcen verfolgt, kannonAbandoned
ignoriert werden, da es beionRemembered
nicht aufgerufen wird. (I02c36)collectAsState()
-Funktionen nicht als Inline markieren (Ia73e4)
Fehlerkorrekturen
- WithConstraints wurde in „BoxWithConstraints“ umgestaltet und nach „fundation.layout“ verschoben. (I9420b, b/173387208)
- TestCoroutineDispatcher beim Testen verwenden (I532b6)
Version 1.0.0-alpha10
13. Januar 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha10
wird freigegeben. Version 1.0.0-alpha10 enthält diese Commits.
Wichtige Änderung
Durch die Umstrukturierung der internen Compiler API können Änderungen an den Knoten, die infolge der Zusammensetzung generiert wurden, in Batches in die Phase „Änderungen anwenden“ übertragen werden, nachdem alle
@Composable
-Funktionen abgeschlossen sind.Dies ist eine Änderung, die das Verhalten beeinträchtigt und sich auf den Anwendungscode auswirken kann, da Knoten über interne und experimentelle APIs erst nach dem Anwenden von Änderungen verfügbar sind. Dies lässt sich normalerweise umgehen, indem Sie Code mit solchen Abhängigkeiten in eine zusammensetzbare
SideEffect
-Datei einfügen, um die Ausführung des Codes zu verzögern, bis die Knoten erstellt und initialisiert wurden. (I018da)
API-Änderungen
- Es wurde eine Möglichkeit hinzugefügt, um nachzuverfolgen, ob Änderungen angewendet wurden. (I1b3e2)
Erweitern Sie [Zusammenfassung]ComposeView APIs, um Compose-basierte Ansichten wiederverwenden zu können, deren Zusammensetzung entsorgt und später neu erstellt werden soll. Fügen Sie APIs hinzu, um fensterbezogene Recomposers und CompositionReferences zum Erstellen von untergeordneten Kompositionen zu installieren und zu erkennen.
Fügen Sie ViewCompositionStrategy hinzu, um die Entsorgungsstrategie von [Abstrakt]ComposeViews zu konfigurieren. Das Standardverhalten ist beim Trennen des Fensters. (I860ab)
Fehlerkorrekturen
- Recomposer stellt jetzt einen Flow mit seinem aktuellen Status bereit, sodass seine Aktivität und die Aktivität der zugehörigen Effekte überwacht werden können. (Ifb2b9)
- Auf das native keyEvent kann jetzt über keyEvent.nativeKeyEvent zugegriffen werden (I87c57, b/173086397).
Version 1.0.0-alpha09
16. Dezember 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha09
wird freigegeben. 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 intern im Composer-Modul.
CompositionData und CompositionGroup wurden als Ersatz für die UI-Tooling API hinzugefügt, mit der Informationen zur Zusammensetzung extrahiert werden können. Sie sind öffentlich, aber nicht für die Verwendung außerhalb der UI-Tooling API gedacht, da sie die Rohdaten bereitstellen, die die UI-Tooling API interpretiert (I31a9c).
Die Applier-Klasse gilt nicht mehr als (Id85b0)
Die Oberfläche
Applier
wurde geändert, um das Erstellen von Bäumen von unten anstelle von Top-down zu vereinfachen.Die Methode
insert()
wurde ininsertTopDown()
umbenannt.Die neue Methode
insertBottomUp()
wurde hinzugefügt.Ein Anwender fügt entweder mit
insertTopDown()
oderinsertBottomUp()
Knoten in die Baumstruktur ein, die er bearbeitet, je nachdem, welcher besser funktioniert.Einige Bäume wie
LayoutNode
undView
sind beim Erstellen von Bottom-up-Anlagen viel effizienter als von Top-down. Vor dieser Änderung war ein Stapel von Einfügungen erforderlich, um die Bottom-up-Methode zu implementieren, die dann in jede Anwendung kopiert werden musste, die eine Bottom-up-Konstruktion für die Leistung erforderte. Mit dieser Änderung überschreibt einApplier
insertBottomUp()
, um einen Baum von Bottom-up zu erstellen, undinsertTopDown()
, um den Baum von oben nach unten zu erstellen. (Icbdc2)Compose unterstützt Attribut-Getter, die zusammensetzbare Aufrufe erstellen können. Dies wird auch weiterhin unterstützt, aber die Syntax, mit der ein Property-Getter als „@Composable“ deklariert wird, ändert sich.
Die inzwischen eingestellte Syntax hierfür war das Annotieren der Property selbst:
@Composable val someProperty: Int get() = ...
Die nun korrekte Syntax hierfür ist das Annotieren des Getter der Eigenschaft:
val someProperty: Int @Composable get() = ...
Beide Syntaxen funktionieren noch einige Zeit, aber die frühere veraltete Syntax wird letztendlich zu einem Kompilierungsfehler werden. (Id9197)
Fehlerkorrekturen
- Android-Inhaber intern (Ibcad0, b/170296980)
- subcomposeInto(LayoutNode) wurde intern festgelegt (Id724a)
Version 1.0.0-alpha08
2. Dezember 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha08
wird freigegeben. 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 Konsistenz mit den Erstellungsrichtlinien zu prüfen.
Außerdem wurden einige APIs mit
children
als Name für die nachgestellte Lambda-Funktion gemäß Lint-Prüfung und Anleitung zucontent
migriert. (Iec48e) - Recomposer akzeptiert keinen EmbeddingContext mehr. Erforderliche Planungsabhängigkeiten werden aus „EffectCoroutineContext“ abgerufen. FrameManager wurde eingestellt. Plattformintegrationen sollten ihre eigene globale Snapshot-Verarbeitung initialisieren. (I02369)
- Die Funktion „RestorableStateHolder.withRestorableState“ wurde in „ResorableStateProvider“ (I66640) umbenannt
Fehlerkorrekturen
- Ambients mit dem Namen
Ambient
als Suffix wurden eingestellt und durch neue Properties mit dem Präfix „Ambient“ ersetzt. Dabei wurden andere Richtlinien für Ambients und die Compose API befolgt. (I33440) - Entfernen Sie das alte UI-Test-Modul und die zugehörigen Stubs (I3a7cb).
Version 1.0.0-alpha07
11. November 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha07
wird freigegeben. Version 1.0.0-alpha07 enthält diese Commits.
Neue Funktionen
API-Änderungen
- Die Annotation
@UnionType
wurde eingestellt (I57cde). - „OfferDefault“ wurde als Alternative zum Bereitstellen von Ambients hinzugefügt. Damit können Sie Umgebungswerte angeben, die nur festgelegt werden, wenn noch kein Umgebungswert angegeben wurde. (Id6635, b/171024925)
- LaunchedTask wurde aus Gründen der Konsistenz mit den SideEffect und DisposableEffect APIs in LaunchedEffect umbenannt. LaunchedEffect ohne Themenparameter ist nicht zulässig, um Best Practices zu fördern. (Ifd3d4)
- Applier verfügt jetzt über onBeginChanges/onEndChanges-Callbacks, die aufgerufen werden, wenn ein Composer mit dem Anwenden von Änderungen auf die Struktur beginnt bzw. fertig ist. Sie können bei Bedarf für die Batch-Ressourcenverwaltung verwendet werden. ICF476
- Recomposer erfordert jetzt CoroutineContext beim Erstellen (Ic4610)
- Änderungen an der internen SlotTable-Implementierung, die sich nicht auf die öffentliche API auswirken sollte (If9828)
- Verworfene rxjava2-Adapter, die den Anfangswert nicht übernehmen, wurden entfernt (Idb72f).
Fehlerkorrekturen
- „fundation.Text“ wurde eingestellt und durch „material.Text“ ersetzt. Eine einfache, 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)
- Einige Layout-Symbole wurden von androidx.compose.ui nach androidx.compose.layout.ui verschoben. (I0fa98, b/170475424)
Externer Beitrag
- Das Modul
runtime-rxjava3
zum Schreiben wurde hinzugefügt. Ähnlich wieruntime-rxjava2
(I02cbf)
Version 1.0.0-alpha06
28. Oktober 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha06
wird freigegeben. Version 1.0.0-alpha06 enthält diese Commits.
API-Änderungen
- Recomposer ist jetzt eine CompositionReference und eine gültige übergeordnete Komposition. Die explizite Neuerstellung von Komponisten ist jetzt an weniger Stellen erforderlich. (I4036f)
- SideEffect wurde die DisposableEffect-Gegenstück-API hinzugefügt, wodurch die Rolle von onCommit-with-params mit der erforderlichen onDispose gefüllt wird.
- Die MemorystoreUpdatedState API wurde hinzugefügt, um Daten aus der Neuzusammensetzung zu laufenden oder langlebigen Prozessen wie DisposableEffects oder LaunchedTasks zu veröffentlichen.
- (Id50b9)
- MutableVector implementiert jetzt RandomAccess (I85d73, b/170461551)
- Es wurde eine zusammensetzbare Funktion von SideEffect hinzugefügt, mit der Nebeneffekte der Komposition auf Objekte angewendet werden können, die von der Komposition verwaltet werden. SideEffect soll die zusammensetzbare Funktion onCommit ersetzen. (Ia77c2)
- Neue experimentelle API RestorableStateHolder Sie ermöglicht, den mit [SavedInstanceState] und [rememberSavedInstanceState] für die Unterstruktur definierten Status zu speichern, bevor er freigegeben wird, damit er beim nächsten Mal mit dem wiederhergestellten Status wieder zusammengefügt werden kann. (I66884, b/166586419)
Fehlerkorrekturen
- Übergänge in ComposeTestRule aktivieren und die Option zum Aktivieren des blinkenden Cursors in ComposeTestRule entfernen. (If0de3)
Version 1.0.0-alpha05
14. Oktober 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha05
wird freigegeben. Version 1.0.0-alpha05 enthält diese Commits.
API-Änderungen
- Experimental Modifier.pointerInput sperrt Eingabemodifikator (Ia77d2)
- Die Scrollleistung von LazyColumn/Row wird verbessert, da bei jedem Scrollen weniger Arbeit in der Unterzusammensetzung ausgeführt wird. Die neue Methode hasUngültigeations() wurde für die Composition-Klasse hinzugefügt. Die Methode "hasPendingChanges()" von Recomposer wurde in "has Invalidations()" umbenannt (Ib2f32, b/168293643, b/167972292, b/165028371).
- Fügen Sie die ProductState API zum Starten von Koroutinen aus der Komposition hinzu, die im Laufe der Zeit einen einzelnen
State<T>
-Wert aktualisieren (Id4a57). - „launchInComposition“ wurde in „LaunchedTask“ umbenannt, um den Richtlinien für die Compose API zu entsprechen (I99a8e).
- Die Reihenfolge der place()-Aufrufe in benutzerdefinierten Layouts definiert nun die Zeichenreihenfolge für die untergeordneten Elemente (Ibc9f6).
Version 1.0.0-alpha04
1. Oktober 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha04
wird freigegeben. Version 1.0.0-alpha04 enthält diese Commits.
API-Änderungen
- "OwnerScope" wurde hinzugefügt, um die Sammlung von Layout- und Beobachtungsbereichen zuzulassen, sobald diese nicht mehr gültig sind. (Ic4cf8)
- AbgeleiteteStateOf API wurde hinzugefügt, um State-Objekte auf der Grundlage einer Berechnung zu erstellen, die andere State-Objekte lesen (und ableiten) kann (If758b)
- TestOnly API für SnapshotStateObserver (I6e2a9) hinzugefügt
Fehlerkorrekturen
- Foundation.Box wurde eingestellt. Verwende stattdessen „Foundation.layout.Box“. (Ie5950, b/167680279)
Version 1.0.0-alpha03
16. September 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha03
wird freigegeben. Version 1.0.0-alpha03 enthält diese Commits.
API-Änderungen
CompositionCoroutineScope
implementiert nicht mehrMonotonicFrameClock
. Aufrufer vonwithFrameNanos
sollten die Funktion der obersten Ebene explizit importieren. (Icb642, b/166778123)
Fehlerkorrekturen
- Globale Testfunktionen wie
onNode
oderwaitForIdle
wurden verworfen. Migrieren Sie zu ihren neuen Entsprechungen, die in ComposeTestRule (I7f45a) definiert sind. launchInComposition
startet keine unausgeteilten Koroutinen mehr (Ief6af, b/166486000)
Version 1.0.0-alpha02
2. September 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha02
wird freigegeben. Version 1.0.0-alpha02 enthält diese Commits.
API-Änderungen
- Fügen Sie die APIs
snapshotFlow
undwithMutableSnapshot
zum Erfassen und Generieren von Snapshot-Datenänderungen hinzu. (I3e722) Die Aufrufkonvention für zusammensetzbare 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 funktionsgefährdenden Änderung auf Quellebene, da die einzigen geänderten APIs Compiler APIs sind, für die eine ausdrückliche Zustimmung gilt. (I7afd2, b/158123185)
Planungsmethoden aus EmbeddingContext entfernt (I7b9be)
onPreCommit wurde eingestellt. onCommit verhält sich jetzt wie onPreCommit.
onCommit und onActive werden jetzt im selben Choreografen-Frame ausgeführt, in dem sich die Komposition ändert, und nicht am Anfang des nächsten Choreografen-Frames. (I70403)
Version 1.0.0-alpha01
26. August 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha01
wird freigegeben. 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 freigegeben. Version 0.1.0-dev17 enthält diese Commits.
API-Änderungen
- Benutzerdefinierte Emits können jetzt deklarieren, dass einer oder mehrere ihrer Setter unabhängig vom Emit übersprungen und neu zusammengesetzt werden können. (Ibbd13)
Veraltete FrameManager-Aufrufe entfernt.
Interne Compose-APIs wurden geändert, um den Aufwand für das Tracking von Statusobjekten wie
mutableStateof()
(I80ba6) zu reduzieren.Die zusammensetzbare Funktion
state { ... }
wurde verworfen und durch explizite Aufrufe vonremember { mutableStateOf(...) }
ersetzt. Dies reduziert die API-Oberfläche insgesamt und die Anzahl der Konzepte für die Statusverwaltung und entspricht dem Musterby mutableStateOf()
für die Delegierung von Klassenattributen. (Ia5727)Flow.collectAsState ermittelt jetzt den Standard-Dispatcher aus der Zusammensetzung selbst und nicht den Standardwert "Dispatchers.Main". (I9c1d9)
Ein Absturz, wenn ein Element, das den Status speichert, in der For-Schleife verwendet wurde, wird behoben. Jetzt ist der gleiche Schlüssel in savedInstanceState() zulässig. Die API von UiSavedStateRegistry ist jetzt an diese neue Anforderung angepasst (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561).
Fehlerkorrekturen
- „
emitView
“ wurde verworfen. Verwenden Sie nach Möglichkeit stattdessenAndroidView
, um Ansichten innerhalb von „Compose“ auszugeben. Beachten Sie, dass das direkte Erstellen von Ansichten und ViewGroups in Zukunft nur noch unterstützt wird, wenn es sich um Blätter im Zusammensetzungsbaum handelt. In diesem Fall ist dies mit AndroidView möglich. (I29b1e, b/163871221)
Version 0.1.0-dev16
5. August 2020
androidx.compose.runtime:runtime-*:0.1.0-dev16
wird freigegeben. Version 0.1.0-dev16 enthält diese Commits.
API-Änderungen
Die Standard-Mutationsrichtlinie von
mutableStateOf()
,ambientOf()
undsavedInstanceStateOf()
wurde instructuralEqualityPolicy()
anstelle vonreferentialEqualityPolicy()
geändert.Als Standardeinstellung wird jetzt
==
statt===
verwendet, um zu entscheiden, ob ein neuer Wert, der einermutableStateOf()
-Instanz zugewiesen ist, als Änderung betrachtet wird.Siehe https://kotlinlang.org/docs/reference/equality.html
ambientOf()
undsavedInstanceStateOf()
verwendenmutableStateOf()
in ihren Implementierungen und wurden so geändert, dass sie mitmutableStateOf()
übereinstimmen.Die strukturelle Gleichheit entspricht den Erwartungen der Entwickler besser.
Beispiel:
val state = mutableStateOf(1f)
gefolgt von
state.value = 1f
gilt nicht mehr als Änderung von
state
und die Verwendung vonstate
während der Zusammensetzung muss nicht mehr neu zusammengesetzt werden.Das ist eine nicht abwärtskompatible Änderung, aber in den meisten Fällen – z. B. bei Klassen, die
equals()
nicht überschreiben – hat dies keine spürbaren Auswirkungen auf eine Anwendung.Bei Klassen, die
equals()
überschreiben, wie z. B.data
, kann es zu Leistungseinbußen kommen, da ihreequals()
Methoden jetzt standardmäßig aufgerufen werden, wenn sie einemmutableStateOf()
zugewiesen werden.Das vorherige Verhalten lässt sich wiederherstellen, indem Sie den Richtlinienparameter
policy = referentialEqualityPolicy()
in Aufrufe vonmutableStateOf()
,ambientOf()
undsavedInstanceStateOf()
einfügen. (Ic21a7)Row
undColumn
sind jetzt Inline-Funktionen, wodurch der Aufwand für ihre Verwendung erheblich reduziert wird. (I75c10)
Fehlerkorrekturen
- „setViewContent“ wurde eingestellt. Verwenden Sie stattdessen „setContent“. (I7e497, b/160335130)
MonotonicFrameAnimationClock wurde hinzugefügt. Damit können Sie MonotonicFrameClock als AnimationClockObservable verwenden, um die Lücke zwischen den neuen, auf Koroutinen basierenden Uhren und APIs zu schließen, die noch die alten Callback-basierten Uhren verwenden.
Die MonotonicFrameClock-Äquivalent von „Manuelle AnimationClock“ heißt jetzt „ManuellFrameClock“. (I111c7, b/161247083)
„Modifier.stateDraggable“ wurde komplett überarbeitet und in „Modifier.swipeable“ umbenannt. Es wurde eine neue SwipeableState-Klasse eingeführt und DrawerState und BottomDrawerState wurden refaktoriert, um von ihr zu übernehmen. [Modal/Bottom]DrawerLayout übernimmt keinen onStateChange-Parameter mehr. (I72332, b/148023068)
Modifier.plus wurde eingestellt. Verwende stattdessen Modifier.then. „Dann“ gibt ein stärkeres Signal für die Sortierung, verhindert aber auch die Eingabe von
Modifier.padding().background() + anotherModifier
, wodurch die Kette unterbrochen wird und schwerer zu lesen ist (Iedd58, b/161529964).SubcomposeLayout wird hinzugefügt. Es handelt sich um eine Low-Level-Primitive, mit der die untergeordneten Elemente während der Messung erstellt werden können, falls einige Werte verwendet werden sollen, die erst später während der Messung für die Unterstrukturzusammensetzung verfügbar sind. Zum Beispiel wird WithConstraints nicht mit SubcomposeLayout implementiert. (I25cc8)
Material FilledTextField wurde in TextField umbenannt und das grundlegende TextField in BaseTextField umbenannt, damit die einfachste gewünschte API leichter zu finden und zu verwenden ist (Ia6242, b/155482676).
"Modifier.drawBackground" wurde in "Modifier.background" (I13677) umbenannt.
Version 0.1.0-dev15
22. Juli 2020
androidx.compose.runtime:runtime-*:0.1.0-dev15
wird freigegeben. Version 0.1.0-dev15 enthält diese Commits.
Abhängigkeiten aktualisieren
- Wenn Sie die
0.1.0-dev15
-Version von Compose verwenden möchten, müssen Sie Ihre Abhängigkeiten gemäß den neuen Code-Snippets aktualisieren, die oben unter Abhängigkeiten deklarieren gezeigt werden.
API-Änderungen
Die Anmerkung
@Model
wurde eingestellt. Verwenden Sie stattdessen state und mutableStateOf. Diese Entscheidung wurde nach sorgfältiger Diskussion getroffen.Begründung
Die Begründung umfasst unter anderem:
- Reduziert die API-Fläche und die Konzepte, die wir vermitteln müssen
- Entspricht eher anderen Toolkits (Swift UI, React, Flutter)
- Reversible Entscheidung. Wir können
@Model
später jederzeit wiederherstellen. - Die Verwendung von Sonderfällen und schwierig zu beantwortenden Fragen zur Konfiguration von
@Model
werden vermieden. @Model
-Datenklassen, Gleichheitszeichen, Hashcode usw.- Wie kann ich festlegen, dass einige Eigenschaften „beobachtet“ werden und andere nicht?
- Wie lege ich für die Beobachtung die strukturelle im Vergleich zur referenziellen Gleichheit fest?
- Reduziert die „Magie“ im System. Würde die Wahrscheinlichkeit verringern, dass jemand annimmt, dass das System schlauer ist als es ist (d. h. es weiß, wie eine Liste zu unterscheiden ist).
- Sorgt für einen intuitiveren Detaillierungsgrad der Beobachtung.
- Verbesserte Refaktorierbarkeit von Variable -> Eigenschaft in Klasse
- Dadurch ergeben sich möglicherweise neue Möglichkeiten für speziell auf den jeweiligen Bundesstaat zugeschnittene Optimierungen
- Passt sich besser an das restliche Ökosystem an und verringert die Ambiguität in Bezug auf einen unveränderlichen Zustand oder die „Akzeptanz eines veränderlichen Zustands“
Migrationshinweise
Nahezu alle bestehenden Verwendungen von
@Model
werden auf eine von zwei Arten relativ einfach umgewandelt. Im folgenden Beispiel wird die Klasse@Model
mit zwei Eigenschaften verwendet und in einer zusammensetzbaren Funktion verwendet.@Model class Position( var x: Int, var y: Int ) @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }
Alternative 1: Verwenden Sie
State<OriginalClass>
und erstellen Sie Kopien.Dieser Ansatz wird durch die Datenklassen von Kotlin erleichtert. Im Grunde genommen wandeln Sie alle zuvor
var
-Properties inval
-Properties einer Datenklasse um und verwenden dannstate
anstelle vonremember
. Weisen Sie den Statuswert dann mithilfe der Datenklasse-copy(...)
-Methode den geklonten Kopien des Originals zu.Wichtig: Dieser Ansatz funktioniert nur, wenn die einzigen Mutationen an dieser Klasse in demselben Bereich ausgeführt wurden, in dem die Instanz
State
erstellt wird. Wenn sich die Klasse intern außerhalb des Umfangs der Verwendung mutiert und Sie sich auf deren Beobachtung verlassen, ist der nächste Ansatz der von Ihnen zu verwendende Ansatz.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 Attributdelegate verwenden
Dieser Ansatz wird durch die Attributdelegate von Kotlin und die
mutableStateOf
API erleichtert, mit der Sie MutableState-Instanzen außerhalb der Zusammensetzung erstellen können. Ersetzen Sie im Wesentlichen allevar
-Properties der ursprünglichen Klasse durchvar
-Properties mitmutableStateOf
als Property-Delegaten. Dies hat den Vorteil, dass sich die Verwendung der Klasse gar nicht ändert, sondern nur die interne Implementierung. Das Verhalten ist jedoch nicht vollständig identisch mit dem ursprünglichen Beispiel, da jetzt jede Property einzeln beobachtet/abonniert wird, sodass die Neuzusammensetzungen, die Sie nach dieser Refaktorierung sehen, möglicherweise enger gefasst werden könnten.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/143413}921413}3, 41413}
Ändert die Strategie zur Codegenerierung des Compilers von Compose. Vor dieser Änderung wandelte der Compose-Compiler Aufrufe in zusammensetzbare Funktionen um. Mit dieser Änderung transformieren wir nun den Hauptteil einer zusammensetzbaren Funktion und lassen die Aufrufseite unverändert (zumeist).
Das bedeutet, dass der Großteil der Logik, die mit der Erstellungslaufzeit kommuniziert, zu Beginn des Funktionstexts und nicht auf der Aufrufseite stattfindet.
Dies sollte eine quellkompatible Änderung für die gesamte Verwendung von „Compose“ sein. Die meisten Nutzer von compose dürften aufgrund dieser Änderung keinen Code aktualisieren müssen.
Zu diesem Zweck wurde die JVM-Signatur aller zusammensetzbaren Funktionen geändert. Eine zusammensetzbare Funktion, die einen einzelnen Parameter akzeptiert, wird in eine Funktion umgewandelt, die drei Parameter akzeptiert. Die zusätzlichen Parameter sind die Composer-Ganzzahl, eine Schlüsselganzzahl. Eine Bitmasken-Ganzzahl, mit der Metadaten über Aufrufe weitergegeben werden.
Compose wandelt jetzt auch Standardargumente in eine zusammensetzbare Funktion um. Dies geschieht, ohne eine zusätzliche synthetische Standardüberlastung der Funktion selbst einzurichten, sodass durch diese Änderung weniger Funktionen definiert werden.
Bekannte bewusste Verhaltensänderungen, die daraus resultieren:
- Bei einigen Anrufen werden Anrufe im Hintergrund übersprungen.
- Zusammensetzbare Ausdrücke in Standardargumentausdrücken werden jetzt korrekt abonniert und verarbeitet
Diese Arbeit beinhaltete einige Optimierungen: 1. Das Ergebnis von Vergleichen von Parametern wird über die Aufrufgrafik an andere zusammensetzbare Funktionen weitergegeben. Dies führt zu weniger Vergleichen während der Laufzeit, verringert die Größe der Slot-Tabelle und das Überspringen von zusammensetzbaren Funktionen, die zuvor nicht übersprungen wurden.2. Parameter, die bei der Kompilierung als „statisch“ eingestuft werden, werden nicht mehr in der Laufzeit verglichen oder gespeichert. Dies reduziert die Anzahl der Vergleiche und die Größe der Slottabelle. 3. Die Ablaufstruktur des Funktionskörpers wird verwendet, um die Anzahl der generierten Gruppen zu minimieren. Dies reduziert die Größe der Slottabelle und führt zu einem geringeren Aufwand für die Laufzeit.4. Nicht verwendete Weiterleitungs- und Empfängerparameter für Funktionen werden bei der Bestimmung der Überspringbarkeit der Funktion nicht berücksichtigt, wenn sie nicht innerhalb des Hauptteils der Funktion verwendet werden.
Die meisten funktionsgefährdenden Änderungen bezogen sich auf APIs, die vom Compiler direkt angegriffen werden. Die typische Verwendung von „compose“ ist davon nicht betroffen: 1. Composer::startExpr wurde entfernt. 2. Composer::endExpr wurde entfernt. 3. Composer::call wurde eingestellt 4. Die nicht-varargs-Überlastungen von
key
wurden entfernt. Verwenden Sie ab sofort die Versionvararg
. 5. Die Pivotal-Anmerkung wurde eingestellt. Verwendekey
als Ersatz. 6. „ScopeUpdateScope::updateScope“ wurde geändert, sodass nun „Function3“ anstelle von „Function1“ erwartet wird. 7. „launchableFunction“ und „neustartableFunctionN“ wurden aktualisiert, um zusätzliche Parameter für die Kompilierungszeit einzubeziehen (I60756, b/143464846).sortWith und removeRange wurden zu MutableVector (Icccf7) hinzugefügt.
Es wurden Standardmethodenimplementierungen für CompositionLifecycleObserver (I24289) hinzugefügt.
Applier erfordert jetzt eine Methode „clear()“ zum Entsorgen von Kompositionen (Ibe697).
asMutableList() wurde MutableVector hinzugefügt, damit die Liste an die öffentliche API übergeben werden kann, ohne die gesamte Liste kopieren zu müssen. (I298df)
Erinnerungs-CoroutineScope() wurde hinzugefügt, um einen verwalteten CoroutineScope zu erhalten, der für das Starten von Jobs als Reaktion auf Ereignisse zusammengesetzt wird. (I0e264)
MutableVector ist eine neue Sammlung, in der keine der standardmäßigen Collection-Schnittstellen implementiert ist. Diese Sammlung bietet höhere Geschwindigkeit als andere Anforderungen und ist nur für interne Implementierungen gedacht. (I8ebd6)
StableMutableList
undStableMutableMap
wurden vorübergehend entfernt, um ein Problem in der Kotlin-Version zu vermeiden. Diese Schnittstellen werden wieder eingeführt, sobald „compose“ auf eine Version von Kotlin aktualisiert wurde, in der das Problem nicht auftritt.SnapshotStateList
undSnapshotStateMap
sind jetzt öffentlich, werden aber verworfen, sobaldStableMutableList
undStableMutableMap
wiederhergestellt wurden. (Ia7769)Fügen Sie die oberste Ebene der withFrameNanos-Funktion für das Timing der Animation hinzu (Ie34c5).
Die Annotation „@Untracked“ wurde eingestellt. Ersetzen durch @ComposableContract(tracked=false) (Id211e)
ResetableFunction und zugehörige APIs wurden in ComposableLambda usw. umbenannt. Diese APIs wurden nur vom Compiler angegriffen, sodass sich dies nicht normal auf die Kompatibilität auf Quellebene auswirken sollte. Die Umbenennung dient vor allem dazu, zu vermitteln, was diese Klasse besser ist, wenn sie in Stacktraces auftaucht (I7eb25).
@Composable-Annotation ist für Klassen (Ia5f02) nicht mehr gültig
Ambient<T>
ist jetzt @Stable statt @Unmutable (I0b4bb)Vor dieser Änderung konnte das Compose-Compiler-Plug-in Aufrufe an Konstruktoren innerhalb einer @Composable-Funktion nicht einfach abfangen, wenn eine (I5205a, b/158123804) vorhanden war.
Die Funktion „Recompose“ ist keine nützliche Abstraktion mehr. Ein Großteil der Neuzusammensetzung sollte das Ergebnis von MutableState-Zuweisungen sein. Für andere Aufgaben empfiehlt es sich, die Funktion
invalidate
zu verwenden, um eine Neuzusammensetzung des aktuellen Bereichs auszulösen. (Ifc992)Beobachten ist keine nützliche Abstraktion mehr. Wenn Sie ihn replizieren müssen, kann seine Implementierung einfach durch Erstellen einer zusammensetzbaren Funktion repliziert werden, die einen zusammensetzbaren Lambda-Parameter ausführt. Beispiel:
@Composable fun Observe(body: @Composable () -> Unit) = body()
(I40d37)@Direct wurde zugunsten von @ComposableContract(restartable=false) (If4708) eingestellt
Es wurde ein Adapter für den kürzlich eingeführten StateFlow hinzugefügt, mit dem der Anfangswert vorab eingefügt werden kann, sodass der zurückgegebene Status keine Nullwerte zulässt (I61dd8, b/156233789).
Es wurde ein Adapter für Flow hinzugefügt. Beispiel für die Verwendung: val value von flow.collectAsState() (If2198, b/153375923)
[Mutable]Die Stellvertreter-Operatoren für Status-Properties wurden in Erweiterungen verschoben, um die Optimierung von Property-Delegaten für Kotlin 1.4 zu unterstützen. Aufrufer müssen Importe hinzufügen, um
by state { ... }
oderby mutableStateOf(...)
weiterhin verwenden zu können. (I5312c)„androidx.compose.ViewComposer“ wurde nach „androidx.ui.node.UiComposer“ verschoben androidx.compose.Emittable wurde entfernt. Es war durch ComponentNode redundant. androidx.compose.ViewAdapters wurde entfernt. Sie werden nicht mehr unterstützt. Compose.composeInto wurde eingestellt. Verwende stattdessen
setContent
odersetViewContent
. „Compose.disposeComposition“ wurde eingestellt. Verwenden Sie stattdessen die Methodedispose
fürComposition
, die vonsetContent
zurückgegeben wird. androidx.compose.Compose.subcomposeInto wurde nach androidx.ui.core.subcomposeInto ComponentNode#emitInsertAt umbenannt in ComponentNode#insertAt ComponentNode#emitRemoveAt wurde in Component#removeAt Component0Node#emitMode umbenannt in androidx.ui.core.subcomposeIntoNode#emitInsertAt wurde in ComponentNode#insertAt umbenannt.Das Flag
ComposeFlags.COMPOSER_PARAM
wurde intrue
geändert. Dadurch wird die Strategie zur Codegenerierung für das „compose“-Plug-in geändert. Auf übergeordneter Ebene führt dies dazu, dass @Composable-Funktionen mit einem zusätzlichen synthetischen Parameter generiert werden, der an nachfolgende @Composable-Aufrufe übergeben wird, damit die Laufzeit die Ausführung ordnungsgemäß verwaltet. Dies ist eine erhebliche Änderung beim Binärcode, die jedoch bei jeder genehmigten Verwendung von „compose“ die Kompatibilität auf Quellebene aufrechterhalten sollte. (I7971c)Wichtige Änderungen an der Ambients API. Weitere Informationen finden Sie in der Protokoll- und
Ambient<T>
-Dokumentation (I4c7ee, b/143769776).„ui-livedata“ wurde hinzugefügt – ein neues Artefakt mit einem Adapter für LiveData. Beispiel für die Verwendung: val value von liveData.observeAsState() (Ie9e8c, b/150465596)
Rx-Adapter ohne expliziten Anfangswert werden eingestellt. Die Verwendung von null ist nicht immer die beste Standardeinstellung. 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 von observable.subscribeAsState() (Ifab4b, b/153369097)
savedInstanceState()
kann jetzt mit Typen verwendet werden, für die Nullwerte zulässig sind (I6847f, b/153532190).Neue „listSaver()“- und „mapSaver()“-Objekte zum Schreiben benutzerdefinierter Saver-Objekte (I8cf68, b/152331508)
Neue Funktionen: savedInstanceState() undmemorySavedInstanceState(). Sie ähneln state() und keep(), haben aber eine integrierte Instanzstatusunterstützung (If1987, b/152025209)
Fehlerkorrekturen
runOnIdleCompose
umbenannt inrunOnIdle
(I83607)- Made LayoutNode experimentelle API (I4f2e9)
- „androidx.ui.foundation.TextFieldValue“ und „androidx.ui.input.EditorValue“ wurden eingestellt. Die zusammensetzbaren Funktionen „TextField“, „FilledTextField“ und „CoreTextField“, die diesen Typ verwenden, wurden ebenfalls eingestellt. Verwenden Sie stattdessen androidx.ui.input.TextFieldValue (I4066d, b/155211005).
- Die eingestellte DrawBackground API wurde entfernt und durch den Modifier ersetzt. Wir haben die DrawBackground-Implementierungen für Farbe, Pinsel und Farbe überarbeitet, um Codepfade zu reduzieren. Außerdem wurde die Anforderung entfernt, dass der Modifikator als Teil der Komposition erstellt werden muss. (I0343a)
- Die APIs der höheren Ebene, die ein Canvas zur Freigabe von CanvasScope bereitstellen, wurden aktualisiert. Nutzer müssen dann ihre eigenen Paint-Objekte nicht mehr verwalten. Nutzer, die weiterhin Zugriff auf einen Canvas benötigen, können die DrawCanvas-Erweiterungsmethode verwenden. Diese bietet einen Callback, mit dem Zeichenbefehle mit dem zugrunde liegenden Canvas ausgeführt werden können. (I80afd)
- Die nachgelagerte Lambda API WithConstraints wurde geändert. Statt zwei Parametern gibt es nun einen Empfängerbereich, der neben den Einschränkungen und layoutDirection der Eigenschaften minWidth, maxWidth, minHeight und maxHeight in Dp definiert ist (I91b9a, b/149979702)
- Modifikator für symmetrischen Abstand hinzugefügt. (I39840)
- „wrapContentWidth“ und „wrapContentHeight“ wurden aktualisiert, sodass jetzt eine vertikale oder horizontale Ausrichtung anstelle einer Ausrichtung erwartet wird. Der Gravitationsmodifikator wurde aktualisiert, um die vertikale oder horizontale Ausrichtung zu akzeptieren. Die Zeilen-, Spalten- und Filterlisten wurden aktualisiert, um benutzerdefinierte kontinuierliche Ausrichtungen zu unterstützen. (Ib0728)
- Das Modul "ui-text" wird in "ui-text-core" (I57dec) umbenannt.
- Verbesserung der DrawModifier API:
- Der Empfängerbereich fürdraw() ContentDrawScope wurde erstellt.
- Alle Parameter fürdraw() wurden entfernt
- DrawScope hat die gleiche Oberfläche wie das frühere CanvasScope
- ContentDrawScope verfügt über die MethodedrawContent() (Ibaced, b/152919067).
- ColoredRect wurde eingestellt. Verwende stattdessen
Box(Modifier.preferredSize(width, height).drawBackground(color))
. (I499fa, b/152753731) - Der Operator "Modifier Plus" wurde durch Erweiterungsfunktionen auf Werkseinstellungen ersetzt (I225e4).
- RowScope- und ColumnScope-Mitglieder sind jetzt außerhalb von Row und Column zugänglich. (I3a641)
- LayoutFlexible wurde in LayoutWeight umbenannt. Enger zu füllender Parameter wurde umbenannt. (If4738)
- WithConstraints hat LayoutDirection-Parameter erhalten (I6d6f7)
- Hintergrund wurde in „Hintergrund zeichnen“ umbenannt und der Hintergrund soll standardmäßig gespeichert werden (Ia0bd3).
- ButtonStyle wurde durch eindeutige Funktionen ersetzt und Textüberlastung (String) beseitigt. Informationen zur Nutzung 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
- Nicht benötigte APIs wie Looper und Handler aus der Portierungsebene für die Erstellung der Laufzeit entfernen (I6847d)
Flow<T>.collectAsState()
ohne Anfangswert verwerfen. Verwenden Sie stattdessenStateFlow<T>
oder übergeben Sie einen expliziten Anfangswert. (I63f98, b/157674865)