Runtime di scrittura
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshots
(Consulta la documentazione relativa a tutti i pacchetti API
Aggiornamento più recente | Release stabile | Candidato per la release | Versione beta | Release alpha |
---|---|---|---|---|
17 aprile 2024 | 1.6.6 | - | - | 1.7.0-alpha07 |
Struttura
Compose è una combinazione di 7 ID gruppo Maven all'interno di androidx
. Ogni gruppo contiene un sottoinsieme specifico di funzionalità, ciascuna con il proprio set di note di rilascio.
Questa tabella illustra i gruppi e fornisce i link a ciascun insieme di note di rilascio.
Raggruppa | Descrizione |
---|---|
compose.animation | Creare animazioni nelle applicazioni Jetpack Compose per arricchire l'esperienza utente. |
compose.compiler | Trasforma le funzioni @Composable e abilita le ottimizzazioni con un plug-in di compilazione Kotlin. |
compose.foundation | Scrivi applicazioni Jetpack Compose con componenti di base pronti all'uso ed estendi le basi per creare i componenti del tuo sistema di progettazione. |
compose.material | Crea UI di Jetpack Compose con componenti Material Design pronti per l'uso. Si tratta del punto di accesso di livello superiore di Compose, progettato per fornire componenti corrispondenti a quelli descritti su www.material.io. |
compose.material3 | Crea UI di Jetpack Compose con i componenti di Material Design 3, la prossima evoluzione di Material Design. Material 3 include temi e componenti aggiornati e funzionalità di personalizzazione di Material You, come il colore dinamico, ed è progettato per essere coerente con il nuovo stile visivo e la UI di sistema di Android 12. |
compose.runtime | Componenti di base fondamentali del modello di programmazione e della gestione dello stato di Compose, nonché del runtime di base per il plug-in di Compose Compiler da utilizzare come target. |
compose.ui | Componenti fondamentali dell'interfaccia utente di composizione necessari per interagire con il dispositivo, inclusi layout, disegno e input. |
Dichiarazione delle dipendenze
Per aggiungere una dipendenza su Compose, devi aggiungere il Repository Maven di Google al tuo progetto. Per ulteriori informazioni, consulta il Repository Maven di Google.
Aggiungi le dipendenze per gli artefatti necessari nel file build.gradle
per
l'app o il modulo:
Trendy
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" } }
Per ulteriori informazioni sulle dipendenze, vedi Aggiungere dipendenze build.
Feedback
Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se rilevi nuovi problemi o hai idee per migliorare la libreria. Dai un'occhiata ai problemi esistenti in questa libreria prima di crearne una nuova. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.
Per ulteriori informazioni, consulta la documentazione di Issue Tracker.
Tracciamento runtime versione 1.0
Versione 1.0.0-beta01
29 novembre 2023
androidx.compose.runtime:runtime-tracing:1.0.0-beta01
viene rilasciato. La versione 1.0.0-beta01 contiene questi commit.
Versione 1.0.0-alpha05
15 novembre 2023
androidx.compose.runtime:runtime-tracing:1.0.0-alpha05
viene rilasciato. La versione 1.0.0-alpha05 contiene questi commit.
Correzioni di bug
- Blocca le dipendenze alle versioni stabili supportate più basse (ad es.Composer-runtime e tracing-perfetto). Consente di risolvere un problema per cui il tracciamento del runtime di Compose permetteva di inserire nell'app una versione più recente del runtime di Composer.
Versione 1.0.0-alpha04
23 agosto 2023
androidx.compose.runtime:runtime-tracing:1.0.0-alpha04
viene rilasciato. La versione 1.0.0-alpha04 contiene questi commit.
Nuove funzionalità
- Compatibile con le ultime versioni di Benchmark e Tracciamento Perfetto, abilitando il supporto per il tracciamento della composizione all'avvio dell'app (avvio a freddo), ad esempio in AndroidX Benchmark e Android Studio (a partire da Hedgehog Beta 2).
Modifiche alle API
- Rinominato
androidx.tracing.perfetto.Trace
inandroidx.tracing.perfetto.PerfettoSdkTrace
. (I44af8). - Rendere le API dell'SDK Tracciamento Perfetto coerenti con
android.os.Trace
. (I73ba0, b/282199917) - Prerequisiti per il tracciamento all'avvio dell'app. (Iad890)
- Sono stati uniti i file API pubblici e sperimentali (I0f2e1, b/278769092)
Versione 1.0.0-alpha02
8 febbraio 2023
androidx.compose.runtime:runtime-tracing:1.0.0-alpha02
viene rilasciato. La versione 1.0.0-alpha02 contiene questi commit.
Nuove funzionalità
- Nessuna modifica funzionale. Più ottimizzazioni delle prestazioni nelle dipendenze downstream
androidx.tracing:tracing-perfetto*
.
Versione 1.0.0-alpha01
7 settembre 2022
androidx.compose.runtime:runtime-tracing:1.0.0-alpha01
viene rilasciato. La versione 1.0.0-alpha01 contiene questi commit.
Nuove funzionalità
androidx.compose.runtime:runtime-tracing
è una libreria che, in presenza di strumenti che la supportano (disponibile a breve), consente il tracciamento esteso in un'app Compose. Questa release iniziale è 1.0.0-alpha01.
Versione 1.7
Versione 1.7.0-alpha07
17 aprile 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha07
viene rilasciato. La versione 1.7.0-alpha07 contiene questi commit.
Nuove funzionalità
- È stata aggiunta la possibilità di fornire una composizione locale che viene calcolata in base ai valori di altri locali di composizione per impostazione predefinita, utilizzando
compositionLocalWithComputedDefault()
o fornendo una funzione lambda da utilizzare per calcolare il valore utilizzandoprovidesComputed
anzichéprovides
. - Il valore di una composizione locale può essere ottenuto utilizzando la proprietà
currentValue
della composizione locale accessibile dall'interno del calcolo lambda del valore. Viene utilizzato al posto dicurrent
, che è accessibile solo nelle funzioni@Composable
. (Iadbc0).
Modifiche alle API
- Gli oggetti di stato appena creati sono immediatamente accessibili da altri snapshot, incluso lo snapshot globale, con il loro stato iniziale. Eventuali modifiche successive non sono visibili finché non viene applicato lo snapshot in cui è stato creato l'oggetto.
- Lo stato iniziale di
mutableStateOf()
, così come delle relative versioni primitive, è il valore trasmesso come parametro amutableStateOf()
. Lo stato iniziale dimutableStateListOf()
emutableStateMapOf()
è vuoto. - Sono stati aggiunti
Snapshot.isInSnapshot
eSnapshot.PreexistingSnapshotId
, utilizzati per abilitare un oggetto di stato per consentire l'accesso immediato dallo snapshot globale al momento della sua creazione. - Gli oggetti con stato personalizzato possono supportare l'accesso immediato seguendo il pattern delle modifiche apportate agli oggetti snapshot integrati. (I84a17)
Correzioni di bug
- È stata corretta l'unione di
readObserver
negli snapshot nidificati. Di conseguenza, gli stati derivati nidificati potrebbero non essere considerati validi se utilizzati all'interno di un elementosnapshotFlow
. (Idf138)
Versione 1.7.0-alpha06
3 aprile 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha06
viene rilasciato. La versione 1.7.0-alpha06 contiene questi commit.
Correzioni di bug
- Correggi l'invio di singoli valori per la gestione di
providesDefault
(538f45) - Evita un deadlock nel ricompositore che accede all'orologio del frame (07e5c6).
Versione 1.7.0-alpha05
20 marzo 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha05
viene rilasciato. La versione 1.7.0-alpha05 contiene questi commit.
Correzioni di bug
- Cancella le modifiche recenti alla composizione disattivata (5950bc)
Versione 1.7.0-alpha04
6 marzo 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha04
viene rilasciato. La versione 1.7.0-alpha04 contiene questi commit.
Miglioramenti del rendimento
- Chiama
Snapshot.current
una volta per ogni valutazione dello stato derivato (ee7daf) - Leggi
currentRecord
una volta per osservazione nella composizione (b882b2) - Rimuovi l'allocazione accidentale dell'iteratore in
snapshotFlow
(231e56) - Abilita
nonSkippingGroupOptimization
per le librerie di scrittura. Questo fa sì che il codice generato per tutte le funzioni componibili non riavviabili in Androidx sia più efficiente. In futuro prevediamo di abilitare questa funzionalità per impostazione predefinita. I(acbc08)
Versione 1.7.0-alpha03
21 febbraio 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha03
viene rilasciato. La versione 1.7.0-alpha03 contiene questi commit.
Modifiche alle API
- Introduci un gruppo di sostituzione per migliorare il rilevamento delle modifiche (0941b5)
Miglioramenti del rendimento
- Migliora l'allocazione della memoria durante il rilevamento delle modifiche (53e7fd)
- Correzione di una perdita di memoria nel compositore (0e097d)
- Utilizza
ScopeMap
per superare le invalidazioni durante la ricomposizione (e19a7e) - Mappa delle invalidazioni di Optimize per mantenere solo gli stati derivati (f11c44)
- Sostituisci gli utilizzi di
IdentityArraySet
conScatterSet
(db572e) - Ottimizza
removeScope
inScopeMap
(bb0530)
Versione 1.7.0-alpha02
7 febbraio 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha02
viene rilasciato. La versione 1.7.0-alpha02 contiene questi commit.
Correzioni di bug
- Annulla le lambda componibili in sottocomposizioni nello stesso frame. (98301c)
- Chiama il callback
onRelease
nello stesso ordine usato peronForgotten
. (2cd790) - Filtra gli stati modificati che non sono osservati in
snapshotFlow
. (796b80)
Miglioramenti del rendimento
- Modifica l'osservatore di snapshot quando è già trasparente. (f60f30)
- Ottimizza
SnapshotIdSet.lowest()
. (7ae149) - Utilizza un
fold()
senza allocazione inSnapshotIdSet
. (532b7d) - Rimuovi l'allocazione dell'iteratore (83f96b)
Versione 1.7.0-alpha01
24 gennaio 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha01
viene rilasciato. La versione 1.7.0-alpha01 contiene questi commit.
Ottimizzazioni del rendimento
- Aggiungere la possibilità di creare slot dopo aver aggiunto un gruppo secondario (b5960c)
- Ottimizza la registrazione delle modifiche degli stati delle istantanee (28c3fe)
- Attiva modalità Ignora forte (ed1766)
Correzioni di bug
- Tieni in considerazione il meta parametro predefinito in intrinse ricorda (096665)
- Rendi
currentCompoundHashKey
unico in più casi (d4a872) - Realizza i gruppi all'uscita dalla chiamata di funzione in linea (2a90fc)
Versione 1.6
Versione 1.6.6
17 aprile 2024
androidx.compose.runtime:runtime-*:1.6.6
viene rilasciato. Nessuna modifica dall'ultima release.
Versione 1.6.5
3 aprile 2024
androidx.compose.runtime:runtime-*:1.6.5
viene rilasciato. La versione 1.6.5 contiene questi commit.
Versione 1.6.4
20 marzo 2024
androidx.compose.runtime:runtime-*:1.6.4
viene rilasciato. La versione 1.6.4 contiene questi commit.
Versione 1.6.3
6 marzo 2024
androidx.compose.runtime:runtime-*:1.6.3
viene rilasciato. La versione 1.6.3 contiene questi commit.
Versione 1.6.2
21 febbraio 2024
androidx.compose.runtime:runtime-*:1.6.2
viene rilasciato. La versione 1.6.2 contiene questi commit.
Versione 1.6.1
7 febbraio 2024
androidx.compose.runtime:runtime-*:1.6.1
viene rilasciato. La versione 1.6.1 contiene questi commit.
Correzioni di bug
- Chiama il callback
onRelease
nello stesso ordine usato peronForgotten
. (2cd790) - Filtra gli stati modificati che non sono osservati in
snapshotFlow
. (796b80)
Versione 1.6.0
24 gennaio 2024
androidx.compose.runtime:runtime-*:1.6.0
viene rilasciato. La versione 1.6.0 contiene questi commit.
Modifiche importanti dalla versione 1.5.0
Nuove funzionalità
- Ripeti la generazione delle eccezioni ingerite durante il loop di ricomposizione (4dff9a)
Ottimizzazioni del rendimento
- Ottimizza la registrazione delle modifiche degli stati delle istantanee (28c3fe)
- Ottimizza
rememberSaveable
(f01d79) - Rimanda la rilettura degli stati derivati fino alla registrazione delle modifiche (f38099)
- Migliora la fornitura dei valori locali della composizione (a337ea)
Correzioni di bug
- Correggi la perdita di memoria della tabella degli slot (73fcfe)
- Salta la ricomposizione delle sottocomposizioni che verranno rimosse. (Ieeb99, b/254645321).
- Attiva
RememberObserver
cicli di vita solo quando è archiviato nel calcolo del promemoria. (f6b4dc) - Limita l'acquisizione di
$dirty
alle lambda in linea. (acfca0) - Correggi i contenuti spostabili a volte che ricevono composizioni errate. (035cd6)
Versione 1.6.0-rc01
10 gennaio 2024
androidx.compose.runtime:runtime-*:1.6.0-rc01
viene rilasciato. La versione 1.6.0-rc01 contiene questi commit.
Versione 1.6.0-beta03
13 dicembre 2023
androidx.compose.runtime:runtime-*:1.6.0-beta03
viene rilasciato. La versione 1.6.0-beta03 contiene questi commit.
Versione 1.6.0-beta02
29 novembre 2023
androidx.compose.runtime:runtime-*:1.6.0-beta02
viene rilasciato. La versione 1.6.0-beta02 contiene questi commit.
Versione 1.6.0-beta01
15 novembre 2023
androidx.compose.runtime:runtime-*:1.6.0-beta01
viene rilasciato. La versione 1.6.0-beta01 contiene questi commit.
Modifiche alle API
- Propagare determinati valori di stabilità nell'annotazione. (274a4c)
Correzioni di bug
- Utilizza la norma di riferimento per lo stato dell'ambito locale della composizione nel contesto. (83361c)
- Limita l'acquisizione $dirty alle lambda in linea. (acfca0)
- Correggi i contenuti spostabili a volte che ricevono composizioni errate. (035cd6)
- Utilizza mappe hash più veloci senza allocazione in
RecomposeScopeImpl
. (D79494) - Usa
ObjectIntMap
inDerivedState
. (21862e) - Usa
IntRef
per l'interoSnapshotThreadLocal
inDerivedState
. (04eaf4)
Versione 1.6.0-alpha08
18 ottobre 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha08
viene rilasciato. La versione 1.6.0-alpha08 contiene questi commit.
Correzioni di bug
- Attiva
RememberObserver
cicli di vita solo quando è archiviato nel calcolo del promemoria. (f6b4dc) - Migliora le allocazioni nell'ordinamento degli elenchi di invalidità. (954d63)
- Utilizza le nuove mappe senza allocazione in
SnapshotStateObserver
. (4303ce) - Cancella invalidazioni quando la composizione è disattivata. (e001be).
Versione 1.6.0-alpha07
4 ottobre 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha07
viene rilasciato. La versione 1.6.0-alpha07 contiene questi commit.
Modifiche alle API
SnapshotStateList
è ora contrassegnato comeRandomAccess
per consentire l'utilizzo della versione di indicizzazione diretta degli assistenti elenco. (I5210c, b/219554654)
Versione 1.6.0-alpha06
20 settembre 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha06
viene rilasciato. La versione 1.6.0-alpha06 contiene questi commit.
Versione 1.6.0-alpha05
6 settembre 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha05
viene rilasciato. La versione 1.6.0-alpha05 contiene questi commit.
Versione 1.6.0-alpha04
23 agosto 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha04
viene rilasciato. La versione 1.6.0-alpha04 contiene questi commit.
Nuove funzionalità
- Ripeti la generazione delle eccezioni ingerite durante il loop di ricomposizione (4dff9a)
Modifiche alle API
- È stato aggiunto un metodo per disattivare
ReusableComposition
, rimuovendo le osservazioni, ma mantenendo i nodi. La composizione disattivata può essere riattivata chiamandosetContent
. (Ib7f31). - Aggiungi l'interfaccia
ReusableComposition
per la gestione del ciclo di vita e il riutilizzo delle sottocomposizioni. (I812d1, b/252846775)
Versione 1.6.0-alpha03
9 agosto 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha03
viene rilasciato. La versione 1.6.0-alpha03 contiene questi commit.
Correzioni di bug
- Correggi la nuova ottimizzazione di
CompositionLocalProvider
(3118e88) - Correggi il modo in cui i nodi di contenuti spostabili vengono disassemblati. (5e3d59b).
Versione 1.6.0-alpha02
26 luglio 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha02
viene rilasciato. La versione 1.6.0-alpha02 contiene questi commit.
Nuove funzionalità e miglioramenti delle prestazioni
- Ottimizza
rememberSaveable
(f01d79) - Rimanda la rilettura degli stati derivati fino alla registrazione delle modifiche (f38099)
- Migliora la fornitura dei valori locali della composizione (a337ea)
SideEffect
è contrassegnato come@ExplicitGroupsComposable
per evitare di generare un gruppo. (I74815)- Evita di confrontare la composizione di mappe locali quando vengono riutilizzate (782071)
Modifiche alle API
- È stato aggiunto un sovraccarico di casi speciali per
CompositionLocalProviders
che evita l'overhead utilizzato per velocizzare la fornitura di più valori, ma comporta l'overhead se si fornisce un singolo valore. (I6d640, b/288169379)
Correzioni di bug
- Correggi la perdita di memoria della tabella degli slot (73fcfe)
- Correggi la modalità di ripristino di
rememberSaveable
quandostateSaver
restituisce null (90748c)
Versione 1.6.0-alpha01
21 giu 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha01
viene rilasciato. La versione 1.6.0-alpha01 contiene questi commit.
Correzioni di bug
- Salta la ricomposizione delle sottocomposizioni che verranno rimosse. (Ieeb99, b/254645321).
- Allocazioni ridotte durante l'applicazione degli snapshot. (I65c09)
- Evita di calcolare
readableHash
inDerivedState
se lo snapshot non è stato modificato (68c565)
Versione 1.5
Versione 1.5.4
18 ottobre 2023
androidx.compose.runtime:runtime-*:1.5.4
viene rilasciato. La versione 1.5.4 contiene questi commit.
Versione 1.5.3
4 ottobre 2023
androidx.compose.runtime:runtime-*:1.5.3
viene rilasciato. La versione 1.5.3 contiene questi commit.
Versione 1.5.2
27 settembre 2023
androidx.compose.runtime:runtime-*:1.5.2
viene rilasciato. La versione 1.5.2 contiene questi commit.
Versione 1.5.1
6 settembre 2023
androidx.compose.runtime:runtime-*:1.5.1
viene rilasciato. La versione 1.5.1 contiene questi commit.
Versione 1.5.0
9 agosto 2023
androidx.compose.runtime:runtime-*:1.5.0
viene rilasciato. La versione 1.5.0 contiene questi commit.
Modifiche alle API
- Allocazioni rimosse nella ricomposizione, nelle animazioni dei colori e in
AndroidComposeView
. (Ib2bfa) - È stata aggiunta un'annotazione
@StateFactoryMarker
per contrassegnare le funzioni che creano stati e devono essere incluse in una chiamataremember
. (I64550) - Aggiungi versioni primitive di State e
MutableState
(fb3d89) - Aggiunto
Snapshot.isApplyObserverNotificationPending
(I672a5) - Sono state aggiunte versioni primitive dell'API
State
, che consentono il monitoraggio di valori Int, Long, Float e Double negli oggettiState
senza penalità per l'autoboxing. Per usarli, usa i nuovi metodi di fabbricamutableIntState(Int)
,mutableFloatStateOf(Float)
e così via. (I48e43).
Correzioni di bug
- Salta la ricomposizione delle sottocomposizioni che verranno rimosse. (Ieeb99, b/254645321).
- Non conservare il riferimento dello snapshot in
ComposerImpl
(0206f7) - Non applicare la composizione due volte (f5791b)
- Assicurati l'annullamento della convalida per i valori dello stato derivato non inizializzato (aa2a92)
- Chiama
onEndChanges
durante l'eliminazione della composizione. (62cc8c) - Risoluzione del problema dello spostamento di contenuti in una sottocomposizione (4beb41)
- Correggi potenziali deadlock (c1a425 e 8edce0)
- Il ricompositore creato per una finestra Android bloccherà ora le chiamate a
withFrameNanos
anziché a tutte le composizioni quando riceve una notifica ON_STOP. Questo significa che le finestre associate alle attività interrotte continueranno a ricomporsi per le modifiche ai dati, ma le animazioni o qualsiasi altro chiamante diwithFrameNanos
verranno bloccate. (Id9e7f, b/240975572). - Esegui i callback di disattivazione per
LayoutNode
prima di eliminare gli effetti 3784073 - Risolvere il problema dei flag modificati per le lambda riavviate ea81df9
- Correggi la regressione della modifica in tempo reale per Composable con nodi 73fd4d8
- ON_STOP deve mettere in pausa la trasmissione dell'orologio al frame anziché la composizione ae276f1
- Annulla gli ambiti
SnapshotStateObserver
per gli stati derivati non modificati 84d9b1c - Risolvere il potenziale deadlock durante lo smaltimento delle composizioni 28761fc
- Risolvere il problema dello spostamento di contenuti in una sottocomposizione 92d4156
- Correggere i flag modificati per le lambda riavviate (8a03e9)
- Esegui i callback di disattivazione per
LayoutNode
prima di eliminare gli effetti (8b0fa4) - Correggi
endToMarker()
quando termini i gruppi di nodi. (d71d980) - Usa il gruppo
SlotWriter
corrente per verificare la disattivazione (a0b518b) - Rimuovi il
fill
inSlotTable.moveSlotGapTo()
e chiudilo in modo che sia chiuso (81f9935) - Correggere le invalidazioni mancanti durante lo spostamento di contenuti spostabili (1d7c024)
- Correggere le invalidazioni immediate per i contenuti mobili spostati (8676618)
Miglioramenti del rendimento
- Evita di calcolare
readableHash
inDerivedState
se lo snapshot non è stato modificato. (307102) - Allocazioni ridotte (I65c09, d7ea77, 727974 e 445808)
- Annullamento rapido di Scrivi
CoroutineScopes
(a55362 e bd382f) - Sovrascrivi i record degli oggetti di stato con record di stato non accessibili (c986960)
- Usa il compositore dell'ambito corretto quando realizzi i gruppi (9a5e5b6)
- Utilizza
IdentityArraySet
per archiviare le invalidazioni delle istantanee (7f60cca) - Riduci le allocazioni per le osservazioni degli snapshot (5bc535f)
Versione 1.5.0-rc01
26 luglio 2023
androidx.compose.runtime:runtime-*:1.5.0-rc01
viene rilasciato. La versione 1.5.0-rc01 contiene questi commit.
Correzioni di bug
Rimanda la rilettura degli stati derivati fino alla registrazione delle modifiche (f38099)
È disponibile un'ispezione facoltativa per consigliare di eseguire la migrazione delle chiamate di
mutableStateOf()
ai tipi specializzati corrispondenti per le primitive. L'ID lint èAutoboxingStateCreation
. In precedenza, questa ispezione era abilitata per impostazione predefinita per tutti i progetti. Per visualizzare questo avviso nell'editor di Android Studio e negli output lint del progetto, cambia la gravità da informativa ad avviso (o superiore) dichiarandowarning "AutoboxingStateCreation"
all'interno della configurazione build.gradle o build.gradle.kts del modulo, come mostrato (I34f7e):android { lint { warning "AutoboxingStateCreation" } ... }
Versione 1.5.0-beta03
28 giugno 2023
androidx.compose.runtime:runtime-*:1.5.0-beta03
viene rilasciato. La versione 1.5.0-beta03 contiene questi commit.
Correzioni di bug
- Salta la ricomposizione delle sottocomposizioni che verranno rimosse. (Ieeb99, b/254645321).
Versione 1.5.0-beta02
7 giugno 2023
androidx.compose.runtime:runtime-*:1.5.0-beta02
viene rilasciato. La versione 1.5.0-beta02 contiene questi commit.
Miglioramenti del rendimento
- Evita di calcolare
readableHash
inDerivedState
se lo snapshot non è stato modificato. (307102)
Versione 1.5.0-beta01
24 maggio 2023
androidx.compose.runtime:runtime-*:1.5.0-beta01
viene rilasciato. La versione 1.5.0-beta01 contiene questi commit.
Modifiche alle API
- Allocazioni rimosse nella ricomposizione, nelle animazioni a colori e in
AndroidComposeView
(Ib2bfa) - È stata aggiunta un'annotazione
@StateFactoryMarker
per contrassegnare le funzioni che creano stati e devono essere incluse in una chiamataremember
. (I64550) - Aggiungi versioni primitive di State e
MutableState
(fb3d89) - Aggiunto
Snapshot.isApplyObserverNotificationPending
(I672a5)
Correzioni di bug
- Allocazioni ridotte (I65c09, d7ea77, 727974 e 445808)
- Non conservare il riferimento dello snapshot in
ComposerImpl
(0206f7) - Annullamento rapido di Scrivi
CoroutineScopes
(a55362 e bd382f) - Non applicare la composizione due volte (f5791b)
- Assicurati l'annullamento della convalida per i valori dello stato derivato non inizializzato (aa2a92)
- Chiama
onEndChanges
durante l'eliminazione della composizione. (62cc8c) - Risoluzione del problema dello spostamento di contenuti in una sottocomposizione (4beb41)
- Correggi potenziali deadlock (c1a425
- ON_STOP deve mettere in pausa la trasmissione dell'orologio al frame anziché la composizione (f4a2d1)
- Correggere i flag modificati per le lambda riavviate (8a03e9)
- Esegui i callback di disattivazione per
LayoutNode
prima di eliminare gli effetti (8b0fa4)
Contributi esterni
- Aggiunto
Snapshot.isApplyObserverNotificationPending
(I672a5)
Versione 1.5.0-alpha04
10 maggio 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha04
viene rilasciato. La versione 1.5.0-alpha04 contiene questi commit.
Modifiche alle API
- Sono state aggiunte versioni primitive dell'API
State
, che consentono il monitoraggio di valori Int, Long, Float e Double negli oggettiState
senza penalità per l'autoboxing. Per usarli, usa i nuovi metodi di fabbricamutableIntState(Int)
,mutableFloatStateOf(Float)
e così via. (I48e43).
Correzioni di bug
Chiama
onEndChanges
durante l'eliminazione della composizione. I nodi di stato attivo rimossi duranteComposition.dispose
si stanno iscrivendo aonEndChanges
per reimpostare lo stato attivo.(03d4a47)Assicurati l'annullamento della convalida per i valori dello stato derivato non inizializzato. Ogni stato derivato è associato a un elenco delle sue dipendenze in
SnapshotStateObserver
, utilizzato per invalidare gli ambiti associati allo stato derivato ogni volta che la dipendenza cambia. La modifica delle dipendenze viene registrata all'avanzamento dello snapshot, che può verificarsi dopo la lettura dello stato derivato (a causa della chiamata aSnapshot.notifyObjectsInitialized()
).La precedente logica di osservazione dello stato derivato in
SnapshotStateObserver
era in grado di eliminare le vecchie dipendenze e di leggere il nuovo valore. Ciò ha portato a una gara con l'annullamento della convalida in uno stato di cancellazione, in cui l'annullamento della convalida delle dipendenze non era registrato.Questa modifica riordina la lettura dello stato derivato e la pulizia delle dipendenze, garantendo che l'annullamento della convalida avvenga sempre in uno stato valido. (c472be6).
Versione 1.5.0-alpha03
19 aprile 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha03
viene rilasciato. La versione 1.5.0-alpha03 contiene questi commit.
Modifiche alle API
- Il ricompositore creato per una finestra Android bloccherà ora le chiamate a
withFrameNanos
anziché a tutte le composizioni quando riceve una notifica ON_STOP. Questo significa che le finestre associate alle attività interrotte continueranno a ricomporsi per le modifiche ai dati, ma le animazioni o qualsiasi altro chiamante diwithFrameNanos
verranno bloccate. (Id9e7f, b/240975572).
Correzioni di bug
- Correggi il potenziale deadlock nell'elenco di snapshot e nella mappa 5c1a425
- Esegui i callback di disattivazione per
LayoutNode
prima di eliminare gli effetti 3784073 - Risolvere il problema dei flag modificati per le lambda riavviate ea81df9
- Correggi la regressione della modifica in tempo reale per Composable con nodi 73fd4d8
- ON_STOP deve mettere in pausa la trasmissione dell'orologio al frame anziché la composizione ae276f1
- Annulla gli ambiti
SnapshotStateObserver
per gli stati derivati non modificati 84d9b1c - Risolvere il potenziale deadlock durante lo smaltimento delle composizioni 28761fc
- Risolvere il problema dello spostamento di contenuti in una sottocomposizione 92d4156
Versione 1.5.0-alpha02
5 aprile 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha02
viene rilasciato. La versione 1.5.0-alpha02 contiene questi commit.
Nuove funzionalità
- L'operatore
getValue
di Kotlin ora può essere componibile (f174f6e)
Correzioni di bug, miglioramenti delle prestazioni
- Sovrascrivi i record degli oggetti di stato con record di stato non accessibili (c986960)
- Usa il compositore dell'ambito corretto quando realizzi i gruppi (9a5e5b6)
- Correggi
endToMarker()
quando termini i gruppi di nodi. (d71d980) - Usa il gruppo
SlotWriter
corrente per verificare la disattivazione (a0b518b) - Utilizza
IdentityArraySet
per archiviare le invalidazioni delle istantanee (7f60cca) - Rimuovi il
fill
inSlotTable.moveSlotGapTo()
e chiudilo in modo che sia chiuso (81f9935) - Correggere le invalidazioni mancanti durante lo spostamento di contenuti spostabili (1d7c024)
- Correggere le invalidazioni immediate per i contenuti mobili spostati (8676618)
- Riduci le allocazioni per le osservazioni degli snapshot (5bc535f)
Versione 1.5.0-alpha01
22 marzo 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha01
viene rilasciato. La versione 1.5.0-alpha01 contiene questi commit.
Nuove funzionalità
- Aggiunge
Modifier.Node#coroutineScope
per consentire aModifier.Nodes
di avviare coroutine (I76ef9) - Consenti a
Modifier.Nodes
di leggereCompositionLocals
implementando l'interfacciaCompositionLocalConsumerModifierNode
. (Ib44df)
Versione 1.4
Versione 1.4.3
3 maggio 2023
androidx.compose.runtime:runtime-*:1.4.3
viene rilasciato senza modifiche.
Versione 1.4.2
19 aprile 2023
androidx.compose.runtime:runtime-*:1.4.2
viene rilasciato. La versione 1.4.2 contiene questi commit.
Correzioni di bug
Correggi il potenziale deadlock nell'elenco di snapshot e nella mappa 2eb6570
L'aggiunta di contenuto a un
SnapshotStateList
oSnapshotStateMap
può riscontrare un deadlock se la modifica è in corso con una scrittura diretta nel record di stato. Questa operazione è stata resa molto più probabile con le modifiche introdotte da 93fcae828b che utilizzano le scritture dirette per rilasciare i record inutilizzati.I blocchi sono ora ordinati in modo che non si tenti di eseguire un blocco dell'istantanea quando viene mantenuto un blocco mappa o elenco.
Versione 1.4.1
5 aprile 2023
androidx.compose.runtime:runtime-*:1.4.1
viene rilasciato. La versione 1.4.1 contiene questi commit.
Correzioni di bug
- Correggi
endToMarker()
quando termini i gruppi di nodi. d71d980
Versione 1.4.0
22 marzo 2023
androidx.compose.runtime:runtime-*:1.4.0
viene rilasciato. La versione 1.4.0 contiene questi commit.
Modifiche importanti dalla versione 1.3.0
- Usa il valore inizializzato di
LiveData
per la prima composizione 3680e25 - Aggiungi
ComposeNodeLifecycleCallback
per osservare il ciclo di vita dei nodi di scrittura. 8b6a258 - Aggiungi la proprietà
parameterTypes
aComposableMethod
7b6c7ad
Correzioni di bug e miglioramenti delle prestazioni
- Cancella entrambi gli indici di ambito in
SnapshotStateObserver
29f4a3e - Aggiunta dei gruppi necessari nel corpo degli annunci lambda non ignorabili 7d06752
- Migliora le caratteristiche di riferimento della memoria dello stato degli snapshot 93fcae8
- Rimuovere il pugilato nelle ricerche locali relative alle composizioni 0875717
- Utilizza la chiave corretta per i gruppi di nodi non riutilizzabili 6388d8d
- Proteggi
SnapshotStateObserver
dalle applicazioni ricorsive e simultanee 98cb6ba - È stato aggiunto un controllo dei limiti dell'indice di controllo nel metodo "get" di
IdentityArraySet
35a77d3 - Aggiorna il modulo di scrittura per utilizzare le estensioni
ViewTreeLifecycleOwner
21c2122 - Invia notifiche di applicazione al termine del frame per il ricompositore. 98f2641
- Correggi l'arresto anomalo di un indice oltre i limiti durante l'annullamento del ricompositore 8f8656f
- Forza sempre la ricomposizione se i fornitori principali di composizione hanno modificato 9526fcc
- Tolleranza del ricompositore per i job annullati a55f7ed
- Migliora la gestione delle invalidazioni per un numero elevato di compositori 9b7ed67
- Risoluzione del problema durante la generazione dei gruppi di chiusura per i resi non locali b6f590c
Versione 1.4.0-rc01
8 marzo 2023
androidx.compose.runtime:runtime-*:1.4.0-rc01
viene rilasciato. La versione 1.4.0-rc01 contiene questi commit.
Correzioni di bug
Versione 1.4.0-beta02
22 febbraio 2023
androidx.compose.runtime:runtime:1.4.0-beta02
e androidx.compose.runtime:runtime-saveable:1.4.0-beta02
vengono rilasciati. La versione 1.4.0-beta02 contiene questi commit.
Versione 1.4.0-beta01
8 febbraio 2023
androidx.compose.runtime:runtime-*:1.4.0-beta01
viene rilasciato. La versione 1.4.0-beta01 contiene questi commit.
Modifiche alle API
ComposeNodeLifecycleCallback
è stato aggiunto che consente di osservare il ciclo di vita dei nodi Compose (I3731b)@TestOnly
aggiunta aComposer.disableSourceInformation()
perché è possibile chiamare questa funzione in sicurezza solo in un test. (I896c8)
Correzioni di bug
- Rimuovere il pugilato nelle ricerche locali di composizione (62f66a)
- Migliorare le caratteristiche di riferimento della memoria dello stato dello snapshot (dfb451)
Versione 1.4.0-alpha05
25 gennaio 2023
androidx.compose.runtime:runtime:1.4.0-alpha05
e androidx.compose.runtime:runtime-saveable:1.4.0-alpha05
vengono rilasciati. La versione 1.4.0-alpha05 contiene questi commit.
Modifiche alle API
- Più tipo/nullabilità delle funzioni incorporate/deprecateed-hidden (I24f91)
Versione 1.4.0-alpha04
11 gennaio 2023
androidx.compose.runtime:runtime-*:1.4.0-alpha04
viene rilasciato. La versione 1.4.0-alpha04 contiene questi commit.
Modifiche alle API
TestMonotonicFrameClock
ora utilizza l'annotazione sperimentale corretta. (I95c9e).
Correzioni di bug
- Proteggi
SnapshotStateObserver
dalle applicazioni ricorrenti e simultanee (d902fb)
Versione 1.4.0-alpha03
7 dicembre 2022
androidx.compose.runtime:runtime-*:1.4.0-alpha03
viene rilasciato. La versione 1.4.0-alpha03 contiene questi commit.
Modifiche alle API
- aggiunta di un nuovo metodo pubblico alla classe
ComposableMethod
analogo ajava.lang.reflect.Method#getParameterTypes()
(Iab0c3)
Correzioni di bug
- Le notifiche di applicazione istantanea vengono ora inviate dopo che
Recomposer
ha completato l'applicazione delle modifiche. (Iad6c0, b/222093277).
Versione 1.4.0-alpha02
9 novembre 2022
androidx.compose.runtime:runtime-*:1.4.0-alpha02
viene rilasciato. La versione 1.4.0-alpha02 contiene questi commit.
Versione 1.4.0-alpha01
24 ottobre 2022
androidx.compose.runtime:runtime-*:1.4.0-alpha01
viene rilasciato. La versione 1.4.0-alpha01 contiene questi commit.
Modifiche alle API
SnapshotStateList
eSnapshotStateMap
ora prevedono implementazioni esplicite ditoList()
etoMap()
nel rispetto della privacy. Questi metodi restituiscono i contenuti attuali senza crearne una copia, in quanto restituiscono i dati interni immutabili utilizzati per archiviare i contenuti. Questo valore può essere utilizzato, ad esempio, per produrre un flusso di valori utilizzandosnapshotFlow
senza richiedere la copia dei dati. (Ica2bd).
Versione 1.3
Versione 1.3.3
11 gennaio 2023
androidx.compose.runtime:runtime-*:1.3.3
viene rilasciato. La versione 1.3.3 contiene questi commit.
- Nessuna modifica dalla versione 1.3.2
Versione 1.3.2
7 dicembre 2022
androidx.compose.runtime:runtime-*:1.3.2
viene rilasciato. La versione 1.3.2 contiene questi commit.
Correzioni di bug
- Aggiornato per supportare androidx.compose.ui 1.3.2
Versione 1.3.1
9 novembre 2022
androidx.compose.runtime:runtime-*:1.3.1
viene rilasciato. La versione 1.3.1 contiene questi commit.
Versione 1.3.0
24 ottobre 2022
androidx.compose.runtime:runtime-*:1.3.0
viene rilasciato. La versione 1.3.0 contiene questi commit.
Modifiche importanti dalla versione 1.2.0
Gestione delle eccezioni / Assistenza per la modifica dal vivo
- Per supportare meglio la modifica in tempo reale, sono state aggiunte API per consentire la gestione delle eccezioni durante la composizione
- Gestione degli errori di composizione per il ricaricamento a caldo
- Gestire gli errori delle modifiche in tempo reale al salvataggio o al ripristino
Tracciamento della composizione
- Sono state aggiunte API di tracciamento del runtime per supportare nuovi strumenti di tracciamento della composizione
- Generare chiamate di inizio/fine per gli eventi di traccia componibile
- ComposerKt.traceEventStart(Int, String) aggiunto di nuovo
API Composable Reflection
- È stata aggiunta una nuova API
ComposableMethod
per consentire chiamate più affidabili di API componibili basate su riflessioni. - Sposta callbackComposable per scrivere il runtime
- API Rework per richiamare il metodo componibile
Correzioni runtime
- Correggere il test dell'intervallo non corretto per la tabella degli slot che controlla la presenza di indicatori
- Consenti lo spostamento di contenuti spostabili all'interno e all'esterno di SubcomposeLayout
- Correggere lo spostamento dei contenuti in nuovi contenuti di una sottocomposizione
Sistema snapshot
- Il sistema di snapshot ha apportato vari miglioramenti in termini di gestione, prestazioni e correttezza della memoria.
- Ottimizza la rimozione dell'ambito in SnapshotStateEventsr
- Eliminare gli snapshot nidificati creati da snapshot trasparenti
- È stata corretta la condizione di gara durante la lettura dello stato dall'istantanea globale
- Supporto DerivedState in SnapshotStateObservationr
- Impedisci di rimuovere lo stato derivato dalla composizione quando viene letto in altri ambiti
- Utilizza IdentityArrayMap anziché HashMap all'interno di DerivedState
- Aggiornare gli osservatori dello stato derivato per utilizzare un vettore mutabile
- Aggiornamento della pulizia dello stato di SnapshotStateObservationr
- Sostituisci SnapshotStateObservationr.invalidated con ArraySet
- È stata corretta la condizione di gara durante la lettura dello stato dall'istantanea globale
- Correggere l'utilizzo di record inattivi nel calcolo dell'hash DerivedState
- Correggere la condizione di gara durante l'avanzamento dell'istantanea globale
- Velocizza la pulizia delle osservazioni dell'ambito in SnapshotStateObservationr
Versione 1.3.0-rc01
5 ottobre 2022
androidx.compose.runtime:runtime-*:1.3.0-rc01
viene rilasciato. La versione 1.3.0-rc01 contiene questi commit.
Correzioni di bug
ArrayIndexOutOfBoundsException
corretto proveniente dalla tabella degli slot (b/249076084)
Versione 1.3.0-beta03
21 settembre 2022
androidx.compose.runtime:runtime-*:1.3.0-beta03
viene rilasciato. La versione 1.3.0-beta03 contiene questi commit.
Cambiamento che provoca un'interruzione del comportamento
- Il parametro in
remember
erememberCoroutineScope
è stato modificato incrossinline
. Verrà segnalato un errore per i ritorni anticipati anziché consentire un resoconto anticipato che comporterà la segnalazione di un errore interno successivo. - Questa modifica può causare la segnalazione di nuovi errori del compilatore che richiedono la rimozione dei resi non locali dai lambda passati a queste funzioni. (Ibea62).
Versione 1.3.0-beta02
7 settembre 2022
androidx.compose.runtime:runtime-*:1.3.0-beta02
viene rilasciato. La versione 1.3.0-beta02 contiene questi commit.
Correzioni di bug
- API aggiornata (I64ca0)
Versione 1.3.0-beta01
24 agosto 2022
androidx.compose.runtime:runtime-*:1.3.0-beta01
viene rilasciato. La versione 1.3.0-beta01 contiene questi commit.
Modifiche alle API
- Un metodo
find
è stato aggiunto aCompositionData
per consentire agli strumenti per sviluppatori che utilizzano questa API di trovare rapidamente un sottogruppo di composizioni usando la sua identità. (I5794f)
Versione 1.3.0-alpha03
10 agosto 2022
androidx.compose.runtime:runtime-*:1.3.0-alpha03
viene rilasciato. La versione 1.3.0-alpha03 contiene questi commit.
Versione 1.3.0-alpha02
27 luglio 2022
androidx.compose.runtime:runtime-*:1.3.0-alpha02
viene rilasciato. La versione 1.3.0-alpha02 contiene questi commit.
Modifiche alle API
ComposerKt.traceEventStart(Int, String)
aggiunto nuovamente per la compatibilità con le versioni precedenti (I6e6de)
Versione 1.3.0-alpha01
29 giugno 2022
androidx.compose.runtime:runtime-*:1.3.0-alpha01
viene rilasciato. La versione 1.3.0-alpha01 contiene questi commit.
Modifiche alle API
- Spostamento delle funzionalità dell'utilità al runtime (I4f729)
Versione 1.2
Versione 1.2.1
10 agosto 2022
androidx.compose.runtime:runtime-*:1.2.1
viene rilasciato. La versione 1.2.1 contiene questi commit.
Correzioni di bug
- Perdita di memoria corretta: elimina gli snapshot nidificati creati da snapshot trasparenti b/239603305
Versione 1.2.0
27 luglio 2022
androidx.compose.runtime:runtime-*:1.2.0
viene rilasciato. La versione 1.2.0 contiene questi commit.
Modifiche importanti dal giorno 1.1.0
Compose Runtime ha introdotto alcune funzionalità nella versione 1.2.0, oltre a molte correzioni di bug di stabilizzazione. La nuova funzionalità più significativa è stata l'introduzione dell'
movableContentOf
API, che può essere utilizzata per consentire un'UX complessa, come le transizioni di elementi condivisi. L'APImovableContentOf
converte un lambda componibile in un lambda che sposta lo stato e i nodi corrispondenti in qualsiasi nuova località chiamata. Quando la chiamata precedente esce dalla composizione, lo stato viene temporaneamente conservato e se una nuova chiamata alla funzione lambda entra nella composizione, lo stato e i nodi associati vengono spostati nella posizione della nuova chiamata. Se non viene aggiunta alcuna nuova chiamata, lo stato viene rimosso definitivamente e ricorda che gli osservatori ricevono una notifica.Se una funzione lambda
movableContentOf
viene chiamata più volte nella stessa composizione, vengono creati un nuovo stato e nodi per ogni chiamata e, man mano che le chiamate escono dalla composizione e le nuove chiamate entrano, lo stato viene spostato dalla prima chiamata in uscita a quella in entrata nell'ordine in cui vengono chiamate. Tutti gli stati non rivendicati dalle nuove chiamate vengono rimossi definitivamente.Oltre a questa e ad altre nuove funzionalità, è stato dedicato molto tempo alla stabilizzazione del sistema dello stato di runtime e snapshot. Sono state rimosse diverse perdite di memoria e sono stati ottimizzati i percorsi di codice.
Di seguito è riportato un elenco riepilogativo delle modifiche:
Nuove funzionalità in 1.2
- Aggiungi istantanea sperimentale non sicuraInvio/Esci
- Aggiungi l'API sperimentale Snapshot.asContextElement
- Presenta Snapshot.withoutReadObservation
- Consentire lo spostamento dello stato all'interno di una composizione
- Tracciamento delle ricomposizioni in Compose
Rendimento a 1.2
- Migliorare il rendimento locale della composizione
- I profili di riferimento per la scrittura devono essere ricavati utilizzando benchmark
Correzioni di bug in 1.2
- Rimuovere le informazioni di monitoraggio dagli ambiti di ricomposizione delle release
- Impedisci di rimuovere lo stato derivato dalla composizione quando viene letto in altri ambiti
- Utilizzare removeScope() in modo più efficiente in SnapshotStateObservationr
- Pulisci le dipendenze dello stato derivato nella composizione
- Correzione della modifica di CurrentCompositeKeyHash dopo la ricomposizione interna all'interno di contenuti spostabili
- Pulisci le composizioni invalidate durante lo smaltimento
- Correggere lo stato di deriva letto durante la ricomposizione
- Correggere le perdite di memoria durante l'osservazione di oggetti con stato derivato
- È stata corretta la chiave hash composito movableContent per garantire coerenza
- Correggere un angolo in cui il compositore si arrestava in modo anomalo
- Assicurati che l'annullamento forzato di un gruppo forza la ricomposizione
- Correggere il bug quando l'opzione "RicordaSalvabile con l'input" viene ripristinata nell'ordine sbagliato
Versione 1.2.0-rc03
29 giugno 2022
androidx.compose.runtime:runtime-*:1.2.0-rc03
viene rilasciato. La versione 1.2.0-rc03 contiene questi commit.
Correzioni di bug
- Le osservazioni dello stato derivato sono state precedentemente rimosse incondizionatamente dall'ambito di ricomposizione e dalla composizione, il che ha rotto altri ambiti che potrebbero ancora osservare lo stato derivato. Questa modifica rimuove le istanze dello stato derivato solo se non è più osservata da altri ambiti. (b/236618362)
Versione 1.2.0-rc02
22 giugno 2022
androidx.compose.runtime:runtime-*:1.2.0-rc02
viene rilasciato. La versione 1.2.0-rc02 contiene questi commit.
Versione 1.2.0-rc01
15 giugno 2022
androidx.compose.runtime:runtime-*:1.2.0-rc01
viene rilasciato. La versione 1.2.0-rc01 contiene questi commit.
Modifiche alle API
- Le interfacce nelle librerie di scrittura ora vengono create utilizzando i metodi di interfaccia predefinita jdk8 (I5bcf1)
Versione 1.2.0-beta03
1° giugno 2022
androidx.compose.runtime:runtime-*:1.2.0-beta03
viene rilasciato. La versione 1.2.0-beta03 contiene questi commit.
Versione 1.2.0-beta02
18 maggio 2022
androidx.compose.runtime:runtime-*:1.2.0-beta02
viene rilasciato. La versione 1.2.0-beta02 contiene questi commit.
Versione 1.2.0-beta01
11 maggio 2022
androidx.compose.runtime:runtime-*:1.2.0-beta01
viene rilasciato. La versione 1.2.0-beta01 contiene questi commit.
Nuove funzionalità
- Questa è la prima versione beta 1.2.
Modifiche alle API
Snapshot.unsafeEnter/unsafeLeave
sperimentale aggiunto (I108f3)- API
Snapshot.asContextElement()
sperimentale aggiunta (Iff072) - Ora è possibile utilizzare l'annotazione
@ComposableTarget
e le annotazioni contrassegnate da@ComposableTargetMarker
nell'ambito del file utilizzando il prefisso@file
. Se utilizzi un'annotazione di destinazione nell'ambito del file, il compilatore presumerà che tutte le funzioni componibili nel file siano destinate all'applicatore associato. Ad esempio, l'uso di@file:UiComposable
dichiara che tutte le funzioni@Composable
hanno come target l'applicatore dell'interfaccia utente di Compose. Una funzione che deve scegliere come target un altro applicatore deve fornire esplicitamente l'annotazione dell'indicatore di destinazione per l'applicatore desiderato. (I40804)
Versione 1.2.0-alpha08
20 aprile 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha08
viene rilasciato. La versione 1.2.0-alpha08 contiene questi commit.
Modifiche alle API
- Elemento
TracingInProgress
aggiunto all'interfaccia diCompositionTracer
. (Ic6f12) - Aggiungi
recomposeScopeIdentity
a Composer (I0c873) - API di tracciamento limitate (Composer.setTracer) a
OptIn(InternalComposeTracingApi)
. (I9187f) - È stato aggiunto
ResuableContentHost
, che consente un migliore controllo sulla durata dello stato creato per i contenuti riutilizzabili. Ad esempio, se una sottocomposizione non è temporaneamente in uso, il contenuto può essere disattivato, causando l'eliminazione di tutto lo stato memorizzato nella composizione e attivando, ad esempio, tutti gli effetti usa e getta. (I2c0f2, b/220322704).
Versione 1.2.0-alpha07
6 aprile 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha07
viene rilasciato. La versione 1.2.0-alpha07 contiene questi commit.
Modifiche alle API
- La nuova funzione
Snapshot.withoutReadObservation { ... }
è stata aggiunta. Consente agli utenti di eseguire il lambda passato senza iscriversi alle modifiche dei valori di stato letti durante questo blocco. Potrebbe esserti utile nei casi d'uso in cui vuoi trarre vantaggio dalla scrittura/lettura sicura per i thread basata su snapshot, ma vuoi poter leggere il valore senza causare una ricomposizione o una nuova misurazione inutili. (I9f365, b/214054486).
Versione 1.2.0-alpha06
23 marzo 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha06
viene rilasciato. La versione 1.2.0-alpha06 contiene questi commit.
Versione 1.2.0-alpha05
9 marzo 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha05
viene rilasciato. La versione 1.2.0-alpha05 contiene questi commit.
Contributi esterni
- Aggiornato per utilizzare Kotlinx coroutines 1.6.0 (I3366d)
Versione 1.2.0-alpha04
23 febbraio 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha04
viene rilasciato. La versione 1.2.0-alpha04 contiene questi commit.
Modifiche alle API
Sono stati aggiunti i criteri
ComposableTarget
,ComposableTargetMarker
eComposableOpenTarget
che consentono di generare report in fase di compilazione per capire quando una funzione componibile viene chiamata come target di un'applicazione che non era stata progettata.Nella maggior parte dei casi le annotazioni possono essere dedotte dal plug-in di Composer, pertanto l'utilizzo diretto di queste annotazioni dovrebbe essere raro . I casi che non possono essere dedotti includono la creazione e l'utilizzo di un applicatore personalizzato, funzioni componibili astratte (ad esempio i metodi di interfaccia), campi o variabili globali che sono lambda componibili (vengono dedotte variabili e parametri locali) o l'utilizzo di
ComposeNode
o di funzioni componibili correlate.Per gli applicatori personalizzati, le funzioni componibili che chiamano
ComposeNode
oReusableComposeNode
devono aggiungere un'annotazioneCompoableTarget
per la funzione ed eventuali tipi di parametri lambda componibili. Tuttavia, è consigliabile creare un'annotazione che sia annotata conComposableTargetMarker
e poi utilizzare l'annotazione contrassegnata al posto direttamente diComposableTarget
. Un'annotazione componibile contrassegnata conComposableTargetMarker
equivale a unaComposbleTarget
con il nome completo della classe dell'attributo come parametro applier. Per un esempio di utilizzo diComposableTargetMarker
, consultaanroidx.compose.ui.UiComposable
. (I38f11).
Versione 1.2.0-alpha03
9 febbraio 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha03
viene rilasciato. La versione 1.2.0-alpha03 contiene questi commit.
Modifiche alle API
È stato aggiunto un elemento
movableContentOf
, che converte un lambda componibile in un lambda che sposta lo stato e i nodi corrispondenti in qualsiasi nuova località chiamata. Quando la chiamata precedente esce dalla composizione, lo stato viene temporaneamente conservato e se una nuova chiamata al lambda entra nella composizione, lo stato e i nodi associati vengono spostati nella posizione della nuova chiamata. Se non viene aggiunta alcuna nuova chiamata, lo stato viene rimosso definitivamente e ricorda che gli osservatori vengono avvisati.Se una lambda
movableContentOf
viene chiamata più volte nella stessa composizione, vengono creati un nuovo stato e nodi per ogni chiamata e, man mano che le chiamate escono dalla composizione e entrano nuove chiamate, lo stato viene spostato dalla prima chiamata in uscita a quella in entrata nell'ordine in cui vengono chiamate. Tutti gli stati non rivendicati dalle nuove chiamate vengono rimossi definitivamente. (Ib4850)È stata aggiunta un'API di tracciamento alla composizione per abilitare gli strumenti per fornire un tracciamento più dettagliato delle funzioni componibili. Il compilatore ora genera chiamate all'API di tracciamento che includono informazioni di origine. (Ib0eb5).
Per rimuovere queste chiamate e le informazioni sull'origine associate da una build di release, aggiungi la seguente regola di Proguard:
-assumenosideeffects public class androidx.compose.runtime.ComposerKt { boolean isTraceInProgress(); void traceEventStart(int,java.lang.String); void traceEventEnd(); }
Aggiungi
InternalComposeScope
per consentire agli strumenti di identificare un componibile durante le ricomposizioni. (I07a3f)
Versione 1.2.0-alpha02
26 gennaio 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha02
viene rilasciato. La versione 1.2.0-alpha02 contiene questi commit.
Versione 1.2.0-alpha01
12 gennaio 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha01
viene rilasciato. La versione 1.2.0-alpha01 contiene questi commit.
Modifiche alle API
- Campo
identity
aggiunto aCompositionData
per la generazione di ID invarianti in Layout Inspector. (Ic116e)
Aggiornamenti delle dipendenze
- Ora dipende da Kotlin
1.6.10
.
Versione 1.1
Versione 1.1.1
23 febbraio 2022
androidx.compose.runtime:runtime-*:1.1.1
viene rilasciato. La versione 1.1.1 contiene questi commit.
Correzioni di bug
- Correggi
NullPointerException
all'indirizzoandroidx.compose.ui.platform.RenderNodeLayer.updateDisplayList
(aosp/1947059, b/206677462) - È stato risolto l'arresto anomalo causato dai contenuti degli appunti durante la lettura dagli appunti su Android. (I06020, b/197769306)
- RTL corretto in
LazyVerticalGrid
(aosp/1931080, b/207510535)
Versione 1.1.0
9 febbraio 2022
androidx.compose.runtime:runtime-*:1.1.0
viene rilasciato. La versione 1.1.0 contiene questi commit.
Modifiche importanti dalla versione 1.0.0
- Supporto stabile per l'effetto scorrimento orizzontale di Android 12
- Miglioramenti alle dimensioni del touch target
- Tieni presente che, rispetto a Compose 1.0, i componenti Material espanderanno lo spazio di layout in modo da rispettare le linee guida sull'accessibilità di Material per le dimensioni del touch target. Ad esempio, il touch target del pulsante si espanderà fino a una dimensione minima di
48x48dp
, anche se hai impostato le dimensioni del pulsante su un valore inferiore. In questo modo Compose Material allo stesso comportamento dei componenti di Material Design, offrendo un comportamento coerente se combini le visualizzazioni e Compose. Inoltre, questa modifica garantisce che quando crei la tua UI utilizzando i componenti di Compose Material, verranno soddisfatti i requisiti minimi per l'accessibilità del touch target. - Supporto stabile per Navigazione
- Assegna una serie di API precedentemente sperimentali alla versione stabile
- Supporto per versioni più recenti di Kotlin
Versione 1.1.0-rc03
26 gennaio 2022
androidx.compose.runtime:runtime-*:1.1.0-rc03
viene rilasciato. La versione 1.1.0-rc03 contiene questi commit.
Correzioni di bug
- Aggiornamento per supportare il materiale di Compose
1.1.0-rc03
Versione 1.1.0-rc01
15 dicembre 2021
androidx.compose.runtime:runtime-*:1.1.0-rc01
viene rilasciato. La versione 1.1.0-rc01 contiene questi commit.
Versione 1.1.0-beta04
1° dicembre 2021
androidx.compose.runtime:runtime-*:1.1.0-beta04
viene rilasciato. La versione 1.1.0-beta04 contiene questi commit.
Nuove funzionalità
- Aggiornato per essere compatibile con Kotlin
1.6.0
Versione 1.1.0-beta03
17 novembre 2021
androidx.compose.runtime:runtime-*:1.1.0-beta03
viene rilasciato. La versione 1.1.0-beta03 contiene questi commit.
Versione 1.1.0-beta02
3 novembre 2021
androidx.compose.runtime:runtime-*:1.1.0-beta02
viene rilasciato. La versione 1.1.0-beta02 contiene questi commit.
Modifiche alle API
- Il codice dello snapshot è stato suddiviso in più file, ma è ancora presente nella stessa classe JVM. (Ic6c98)
Versione 1.1.0-beta01
27 ottobre 2021
androidx.compose.runtime:runtime-*:1.1.0-beta01
viene rilasciato. La versione 1.1.0-beta01 contiene questi commit.
Versione 1.1.0-alpha06
13 ottobre 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha06
viene rilasciato. La versione 1.1.0-alpha06 contiene questi commit.
Modifiche alle API
InternalCompilerApi
rimosso dai metodi Composer che devono essere chiamati cross-module (I1aa0b)Recomposer.state
è stato deprecato e sostituito daRecomposer.currentState
per cambiare il proprio tipo in StateFlow (Ic2ab3, b/197773820)
Versione 1.1.0-alpha05
29 settembre 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha05
viene rilasciato. La versione 1.1.0-alpha05 contiene questi commit.
Versione 1.1.0-alpha04
15 settembre 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha04
viene rilasciato. La versione 1.1.0-alpha04 contiene questi commit.
Versione 1.1.0-alpha03
1° settembre 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha03
viene rilasciato. La versione 1.1.0-alpha03 contiene questi commit.
Nuove funzionalità
- Il compilatore di Compose ora supporta le versioni precedenti del runtime di Compose (1.0). Prima di questa modifica, il compilatore di Compose era compatibile solo con il runtime di Compose della stessa versione o successiva. Dopo questa modifica, il compilatore di Compose è compatibile con una versione precedente di Compose Runtime (1.0). (aosp/1796968).
- Scrittura
1.1.0-alpha03
aggiornata in modo che dipendesse da Kotlin1.5.30
. (I74545)
Versione 1.1.0-alpha02
18 agosto 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha02
viene rilasciato. La versione 1.1.0-alpha02 contiene questi commit.
Versione 1.1.0-alpha01
4 agosto 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha01
viene rilasciato. La versione 1.1.0-alpha01 contiene questi commit.
Versione 1.0
Versione 1.0.5
3 novembre 2021
androidx.compose.runtime:runtime-*:1.0.5
viene rilasciato. La versione 1.0.5 contiene questi commit.
Correzioni di bug
- Risolto il problema di monitoraggio degli arresti anomali delle istanze derivateStateOf. (aosp/1792247)
Versione 1.0.4
13 ottobre 2021
androidx.compose.runtime:runtime-*:1.0.4
viene rilasciato. La versione 1.0.4 contiene questi commit.
Aggiornamenti delle dipendenze
- Aggiornato in modo da dipendere da Kotlin
1.5.31
Versione 1.0.3
29 settembre 2021
androidx.compose.runtime:runtime-*:1.0.3
viene rilasciato. La versione 1.0.3 contiene questi commit.
Aggiornamenti delle dipendenze
- Aggiornato in modo da dipendere da Kotlin
1.5.30
Versione 1.0.2
1° settembre 2021
androidx.compose.runtime:runtime-*:1.0.2
viene rilasciato. La versione 1.0.2 contiene questi commit.
Aggiornato per supportare la release di Compose 1.0.2
. Compose 1.0.2
è ancora compatibile con Kotlin 1.5.21
.
Versione 1.0.1
4 agosto 2021
androidx.compose.runtime:runtime-*:1.0.1
viene rilasciato. La versione 1.0.1 contiene questi commit.
Aggiornamenti delle dipendenze
- Aggiornato in modo che dipende da Kotlin
1.5.21
.
Versione 1.0.0
28 luglio 2021
androidx.compose.runtime:runtime-*:1.0.0
viene rilasciato. La versione 1.0.0 contiene questi commit.
Funzionalità principali della versione 1.0.0
Questa è la prima release stabile di Compose. Consulta il blog ufficiale di Compose Release per ulteriori dettagli.
Problemi noti
Se utilizzi Android Studio Bumblebee Canary 4 o AGP
7.1.0-alpha04
/7.1.0-alpha05
, potresti riscontrare il seguente arresto anomalo:java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
Per risolvere il problema, aumenta temporaneamente il valore minSdkVersion a 24+ nel file
build.gradle
. Questo problema verrà risolto nella prossima versione di Android Studio Bumblebee e AGP7.1
. (b/194289155)
Versione 1.0.0-rc02
14 luglio 2021
androidx.compose.runtime:runtime-*:1.0.0-rc02
viene rilasciato. La versione 1.0.0-rc02 contiene questi commit.
- Sono state corrette le condizioni di gara in SnapshotStateObservationr che causavano errori NullPointerExceptions. (aosp/1763445, aosp/1758105, b/192677711)
- Risolti i problemi relativi agli snapshot di runtime che causano l'arresto di
java.lang.IllegalStateException: Reading a state that was created after the snapshot was taken or in a snapshot that has not yet been applied
. (b/193006595, b/192570897)
Versione 1.0.0-rc01
1° luglio 2021
androidx.compose.runtime:runtime-*:1.0.0-rc01
viene rilasciato. La versione 1.0.0-rc01 contiene questi commit.
Versione 1.0.0-beta09
16 giugno 2021
androidx.compose.runtime:runtime-*:1.0.0-beta09
viene rilasciato. La versione 1.0.0-beta09 contiene questi commit.
Regole del profilo aggiunte
In questa release sono state aggiunte regole del profilo ai seguenti moduli di composizione (I14ed6):
- androidx.compose.animation
- androidx.compose.animation-core
- androidx.compose.foundation
- androidx.compose.foundation-layout
- androidx.compose.materiale
- androidx.compose.materiale-ripple
- androidx.compose.runtime
- androidx.compose.ui
- androidx.compose.ui.geometry
- androidx.compose.ui.graphics
- androidx.compose.ui.text
- androidx.compose.ui.text
- androidx.compose.ui.unit
- androidx.compose.ui.util
Che cosa sono le regole del profilo?
Le regole del profilo per una libreria sono specificate in un file di testo
baseline-prof.txt
che si trova insrc/main
o nella directory equivalente. Il file specifica una regola per riga, dove una regola in questo caso è un pattern per la corrispondenza con metodi o classi della libreria. La sintassi di queste regole è un soprainsieme del formato del profilo ART leggibile che viene utilizzato quando si utilizzaadb shell profman --dump-classes-and-methods ...
. Queste regole assumono una delle due forme per il targeting di metodi o classi.Una regola del metodo avrà il seguente pattern:
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
Una regola di classe avrà il seguente pattern:
<CLASS_DESCRIPTOR>
Qui
<FLAGS>
contiene uno o più caratteriH
,S
eP
per indicare se il metodo deve essere contrassegnato o meno come "Hot", "Startup" o "Post Startup".<CLASS_DESCRIPTOR>
è il descrittore della classe a cui appartiene il metodo scelto come target. Ad esempio, la classeandroidx.compose.runtime.SlotTable
avrà un descrittoreLandroidx/compose/runtime/SlotTable;
.<METHOD_SIGNATURE>
è la firma del metodo e include il nome, i tipi di parametro e i tipi restituiti del metodo. Ad esempio, il metodofun isPlaced(): Boolean
suLayoutNode
ha la firmaisPlaced()Z
.Questi pattern possono includere caratteri jolly (
**
,*
e?
) in modo che una singola regola includa più metodi o classi.
A cosa servono le regole?
Un metodo con il flag
H
indica che si tratta di un metodo "ad accesso frequente" e deve essere compilato in anticipo.Un metodo con il flag
S
indica che si tratta di un metodo che viene richiamato all'avvio e deve essere compilato in anticipo per evitare i costi di compilazione e interpretazione del metodo all'avvio.Un metodo con il flag
P
indica che si tratta di un metodo che viene richiamato dopo l'avvio.Una classe presente in questo file indica che viene utilizzata durante l'avvio e deve essere preallocata nell'heap per evitare i costi di caricamento della classe.
Come funziona?
- Le librerie possono definire queste regole che verranno pacchettizzate in artefatti AAR. Quando viene creata un'app che include questi artefatti, queste regole vengono unite e le regole unite vengono utilizzate per creare un profilo ART binario compatto specifico per l'app. ART può quindi utilizzare questo profilo quando l'app è installata sui dispositivi per compilare in anticipo un sottoinsieme specifico dell'applicazione al fine di migliorarne le prestazioni, in particolare la prima esecuzione. Tieni presente che ciò non avrà alcun effetto sulle applicazioni di cui è possibile eseguire il debug.
Versione 1.0.0-beta08
2 giugno 2021
androidx.compose.runtime:runtime-*:1.0.0-beta08
viene rilasciato. La versione 1.0.0-beta08 contiene questi commit.
Modifiche alle API
State<T>
ora èState<out T>
(I69049)- Modifica dell'API
ControlledComposition
per abilitare la ricomposizione delle modifiche in una ricomposizione single pass. (Iaafd1, b/184173932).
Versione 1.0.0-beta07
18 maggio 2021
androidx.compose.runtime:runtime-*:1.0.0-beta07
viene rilasciato. La versione 1.0.0-beta07 contiene questi commit.
Modifiche alle API
- Sono state aggiunte nuove API di compilazione di Composer che consentono di rimuovere le informazioni di origine generate dal compilatore durante la minimizzazione della sorgente. (Ia34e6).
Introduce
ReusableContent
, che tenterà di riutilizzare i nodi nei suoi contenuti invece di sostituirli quando la chiave viene modificata. Quando la chiave viene modificata, i valori precedenti nella tabella degli slot per i contenuti vengono ignorati, ad eccezione dei nodi generati e dei valori utilizzati per aggiornare i nodi.Introduce
ReusableComposeNode
che riutilizzerà il nodo emesso invece di sostituirlo come avviene perComposeNode
. (I1dd86).@ComposeCompilerApi
non è più@RequiresOptIn
(Iab690)
Correzioni di bug
- LazyColumn/Row ora manterrà attivi fino a 2 elementi precedentemente visibili (non eliminati) anche quando l'elemento viene già fatto scorrere. In questo modo il componente può riutilizzare le sottocomposizioni attive quando dovremo comporre un nuovo elemento per migliorare le prestazioni dello scorrimento. (Ie5555)
Versione 1.0.0-beta06
5 maggio 2021
androidx.compose.runtime:runtime-*:1.0.0-beta06
viene rilasciato. La versione 1.0.0-beta06 contiene questi commit.
Modifiche alle API
@ComposeCompilerApi
non è più@RequiresOptIn
(Iab690)
Versione 1.0.0-beta05
21 aprile 2021
androidx.compose.runtime:runtime-*:1.0.0-beta05
viene rilasciato. La versione 1.0.0-beta05 contiene questi commit.
Modifiche alle API
- Rimosso
@InternalComposeApi
per la registrazione di letture e scritture di snapshot (Id134d)
Correzioni di bug
- I file AndroidManifest di ui-test-manifest e ui-tooling-data sono ora compatibili con Android 12 (I6f9de, b/184718994)
Versione 1.0.0-beta04
7 aprile 2021
androidx.compose.runtime:runtime-*:1.0.0-beta04
viene rilasciato. La versione 1.0.0-beta04 contiene questi commit.
Correzioni di bug
Prima di questa modifica, le funzioni componibili locali erano ignorabili in base ai relativi parametri. Dopo questa modifica, le funzioni componibili locali non verranno ignorate. Questa modifica è stata apportata perché è normale che le funzioni locali acquisiscano i parametri dall'elemento padre, il che causa un numero maggiore di bug.
Per riassumere, considera l'esempio:
@Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) { @Composable fun ShowCount() { Text("Count: $count") } ShowCount() Button(onClick={ onCountChange(count + 1) }) { Text("Increment") } }
Prima di questa modifica, la funzione componibile
ShowCount
veniva sempre ignorata, anche dopo l'aggiornamento del parametrocount
. Abbiamo deciso, tuttavia, di non dare seguito a questa misura. (I5648a).Risolto il problema per cui
rememberSaveable()
ripristinava il valore precedente quando veniva utilizzato con i parametri di input (I1b110, b/182403380)
Versione 1.0.0-beta03
24 marzo 2021
androidx.compose.runtime:runtime-*:1.0.0-beta03
viene rilasciato. La versione 1.0.0-beta03 contiene questi commit.
Modifiche alle API
- L'API
DefaultMonotonicFrameClock
è deprecata. La chiamata awithFrameNanos
oRecomposer.runRecomposeAndApplyChanges
senzaMonotonicFrameClock
ora genereràIllegalStateException
. (I4eb0d).
Versione 1.0.0-beta02
10 marzo 2021
androidx.compose.runtime:runtime-*:1.0.0-beta02
viene rilasciato. La versione 1.0.0-beta02 contiene questi commit.
Correzioni di bug
- Applicare restrizioni all'uso pubblico delle API sperimentali (I6aa29, b/174531520)
- Correzione del problema di
rememberSaveable { mutableStateOf(0) }
quando utilizzato all'interno di una destinazione di navigazione-compose. (I1312b, b/180042685, b/180701630)
Versione 1.0.0-beta01
24 febbraio 2021
androidx.compose.runtime:runtime-*:1.0.0-beta01
viene rilasciato. La versione 1.0.0-beta01 contiene questi commit.
Questa è la prima release di Compose 1.0.0 beta.
Modifiche alle API
- Aggiungi
Recomposer.runRecomposeConcurrentlyAndApplyChanges
l'API sperimentale per la ricomposizione di composizioni invalidate fuori dal loop del frame principale. (I342d0) - Tutti i componibili contrassegnati con @ReadOnlyComposable vengono ora convalidati in fase di compilazione per garantire che effettuino chiamate solo ad altri @ReadOnlyComposables (I58961)
I
defaultFactory
percompositionLocalOf
estaticCompositionLocalOf
sono ora obbligatori anziché facoltativi.Questa modifica rimuove un potenziale errore di tipo per i tipi non null in cui non è stato fornito alcun valore di fabbrica predefinito. In precedenza, veniva fornito un riferimento nullo per un tipo non nullo.
Per i tipi di valori null, ti consigliamo di fornire
{ null }
come valore di fabbrica predefinito.Non è consigliabile utilizzare locali con tipi non null, a meno che non sia possibile specificare un valore predefinito ragionevole. Se non esiste un valore predefinito ragionevole, la lambda
defaultFactory
dovrebbe generare un'eccezione. Tuttavia, la generazione di un'eccezione significa che i consumatori locali avranno una dipendenza implicita dal fatto che l'eccezione non è applicata dal sistema dei tipi. (Ifbd2a).I simboli obsoleti sono stati rimossi dal runtime di scrittura (I3252c)
L'elemento
emptyContent()
deprecato è stato rimosso. Usa invece il criterio{}
. (Idb33f, b/179432510).I fornitori sono stati rinominati in ComposeLocalProvider
- Il costruttore Composizione non accetta più un parametro chiave ed è stato ritirato.
- currentCompositeKeyHash è stata trasformata in una proprietà componibile di primo livello invece che in una funzione componibile di primo livello.
- ComposeData e ResolutionGroup sono stati spostati nello spazio dei nomi androidx.compose.runtime.tooling
- ComposableLambda è stata trasformata in un'interfaccia anziché in una classe concreta e non ha più parametri di tipo.
- ComposableLambdaN è stata trasformata in un'interfaccia anziché in una classe concreta e non ha più parametri di tipo.
- La funzione snapshotFlow è stata spostata nello spazio dei nomi androidx.compose.runtime
- il metodo di unione di SnapshotMutationPolicy non è più sperimentale
- La funzione di primo livello @TestOnly ClearRoots è stata rimossa. Non è più necessario.
- Le funzioni keySourceInfoOf e resetSourceInfo sono state rimosse. Non sono più necessari.
- Composer.collectKeySourceInformation è stato rimosso. Non è più necessario.
- i metodi isjoinedKey, joinedKeyLeft e joinedKeyRight sono stati rimossi. Non sono più necessari.
- Varie API di primo livello sono state spostate e riorganizzate in file diversi. A causa della semantica della classe dei file di Kotlin, questo compromette la compatibilità binaria, ma non la compatibilità delle origini, quindi non dovrebbe essere un problema per la maggior parte degli utenti.
- (I99b7d, b/177245490).
SnapshotStateObservationr non è più sperimentale (Id2e6a)
Eliminate alcune API deprecate in precedenza (Ice5da, b/178633932)
Apportate le seguenti modifiche all'API Material:
- È stato aggiunto il parametro contentPadding a Top/BottomAppBar per consentire la personalizzazione della spaziatura interna predefinita.
- I parametri in BackdropScaffold sono stati riordinati in modo da seguire le linee guida dell'API per i parametri obbligatori che devono precedere i parametri facoltativi.
- Parametro
icon
spostato in BottomNavigatorItem perché sia successivo aselected
eonClick
. - Parametro
alwaysShowLabels
rinominato in BottomNavigatorItem inalwaysShowLabel
. - Parametri
bodyContent
rinominati in alcuni componenti incontent
. - Parametri riordinati in
ButtonDefaults.buttonColors()
. Tieni presente che, poiché il tipo dei parametri non è cambiato, questo non causerà un errore nel tuo codice. Assicurati di utilizzare parametri denominati o di aggiornare l'ordinamento manualmente, altrimenti il codice non funzionerà come in precedenza. - Parametro
secondaryVariant
aggiunto adarkColors()
. Questo colore solitamente corrisponde asecondary
nel tema scuro, ma garantisce coerenza e un'ulteriore personalizzazione. - Sono stati rimossi ElevationDefaults e animazioniElevation() dalla piattaforma API pubblica perché non erano di uso comune / non utili.
- Il nome
onValueChangeEnd
inSlider
è stato rinominato inonValueChangeFinished
e l'elemento è nullo. - Parametro
text
rinominato inSnackbar
incontent
per coerenza. - Il parametro
contentPadding
è stato aggiunto aDropdownMenuItem
per consentire la personalizzazione della spaziatura interna predefinita e ha resocontent
un'estensione suRowScope
. - Rinominato
ModalDrawerLayout
inModalDrawer
. - Rinominato
BottomDrawerLayout
inBottomDrawer
. - (I1cc66)
Versione 1.0.0-alpha12
10 febbraio 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha12
viene rilasciato. La versione 1.0.0-alpha12 contiene questi commit.
Modifiche alle API
- Il supporto per ViewGroups è stato rimosso da UiApplier. Gli elementi componibili emitView deprecati sono stati rimossi. (Ifb214)
- ComposizioneReference rinominato in ComposeContext (I53fcb)
- ComponenteActivity.setContent è stato spostato in androidx.activity.compose.setContent nel modulo androidx.activity:activity-compose. (Icf416)
- L'API Snapshot è stata aggiornata per essere più coerente con le linee guida dell'API, oltre a nascondere le classi di implementazione interne dall'API pubblica. (Id9e32)
- La ridenominazione degli ambienti Ambient è stata rinominata -> ComposeLocal. Gli ambienti un tempo si chiamavano AmbientFoo, ora i ComposeLocals si chiamavano LocalFoo. (I2d55d).
- Sono stati rinominati Ambient in ComposeLocal e ambientOf / staticAmbientOf in solutionLocalOf / staticResolutionLocalOf. Questa modifica contribuisce a rendere più chiaro lo scopo di ComposeLocal: un meccanismo per fornire / recuperare valori locali di una composizione. Le istanze di ComposizioneLocal devono avere come prefisso
Local
, ad esempio val LocalFoo = solutionLocalOf { Foo() }. (Ia55b6) - takeMutableSnapshot e takeSnapshot sono diventati metodi companion di Snapshot. (I91f19).
@ComposableContract
è stato ritirato e sostituito con tre annotazioni più specifiche.@ComposableContract(restartable = false)
è diventato@NonRestartableComposable
@ComposableContract(readonly = true)
è diventato@ReadOnlyComposable
@ComposableContract(preventCapture = true)
è diventato@DisallowComposableCalls
@ComposableContract(tracked = true)
è stato rimosso. (I60a9d)Le utilità emptyContent() e (@Composable () -> Unit).orEmpty() sono state ritirate in quanto non hanno più alcun impatto o valore positivo sulle prestazioni (I0484d)
snapshotFlow
ewithMutableSnapshot
non sono più sperimentali (I6a45f)Ora i ricompositori possono essere chiusi. I ricompositori chiusi continueranno a ricomporre fino al completamento delle coroutine secondarie della composizione. Recomposer.shutDown è stato rinominato per annullare il contrasto con la chiusura. (Ib6d76).
L'elemento
compose:runtime-dispatch
è ora deprecato. MonotonicFrameClock è ora disponibile in Composer:runtime e AndroidUiDispatcher in Composer:ui. (Ib5c36).L'API target del plug-in di compilazione Compose è stata modificata in modo da utilizzare un'interfaccia anziché una classe concreta. Inoltre, l'interfaccia non usa più un parametro di tipo.
Si tratta di una modifica interna che non dovrebbe influire sulla compatibilità del codice sorgente, ma è una modifica che provoca un errore binario. (I3b922, b/169406779)
Lancio di SnapshotMutableState (Icfd03)
DisposableEffectDisposable è stato rinominato DisposaleEffectResult (Ica7c6)
Rimosso Recomposer.current(). [Abstract]ComposeView ora utilizza per impostazione predefinita i ricompositori con ambito a finestre creati in modo lento e gestiti dal ViewTreeLifecycleOwner per la finestra. I segni di graduazione dell'animazione basati su Ricomposizione e conFrameNanos vengono messi in pausa mentre il ciclo di vita dell'host viene interrotto. (I38e11).
Recomposer.runningRecomposers ora offre un StateFlow globale di RecomposerInfo di sola lettura per osservare lo stato della composizione in corso nel processo. Preferisci questa API a Recomposer.current(), che ora è deprecata. (If8ebe)
DisposableEffectDisposable è stato rinominato DisposaleEffectResult (I3ea68)
Versione 1.0.0-alpha11
28 gennaio 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha11
viene rilasciato. La versione 1.0.0-alpha11 contiene questi commit.
Modifiche alle API
- onCommit, onDispose e onActive sono stati deprecati a favore delle API SideEffect e DisposableEffect (If760e)
- L'API emit() e tutti gli overload sono stati deprecati e rinominati in ComposeNode. Le API sono identiche, ma solo un nome diverso per seguire le convenzioni di denominazione di Compose (I4137b)
- invalidate e comScoreReference() ora sono deprecati a favore di currentRecomposeScope e promemoriaComposeReference. (I583a8)
RicordaOsservatore sostituisce ComposeLifecycleObservationr e ResolutionLifecycleEventsr che ora sono deprecati.
RememberObserver
sostituisceCompositionLifecycleObserver
con semantica modificata e metodi rinominati. Il passaggio alla nuova API può essere eseguito meccanicamente per gli oggetti che vengono ricordati solo una volta, cosa che è e continua a essere la pratica consigliata. Tuttavia, se un riferimento è stato ricordato più di una volta in una composizione,onRemembered
viene chiamato per ogni riferimento doveonEnter
viene chiamato una sola volta.onEnter
è stato chiamato più volte se l'oggetto è stato utilizzato in sottocomposizioni, ad esempioWithConstraints
eScaffold
, rendendo la singola chiamataonEnter
garantita inaffidabile ed è stato rimosso perRememberObserver
.RememberObserver
aggiungeonAbandoned
che viene chiamato se l'istanzaRememberObserver
viene restituita dal callback passato aremember
ma non è stato memorizzato nello stato di composizione e, di conseguenza, non riceverà mai la chiamataonRemembered
. Ciò può verificarsi se un'eccezione termina la composizione prima del completamento o se la composizione viene eliminata perché lo stato sta producendo una composizione non è più attuale o non è più necessaria. Se l'istanza diRememberObserver
che segue il suggerimento di riferimento singolo riportato sopra monitora una risorsa esterna,onForgotten
eonAbandoned
indicano entrambi che la risorsa non è più necessaria. Se l'oggetto sta monitorando i lavori avviati o le risorse allocate inonRemembered
,onAbandoned
può essere ignorato in quanto non verrà chiamato con la chiamata dionRemembered
. (I02c36).Non contrassegnare le funzioni di
collectAsState()
come incorporate (Ia73e4)
Correzioni di bug
- WithConstraints è stato rielaborato come BoxWithConstraints e spostato in Foundation.layout. (I9420b, b/173387208)
- Utilizza TestCoroutineDispatcher nei test (I532b6)
Versione 1.0.0-alpha10
13 gennaio 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha10
viene rilasciato. La versione 1.0.0-alpha10 contiene questi commit.
Grande cambiamento
La ristrutturazione dell'API di compilazione interna consente di raggruppare le modifiche ai nodi generati a seguito della composizione nella fase di applicazione delle modifiche, dopo il completamento di tutte le funzioni
@Composable
.Si tratta di una modifica che provoca un errore di comportamento, che potrebbe influire sul codice dell'applicazione poiché i nodi non sono più disponibili nelle API interne e sperimentali fino a quando non sono state applicate le modifiche. In genere, si può risolvere questo problema racchiudendo il codice con queste dipendenze in un componibile
SideEffect
per posticipare l'esecuzione del codice fino a quando i nodi non sono stati creati e inizializzati. (I018da)
Modifiche alle API
- È stato aggiunto un modo per controllare se il ricompositore ha applicato le modifiche. (I1b3e2).
Espandi le API [Abstract]ComposeView per consentire il riciclo delle viste basate su Compose, smaltindo la loro composizione per ricrearla di nuovo in un secondo momento. Aggiungi API per l'installazione e il rilevamento di ricompositori con ambito a finestre e ComposeReferences per la creazione di composizioni figlio.
Aggiungi ViewComposizioneStrategy per configurare la strategia di eliminazione della composizione di [Abstract]ComposeViews. Il comportamento predefinito è "Elimina allo scollegamento della finestra". (I860ab)
Correzioni di bug
- Il ricompositore ora espone un flusso del suo stato attuale, consentendo di monitorarne l'attività e l'attività degli effetti associati. (Ifb2b9)
- È ora possibile accedere all'evento keyEvent nativo tramite keyEvent.nativeKeyEvent (I87c57, b/173086397)
Versione 1.0.0-alpha09
16 dicembre 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha09
viene rilasciato. La versione 1.0.0-alpha09 contiene questi commit.
Modifiche alle API
Sono stati rimossi SlotTable, SlotReader e SlotWriter dall'API pubblica. Questi sono stati contrassegnati come InternalComposeAPI in precedenza. Ora sono interne al modulo Compose.
ComposeData e ResolutionGroup sono stati aggiunti come sostituzione dell'API ui-toolsing da utilizzare per estrarre le informazioni di composizione. Questi sono pubblici, ma non sono destinati a essere utilizzati al di fuori dell'API ui-tooling, in quanto forniscono le informazioni non elaborate che l'API ui-tooling interpreta (I31a9c)
La classe Applier non è più considerata (Id85b0)
L'interfaccia di
Applier
è cambiata per semplificare la creazione di alberi dal basso verso l'alto anziché dall'alto verso il basso.Il metodo
insert()
è stato rinominato ininsertTopDown()
.È stato aggiunto un nuovo metodo,
insertBottomUp()
.Un applicatore inserisce nodi nella struttura ad albero modificata utilizzando
insertTopDown()
oinsertBottomUp()
a seconda di quale ha il rendimento migliore.Alcuni alberi, come
LayoutNode
eView
, sono molto più efficienti da costruire dal basso verso l'alto. Prima di questa modifica, era necessario uno stack di inserti per implementare il modello dal basso verso l'alto, che doveva essere copiato in ogni applicatore che richiedeva una costruzione dal basso verso l'alto per migliorare le prestazioni. Con questa modifica, unApplier
esegue l'override diinsertBottomUp()
per creare un albero dal basso verso l'alto einsertTopDown()
per creare l'albero dall'alto verso il basso. (Icbdc2)Compose supporta i getter di proprietà che possono effettuare chiamate componibili. Il supporto per questo aspetto non verrà interrotto, ma la sintassi per dichiarare un getter di proprietà come @Composable sta cambiando.
La sintassi ora deprecata per farlo era l'annotazione della proprietà stessa:
@Composable val someProperty: Int get() = ...
La sintassi corretta per farlo è annotare il getter della proprietà:
val someProperty: Int @Composable get() = ...
Entrambe le sintassi funzioneranno per un po' di tempo, ma la sintassi deprecata precedente diventerà un errore di compilazione. (Id9197)
Correzioni di bug
- AndroidProprietario inviato come interno (Ibcad0, b/170296980)
- subcomposeInto(LayoutNode) è stato reso interno (Id724a)
Versione 1.0.0-alpha08
2 dicembre 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha08
viene rilasciato. La versione 1.0.0-alpha08 contiene questi commit.
Modifiche alle API
- È stato aggiunto il controllo lint per la denominazione e la posizione dei parametri lambda componibili, per verificare la coerenza con le linee guida di Compose.
È stata anche eseguita la migrazione di alcune API utilizzando
children
come nome del lambda finale incontent
, secondo le indicazioni e il controllo del lint. (Iec48e). - Il ricompositore non accetta più un EmbeddingContext; le dipendenze di pianificazione richieste vengono ottenute da effettiCoroutineContext. FrameManager è deprecato; le integrazioni della piattaforma devono inizializzare la propria gestione globale degli snapshot. (I02369)
- La funzione RestorableStateholder.withRestorableState è stata rinominata in RestorableStateProvider (I66640)
Correzioni di bug
- Gli Ambient obsoleti hanno come suffisso il nome
Ambient
e sono stati sostituiti con nuove proprietà con prefisso Ambient, in base ad altre linee guida relative all'API Ambient e Compose. (I33440) - Rimuovi il vecchio modulo ui-test e i relativi stub (I3a7cb)
Versione 1.0.0-alpha07
11 novembre 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha07
viene rilasciato. La versione 1.0.0-alpha07 contiene questi commit.
Nuove funzionalità
Modifiche alle API
- L'annotazione
@UnionType
è stata deprecata (I57cde) - fornireDefault è stato aggiunto in alternativa per fornire gli ambienti e può essere utilizzato per specificare i valori ambientali che verranno impostati solo quando non è già stato fornito un valore ambient. (Id6635, b/171024925)
- LaunchedTask è stato rinominato in LaunchedEffect per coerenza con le API SideEffect e DisposableEffect. LaunchedEffect senza parametri per il soggetto non è consentito per incoraggiare le best practice. (Ifd3d4)
- L'applicazione ora dispone di callback onIniziaChanges/onEndChanges che vengono richiamati quando un Composer inizia/termina l'applicazione delle modifiche alla struttura. Questi possono essere utilizzati per la gestione delle risorse in batch, se necessario. (Icf476)
- Il ricompositore ora richiede un CoroutineContext in fase di costruzione (Ic4610)
- Modifiche all'implementazione SlotTable interna che non dovrebbero influire sull'API pubblica. (If9828)
- Sono stati rimossi gli adattatori rxjava2 deprecati che non utilizzano il valore iniziale (Idb72f)
Correzioni di bug
- Foundation.Text è stato ritirato e sostituito con material.Text. Per un'API di testo di base non limitata che non utilizza valori di un tema, vedi androidx.compose.foundation.BasicText. (If64cb).
- BaseTextField è stato ritirato. Utilizza BasicTextField. (I896eb)
- Diversi simboli relativi al layout sono stati spostati da androidx.compose.ui ad androidx.compose.layout.ui. (I0fa98, b/170475424).
Contributi esterni
- Modulo
runtime-rxjava3
aggiunto per la scrittura. Simile aruntime-rxjava2
(I02cbf)
Versione 1.0.0-alpha06
28 ottobre 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha06
viene rilasciato. La versione 1.0.0-alpha06 contiene questi commit.
Modifiche alle API
- Il ricompositore è ora un valore di ResolutionReference e un elemento padre della composizione valido. Ora il ricompositore esplicito è necessario in meno posizioni. (I4036f)
- È stata aggiunta l'API di controparte DisposableEffect a SideEffect, con il ruolo di onCommit-with-params ma con un valore onDispose obbligatorio.
- È stata aggiunta l'API keepUpdatedState per pubblicare i dati dalla ricomposizione a processi in corso o di lunga durata come DisposableEffects o LaunchedTasks.
- (Id50b9)
- MutableVector ora implementa RandomAccess (I85d73, b/170461551)
- Aggiunta dell'elemento componibile SideEffect per applicare gli effetti collaterali della composizione agli oggetti gestiti dalla composizione. SideEffect è pensato per sostituire il componibile onCommit. (Ia77c2).
- Nuova API sperimentale RestorableStateholder. Consente di salvare lo stato definito con [saveInstanceState] e [rememberSavedInstanceState] per il sottoalbero prima di smaltirlo per consentire la composizione della stessa la prossima volta con lo stato ripristinato. (I66884, b/166586419)
Correzioni di bug
- Abilita le transizioni in ComposeTestRule; rimuovi l'opzione per attivare il cursore lampeggiante da ComposeTestRule. (If0de3)
Versione 1.0.0-alpha05
14 ottobre 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha05
viene rilasciato. La versione 1.0.0-alpha05 contiene questi commit.
Modifiche alle API
- Modificatore di sospensione sperimentale Modifier.pointerInput (Ia77d2)
- Le prestazioni dello scorrimento di LazyColumn/Riga sono migliorate grazie a un minore lavoro nella sottocomposizione a ogni scorrimento. Il nuovo metodo haInvalidations() è stato aggiunto per la classe di composizione. Il metodo hasPendingChanges() di Recomposer è stato rinominato in hasInvalidations() (Ib2f32, b/168293643, b/167972292, b/165028371)
- Aggiungi l'API produceState per avviare coroutine dalla composizione
che aggiornano un singolo valore
State<T>
nel tempo (Id4a57) - LaunchInComposizione è stato rinominato in LaunchedTask in base alle linee guida dell'API Compose (I99a8e)
- L'ordine delle chiamate a place() nei layout personalizzati ora definisce l'ordine di disegno per gli elementi secondari (Ibc9f6)
Versione 1.0.0-alpha04
1° ottobre 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha04
viene rilasciato. La versione 1.0.0-alpha04 contiene questi commit.
Modifiche alle API
- È stato aggiunto SubjectScope per consentire la raccolta di ambiti di osservazione layout e di disegno una volta che non sono più validi. (Ic4cf8)
- Aggiunta l'API derivaStateOf per creare oggetti State in base a un calcolo che può leggere (e derivare) altri oggetti State (If758b)
- Aggiunta l'API TestOnly per SnapshotStateObservationr (I6e2a9)
Correzioni di bug
- Foundation.Box è stata deprecata. Utilizza Foundation.layout.Box. (Ie5950, b/167680279)
Versione 1.0.0-alpha03
16 settembre 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha03
viene rilasciato. La versione 1.0.0-alpha03 contiene questi commit.
Modifiche alle API
CompositionCoroutineScope
non implementa piùMonotonicFrameClock
. I chiamanti diwithFrameNanos
devono importare esplicitamente la funzione di primo livello. (Icb642, b/166778123)
Correzioni di bug
- Le funzioni di test globali come
onNode
owaitForIdle
sono ora ritirate. Esegui la migrazione alle nuove controparti definite su ComposeTestRule (I7f45a) launchInComposition
non lancia più le coroutine non inviate (Ief6af, b/166486000)
Versione 1.0.0-alpha02
2 settembre 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha02
viene rilasciato. La versione 1.0.0-alpha02 contiene questi commit.
Modifiche alle API
- Aggiungi le API
snapshotFlow
ewithMutableSnapshot
per utilizzare e generare le modifiche ai dati degli snapshot. (I3e722). La convenzione di chiamata per le funzioni componibili è cambiata. Questa è una modifica che provoca un errore di codice binario. Tutte le librerie devono essere ricompilate per poter funzionare con questa versione del plug-in di compilazione Composer.
Questa modifica non crea una modifica che provoca un errore a livello di origine, in quanto le uniche API che sono state modificate sono API di compilazione con un'attivazione esplicita. (I7afd2, b/158123185).
Metodi di pianificazione rimossi da EmbeddingContext (I7b9be)
Il comportamento di onCommit è ora deprecato, onCommit ora ha il comportamento onPreCommit.
onCommit e onActive ora vengono eseguiti nello stesso frame del coreografo in cui cambia la composizione anziché all'inizio del successivo frame del coreografo. (I70403)
Versione 1.0.0-alpha01
26 agosto 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha01
viene rilasciato. La versione 1.0.0-alpha01 contiene questi commit.
Versione 0.1.0-dev
Versione 0.1.0-dev17
19 agosto 2020
androidx.compose.runtime:runtime-*:0.1.0-dev17
viene rilasciato. La versione 0.1.0-dev17 contiene questi commit.
Modifiche alle API
- Le emit personalizzate ora possono dichiarare che uno o più dei suoi setter possono essere ignorati e ricomposti indipendentemente dall'emissione. (Ibbd13).
Chiamate FrameManager deprecate rimosse.
Le API di scrittura interne sono state modificate per ridurre l'overhead per monitorare oggetti di stato come
mutableStateof()
(I80ba6)Per chiarezza, l'elemento componibile
state { ... }
è stato ritirato a favore di chiamate esplicite aremember { mutableStateOf(...) }
. In questo modo si riduce la superficie API complessiva e il numero di concetti per la gestione dello stato e corrisponde al patternby mutableStateOf()
per la delega delle proprietà di classe. (Ia5727)Flow.collectAsState ora determina il supervisore predefinito dalla composizione stessa anziché impostare come valore predefinito Dispatchers.Main. (I9c1d9).
Si è verificato un arresto anomalo quando un elemento che salva lo stato utilizzato all'interno del ciclo for è stato risolto. Ora che è consentita la stessa chiave in savedInstanceState(), l'API di UiSavedStateRegistry è adattata a questo nuovo requisito (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561)
Correzioni di bug
emitView
è stato deprecato. Se possibile, utilizzaAndroidView
per l'emissione di visualizzazioni all'interno di Compose. Tieni presente che la scrittura diretta di visualizzazioni e gruppi di visualizzazioni non sarà supportata in futuro a meno che non si tratti di foglie nell'albero di composizione, nel caso in cui questa operazione possa essere eseguita utilizzando AndroidView. (I29b1e, b/163871221).
Versione 0.1.0-dev16
5 agosto 2020
androidx.compose.runtime:runtime-*:0.1.0-dev16
viene rilasciato. La versione 0.1.0-dev16 contiene questi commit.
Modifiche alle API
Il criterio di mutazione predefinito di
mutableStateOf()
,ambientOf()
esavedInstanceStateOf()
è stato modificato instructuralEqualityPolicy()
anzichéreferentialEqualityPolicy()
.Per impostazione predefinita, per decidere se un nuovo valore assegnato a un'istanza
mutableStateOf()
è considerato una modifica, l'impostazione predefinita è==
anziché===
.Consulta la pagina https://kotlinlang.org/docs/reference/equality.html
ambientOf()
esavedInstanceStateOf()
utilizzanomutableStateOf()
nelle implementazioni, pertanto sono state modificate per garantire la coerenza conmutableStateOf()
.L'uso di uguaglianza strutturale corrisponde più alle aspettative degli sviluppatori.
Ad esempio,
val state = mutableStateOf(1f)
e poi
state.value = 1f
non prenderà più in considerazione una modifica a
state
e gli utilizzi distate
durante la composizione non dovranno più essere ricomposti.Si tratta di una modifica che provoca un errore, ma nella maggior parte dei casi (ad esempio, quando utilizzi classi che non eseguono l'override di
equals()
), non ci saranno effetti evidenti su un'applicazione.Le classi che eseguono l'override di
equals()
, ad esempio le classidata
, potrebbero riscontrare un peggioramento delle prestazioni poiché i loro metodiequals()
vengono ora, per impostazione predefinita, richiamati quando vengono assegnati a unmutableStateOf()
.Il comportamento precedente può essere ripristinato aggiungendo il parametro del criterio
policy = referentialEqualityPolicy()
alle chiamate amutableStateOf()
,ambientOf()
esavedInstanceStateOf()
. (Ic21a7)Row
eColumn
sono ora funzioni incorporate per ridurre in modo significativo l'overhead associato al loro utilizzo. (I75c10)
Correzioni di bug
- L'elemento setViewContent è stato deprecato. Al suo posto è necessario utilizzare setContent. (I7e497, b/160335130).
È stato aggiunto MonotonicFrameAnimationClock che consente di utilizzare MonotonicFrameClock come AnimationClockObservable per colmare il divario tra i nuovi orologi basati su coroutine e le API che utilizzano ancora i vecchi orologi basati su callback.
L'equivalente MonotonicFrameClock di ManualAnimationClock è ora ManualFrameClock. (I111c7, b/161247083)
Modifier.stateTrascinagable è stato completamente rielaborato e rinominato Modifier.scrawlable. È stata introdotta una nuova classe SwipeableState e DrawerState e BottomDrawerState sono state sottoposte a refactoring per ereditarle. [Modal/Bottom]DrawerLayout non utilizza più un parametro onStateChange. (I72332, b/148023068)
Modifier.plus è stato ritirato. Usa invece Modifier.then. "Quindi" ha un segnale di ordinamento più forte, mentre vieta di digitare
Modifier.padding().background() + anotherModifier
, il che spezza la catena e più difficile da leggere (Iedd58, b/161529964)SubcomposeLayout è stato aggiunto. Si tratta di una primitiva di basso livello che consente di comporre i figli durante la misurazione se vogliamo utilizzare alcuni valori disponibili solo in seguito durante la misura per la composizione del sottoalbero. Ad esempio, WithConstraints non viene implementato utilizzando SubcomposeLayout. (I25cc8)
Material FilledTextField è stato rinominato TextField e il Foundational TextField è stato rinominato BaseTextField per rendere più semplice l'individuazione e l'utilizzo dell'API desiderata (Ia6242, b/155482676)
Modifier.drawBackground è stato rinominato Modifier.background (I13677)
Versione 0.1.0-dev15
22 luglio 2020
androidx.compose.runtime:runtime-*:0.1.0-dev15
viene rilasciato. La versione 0.1.0-dev15 contiene questi commit.
Aggiornamento delle dipendenze
- Per utilizzare la versione
0.1.0-dev15
di Compose, devi aggiornare le dipendenze in base ai nuovi snippet di codice mostrati sopra in Dichiarazione delle dipendenze.
Modifiche alle API
L'annotazione
@Model
è ora deprecata. Utilizza state e mutableStateOf come alternative. Questa decisione sul ritiro è stata presa dopo un'attenta discussione.Giustificazione
La motivazione include, a titolo esemplificativo:
- Riduce l'area della superficie delle API e i concetti che dobbiamo insegnare
- Si allinea maggiormente con altri toolkit simili (Swift UI, React, Flutter)
- Decisione reversibile. Possiamo sempre ripristinare
@Model
in un secondo momento. - Rimuove l'uso eccessivo e le domande difficili sulla configurazione di
@Model
in quanto dobbiamo gestire @Model
classi di dati, uguale, hashcode e così via.- Come posso avere alcune proprietà "osservate" e altre no?
- Come posso specificare l'uguaglianza strutturale e referenziale da utilizzare nell'osservazione?
- Riduce la "magia" del sistema. Diminuirà la probabilità che un utente supponga che un sistema sia più intelligente di quello che è (ad esempio, sapere come distinguere un elenco)
- Rende più intuitiva la granularità dell'osservazione.
- Migliora il refactoring della variabile -> proprietà nella classe
- Potenzialmente, offre la possibilità di eseguire ottimizzazioni manuali specifiche per lo stato
- Si allinea più da vicino con il resto dell'ecosistema e riduce l'ambiguità nei confronti di uno stato immutabile o di "adottare uno stato mutabile" a noi
Note sulla migrazione
Quasi tutti gli utilizzi esistenti di
@Model
si trasformano in modo abbastanza banale in uno dei due modi seguenti. L'esempio seguente ha una classe@Model
con due proprietà solo a fini di esempio e viene utilizzata in un componibile.@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 } ) }
Alternativa 1: utilizza
State<OriginalClass>
e crea copie.Questo approccio è reso più semplice con le classi di dati di Kotlin. Essenzialmente, trasforma tutte le precedenti proprietà
var
nelle proprietàval
di una classe di dati, quindi utilizzastate
anzichéremember
e assegna il valore dello stato alle copie clonate dell'originale usando il metodo di convenienzacopy(...)
della classe dei dati.È importante notare che questo approccio funziona solo quando le uniche modifiche a quella classe sono state apportate nello stesso ambito in cui è stata creata l'istanza
State
. Se la classe sta mutando internamente al di fuori dell'ambito di utilizzo e ti basi sull'osservazione di ciò, l'approccio successivo è quello da utilizzare.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) } ) }
Alternativa 2: utilizza mutableStateOf e delegati della proprietà
Questo approccio è reso più semplice dai delegati alle proprietà di Kotlin e dall'API
mutableStateOf
che ti consente di creare istanze MutableState al di fuori della composizione. In sostanza, sostituisci tutte le proprietàvar
della classe originale con proprietàvar
conmutableStateOf
come delegato della proprietà. Questo presenta il vantaggio che l'utilizzo della classe non cambierà affatto, ma solo la sua implementazione interna. Tuttavia, il comportamento non è completamente identico all'esempio originale, poiché ora ogni proprietà è osservata/iscritta singolarmente, quindi le ricomposizioni che vedi dopo questo refactoring potrebbero essere più ristrette (aspetto positivo).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/73}14, 143263b/743263)
Modifica la strategia di generazione del codice del compilatore di Compose. Prima della modifica, il compilatore del compositore trasformava le chiamate in funzioni componibili. Con questa modifica, ora trasformiamo il corpo di una funzione componibile e lasciamo il sito di chiamata inalterato (soprattutto).
Ciò significa che la maggior parte della comunicazione logica con il runtime di scrittura avviene all'inizio del corpo della funzione, anziché sul sito di chiamata.
Questa modifica dovrebbe essere compatibile con il codice sorgente per tutti gli utilizzi di Compose. A seguito di questa modifica, la maggior parte degli utenti di Scrivi non dovrebbe dover aggiornare alcun codice.
Per supportare questa operazione, la firma della JVM di tutte le funzioni componibili è stata modificata. Una funzione componibile che accetta un singolo parametro viene trasformata in una funzione che accetta 3 parametri. I parametri aggiuntivi sono Composer, un numero intero "chiave", un numero intero della maschera di bit utilizzato per propagare i metadati tramite le chiamate.
Compose ora trasforma anche gli argomenti predefiniti in una funzione componibile. Lo fa senza introdurre un ulteriore sovraccarico sintetico predefinito della funzione stessa, quindi questa modifica comporterà la definizione di un numero inferiore di funzioni.
Modifiche comportamentali intenzionali note derivanti da:
- Alcune chiamate salteranno dove non sarebbe stato possibile in precedenza
- Le espressioni componibili nelle espressioni di argomenti predefinite vengono ora sottoscritte e gestite correttamente
Questo lavoro ha incluso alcune ottimizzazioni: 1. Il risultato dei confronti di parametri viene propagato attraverso il grafico delle chiamate ad altre funzioni componibili. Ciò comporterà un minor numero di confronti in fase di runtime, una riduzione delle dimensioni della tabella degli slot e una maggiore possibilità di ignorare le funzioni componibili che in precedenza non erano state ignorate 2. I parametri che vengono determinati come "statici" al momento della compilazione non vengono più confrontati né archiviati nel runtime. In questo modo ridurrai il numero di confronti e le dimensioni della tabella degli slot. 3. La struttura del flusso di controllo del corpo delle funzioni viene utilizzata per ridurre al minimo il numero di gruppi generati. In questo modo si riducono le dimensioni della tabella degli slot e si riduce il lavoro per il runtime 4. I parametri di invio e ricevitore inutilizzati delle funzioni non sono inclusi nel determinare la possibilità di ignorare la funzione se non vengono utilizzati all'interno del corpo della funzione.
La maggior parte delle modifiche che provocano errori riguardava le API scelte direttamente dal compilatore e il tipico utilizzo dell'interfaccia di composizione non sarà interessato: 1. Composer::startExpr è stato rimosso 2. Composer::endExpr è stato rimosso 3. Composer::call è stato deprecato 4. Gli overload non varargs di
key
sono stati rimossi. D'ora in poi, utilizza la versionevararg
. 5. L'annotazione Pivotal è stata ritirata. Utilizzakey
in sostituzione. 6. ScopeUpdateScope::updateScope è stato modificato per prevedere una Function3 anziché una Function1 7. rebootableFunction e rampableFunctionN sono stati aggiornati per includere ulteriori parametri di tempo di compilazione (I60756, b/143464846)Sono stati aggiunti sortWith e removeRange a MutableVector (ICCf7)
Sono state aggiunte implementazioni dei metodi predefiniti per ComposeLifecycleObservationr (I24289)
L'applicatore ora richiede un metodo clear() per smaltire le composizioni (Ibe697)
Aggiunto asMutableList() a MutableVector per consentirne il passaggio all'API pubblica senza dover copiare l'intero elenco. (I298df)
È stato aggiunto promemoriaCoroutineScope() per ottenere un CoroutineScope gestito nella composizione per il lancio di lavori in risposta agli eventi. (I0e264).
MutableVector è una nuova raccolta che non implementa nessuna dell'interfaccia Raccolta standard. Questa raccolta offre una velocità superiore ad altri requisiti e è pensata per essere utilizzata solo nelle implementazioni interne. (I8ebd6).
Sono stati rimossi temporaneamente
StableMutableList
eStableMutableMap
per evitare un problema nella versione di Kotlin di scrittura richiesta. Queste interfacce verranno reintrodotte dopo l'aggiornamento dell'interfaccia di scrittura a una versione di Kotlin che non presenta il problema.SnapshotStateList
eSnapshotStateMap
sono ora pubblici, ma verranno ritirati una volta ripristinatiStableMutableList
eStableMutableMap
. (Ia7769)aggiungi la funzione withFrameNanos di primo livello per la durata dell'animazione (Ie34c5)
L'annotazione @Untracked è stata ritirata. Sostituisci con @ComposableContract(tracked=false) (Id211e)
RiavviabileFunction e le API associate sono state rinominate in ComposableLambda e così via. Queste API sono state scelte come target solo dal compilatore, quindi questo non dovrebbe influire normalmente sulla compatibilità a livello di origine. La ridenominazione è stata effettuata principalmente per comunicare che cosa è migliore questa classe quando viene visualizzata nelle analisi dello stack (I7eb25)
L'annotazione @Composable non è più valida per i corsi (Ia5f02)
Ambient<T>
ora è @Stable anziché @Immutable (I0b4bb)Prima di questa modifica, il plug-in di compilazione di Composer intercettava in modo non banale le chiamate ai costruttori all'interno di una funzione @Composable se esistesse un (I5205a, b/158123804)
L'elemento Ricomponi componibile non è più un'astrazione utile. La maggior parte della ricomposizione avviene a seguito delle assegnazioni MutableState. Per qualsiasi cosa oltre questo limite, ti consigliamo di utilizzare la funzione
invalidate
per attivare una ricomposizione dell'ambito corrente. (Ifc992).L'osservazione non è più un'astrazione utile. Se devi replicarla, la sua implementazione può essere replicata semplicemente creando una funzione componibile che esegua un parametro lambda componibile. Ad esempio,
@Composable fun Observe(body: @Composable () -> Unit) = body()
(I40d37)@Direct è stato ritirato a favore di @ComposableContract(restartable=false) (If4708)
È stato aggiunto un adattatore per lo StateFlow introdotto di recente che consente di precompilare il valore iniziale in modo che lo stato restituito non sia null (I61dd8, b/156233789)
È stato aggiunto un adattatore per Flow. Esempio di utilizzo: val value by flow.collectAsState() (If2198, b/153375923)
[Mutable]Gli operatori delegati per le proprietà statali sono stati spostati nelle estensioni per supportare le ottimizzazioni dei delegati di proprietà Kotlin 1.4. I chiamanti devono aggiungere importazioni per continuare a utilizzare
by state { ... }
oby mutableStateOf(...)
. (I5312c)androidx.compose.ViewComposer è stato spostato in androidx.ui.node.UiComposer androidx.compose.Emittable rimosso. È stato ridondante con ComponentiNode. androidx.compose.ViewAdapters è stato rimosso. Non rappresentano più un caso d'uso supportato. Compose.composeInto è stato deprecato. Usa invece
setContent
osetViewContent
. Compose.disposeCompose è stato deprecato. Usa invece il metododispose
sulComposition
restituito dasetContent
. androidx.compose.Compose.subcomposeInto è stato spostato in androidx.ui.core.subcomposeInto ComponenteNode#emitInsertAt è stato rinominato in ComponenteNode#insertAt ComponenteNode#emitRemoveAt è stato rinominato in ComponenteNode#removeAt ComponenteNode#emitModeÈ stato aggiornato il flag
ComposeFlags.COMPOSER_PARAM
in modo che siatrue
. Questa operazione cambierà la strategia di generazione del codice per il plug-in di composizione. A livello generale, questo fa sì che le funzioni @Composable vengano generate con un parametro sintetico aggiuntivo, che viene trasmesso alle successive chiamate @Composable per consentire al runtime di gestire correttamente l'esecuzione. Si tratta di una modifica significativa che provoca un'interruzione del programma binario, tuttavia dovrebbe garantire la compatibilità a livello di origine in tutti gli utilizzi sanzionati di Compose. (I7971c)Interruzione delle modifiche all'API Ambient. Per informazioni dettagliate, consulta la documentazione relativa al log e a
Ambient<T>
(I4c7ee, b/143769776)Aggiunto ui-livedata, nuovo artefatto con un adattatore per LiveData. Esempio di utilizzo: val value di liveData.observeAsState() (Ie9e8c, b/150465596)
Gli adattatori Rx senza valore iniziale esplicito sono deprecati. L'uso di null non è sempre l'impostazione predefinita migliore, ad esempio se hai un elenco, è meglio iniziare con emptyList() o con qualsiasi altro valore predefinito ragionevole (I00025, b/161348384).
Aggiunto ui-rxjava2, un nuovo artefatto con adattatori per RxJava2. Esempio di utilizzo: val value di observable.subscribeAsState() (Ifab4b, b/153369097)
Ora è possibile utilizzare
savedInstanceState()
con i tipi di valori null (I6847f, b/153532190)Nuovi listSaver() e mapSaver() per semplificare la scrittura di oggetti risparmio personalizzati (I8cf68, b/152331508)
Nuove funzioni: savedInstanceState() e promemoriaInstanceState() simili a state() e promemoria(), ma con un'istanza salvata che supporta lo stato (If1987, b/152025209).
Correzioni di bug
runOnIdleCompose
rinominato inrunOnIdle
(I83607)- API sperimentale Made LayoutNode (I4f2e9)
- androidx.ui.foundation.TextFieldValue e androidx.ui.input.EditorValue sono deprecati. Anche i componibili TextField, FilledTextField e CoreTextField che utilizzano questo tipo sono deprecati. Utilizza invece androidx.ui.input.TextFieldValue (I4066d, b/155211005)
- È stata rimossa l'API DrawBackground deprecata a favore delle API di estensione DrawBackground su Modifier. Il refactoring delle implementazioni di disegnoBackground di colori, pennelli e colori per ridurre i percorsi di codice e rimuovere il requisito della creazione di Modificatore come parte della composizione. (I0343a)
- Sono state aggiornate le API di composizione di livello superiore che espongono CanvasScope per esporre CanvasScope. In questo modo, i consumatori non dovranno più gestire i propri oggetti Paint. I consumatori che devono comunque accedere a Canvas possono utilizzare il metodo dell'estensione disegnoCanvas, che offre un callback per inviare i comandi di disegno con Canvas sottostante. (I80afd)
- L'API WithConstraints finale lambda è stata modificata. Ora, invece di due parametri, ha un ambito ricevitore che, oltre a vincoli e layoutDirection, fornisce le proprietà minwidth, maxwidth, minHeight e maxHeight in Dp (I91b9a, b/149979702).
- Aggiunto il modificatore di spaziatura interna simmetrica. (I39840)
- Sono stati aggiornati i valori di wrapContentLarghezza e wrapContentAltezza per l'allineamento verticale o orizzontale, anziché dell'allineamento. Il modificatore di gravità è stato aggiornato in modo da accettare l'allineamento verticale o orizzontale. Righe, colonne e stack sono stati aggiornati per supportare gli allineamenti continui personalizzati. (Ib0728)
- il modulo ui-text viene rinominato come ui-text-core (I57dec)
- Migliora l'API DrawModifier:
- È stato impostato l'ambito del destinatario perDraw() ContentDrawScope
- Rimossi tutti i parametri in disegno()
- DrawScope ha la stessa interfaccia del precedente CanvasScope
- ContentDrawScope ha il metodoDrawContent() (Ibaced, b/152919067)
- L'API ColoredRect è stata ritirata. Usa invece il criterio
Box(Modifier.preferredSize(width, height).drawBackground(color))
. (I499fa, b/152753731). - Operatore di Modificatore più sostituito con funzioni di estensione di fabbrica (I225e4)
- I membri RowScope e ColumnScope ora sono accessibili all'esterno di Row e Column. (I3a641)
- È stato cambiato il nome LayoutFlessibile in LayoutWeight. Rinominato parametro stretto per riempire. (If4738)
- Parametro WithConstraints ottenuto da LayoutDirection (I6d6f7)
- Lo sfondo è stato rinominato in DrawBackground e deve essere memorizzato per impostazione predefinita (Ia0bd3)
- Sostituire il valore ButtonStyle con funzioni distinte e rimuovere il sovraccarico di testo (stringa). Consulta gli esempi aggiornati per le informazioni sull'utilizzo. (If63ab, b/146478620, b/146482131).
runOnIdleCompose
erunOnUiThread
sono ora funzioni globali anziché metodi su ComposeTestRule. (Icbe8f)
Contributi esterni
- Rimuovi le API non necessarie, come Looper e Handler, dal livello di portabilità del runtime di Compose (I6847d)
- Depreca
Flow<T>.collectAsState()
senza valore iniziale. UtilizzaStateFlow<T>
o trasmetti un valore iniziale esplicito. (I63f98, b/157674865)