Runtime di Compose
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshots
(consulta la documentazione di riferimento dell'API per tutti i pacchetti di composizione)
Ultimo aggiornamento | Release stabile | Candidato per la release | Versione beta | Versione alpha |
---|---|---|---|---|
13 novembre 2024 | 1.7.5 | - | - | 1.8.0-alpha06 |
Struttura
Compose è una combinazione di 7 ID gruppo Maven in androidx
. Ogni gruppo contiene un sottoinsieme mirato di funzionalità, ciascuna con il proprio insieme di note di rilascio.
Questa tabella illustra i gruppi e i link a ogni set di note di rilascio.
Gruppo | Descrizione |
---|---|
compose.animation | Creare animazioni nelle loro applicazioni Jetpack Compose per arricchire l'esperienza utente. |
compose.compiler | Trasforma le funzioni @Composable e abilita le ottimizzazioni con un plug-in del compilatore Kotlin. |
compose.foundation | Scrivi applicazioni Jetpack Compose con componenti di base pronti all'uso ed espandi la base per creare i componenti del tuo sistema di progettazione. |
compose.material | Crea interfacce utente Jetpack Compose con componenti Material Design pronti all'uso. Si tratta del punto di contatto di primo livello di Compose, progettato per fornire componenti corrispondenti a quelli descritti all'indirizzo www.material.io. |
compose.material3 | Crea interfacce utente Jetpack Compose con i componenti Material Design 3, la prossima evoluzione di Material Design. Material 3 include temi e componenti aggiornati e funzionalità di personalizzazione di Material You come i colori dinamici ed è progettato per essere coerente con il nuovo stile visivo e l'interfaccia utente di sistema di Android 12. |
compose.runtime | Componenti di base del modello di programmazione e della gestione dello stato di Compose, nonché del runtime di base per il plug-in del compilatore Compose 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 da 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 elementi necessari nel file build.gradle
per la tua app o il tuo modulo:
Groovy
dependencies { implementation "androidx.compose.runtime:runtime:1.7.5" implementation "androidx.compose.runtime:runtime-livedata:1.7.5" implementation "androidx.compose.runtime:runtime-rxjava2:1.7.5" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.runtime:runtime:1.7.5") implementation("androidx.compose.runtime:runtime-livedata:1.7.5") implementation("androidx.compose.runtime:runtime-rxjava2:1.7.5") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Per ulteriori informazioni sulle dipendenze, consulta Aggiungere dipendenze di compilazione.
Feedback
Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se riscontri nuovi problemi o hai idee per migliorare questa raccolta. Prima di crearne uno nuovo, dai un'occhiata ai problemi esistenti in questa raccolta. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.
Per ulteriori informazioni, consulta la documentazione del Monitoraggio problemi.
Tracciamento del runtime versione 1.7
Versione 1.7.0-rc01
18 settembre 2024
androidx.compose.runtime:runtime-tracing:1.7.0-rc01
viene rilasciato. La versione 1.7.0-rc01 contiene questi commit.
Tracciamento del 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
- Dipendenze bloccate alle versioni stabili più recenti supportate (ad es.compose-runtime e tracing-perfetto). È stato risolto un problema per cui compose-runtime-tracing importava una versione più recente di compose-runtime nell'app.
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 versioni più recenti di Benchmark e Tracing Perfetto, che consentono il supporto del monitoraggio della composizione all'avvio dell'app (avvio a freddo), ad esempio in AndroidX Benchmark e Android Studio (a partire da Hedgehog Beta 2).
Modifiche all'API
androidx.tracing.perfetto.Trace
rinominato inandroidx.tracing.perfetto.PerfettoSdkTrace
. (I44af8)- Rendere le API SDK Tracing Perfetto coerenti con
android.os.Trace
. (I73ba0, b/282199917) - Prerequisiti per il monitoraggio all'avvio dell'app. (Iad890)
- File API sperimentali e pubblici uniti (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 a valle
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 di supporto (disponibile a breve), consente il monitoraggio esteso in un'app Compose. Questa release iniziale è 1.0.0-alpha01.
Versione 1.8
Versione 1.8.0-alpha06
13 novembre 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha06
viene rilasciato. La versione 1.8.0-alpha06 contiene questi commit.
Modifiche all'API
- Modifiche all'API
PausableComposition
. Queste modifiche non compatibili con le release precedenti di 1.8.0-alpha (da 1.8.0-alpha02), ma poiché si tratta di nuove API in 1.8.0, la compatibilità con le versioni precedenti non è mantenuta perché le API sono ancora in versione alpha. (I39819) - Aggiunge API di strumenti per osservare la creazione di nuove composizioni all'interno di un Recomposer (Iaeb7e)
- È stato aggiunto
snapshotId
di tipoLong
aSnapshot
eid
è stato ritirato. L'ID di uno snapshot è passato daInt
aLong
per evitare che l'ID snapshot superi la capacità massima su sistemi con frequenze fotogrammi molto elevate e animazioni a lunga esecuzione. Il tipo è stato impostato su previsto/effettivo per consentire che siaInt
o di un altro tipo su piattaforme che non dispongono di un tipoLong
nativo. Le piattaforme che non dispongono di unLong
nativo, come JavaScript, devono evitare frequenze frame elevate (oltre 1000 FPS), che causerebbero un overflow perInt
ogni 24 giorni circa. (I38ac3, b/374821679)
Correzioni di bug
providesDefault
fisso per un singoloprovides
. (aosp/3318540 b/374263387)- Ottimizza
ChangeList
. (3318538)
Versione 1.8.0-alpha05
30 ottobre 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha05
viene rilasciato. La versione 1.8.0-alpha05 contiene questi commit.
Correzioni di bug
- Correggi l'overflow dello stack aggiungendo
Int.MAX_VALUE
aSnapshotIdSet
. (b/370536104, Ic4179f6) - Micro-ottimizzazioni di runtime (I50c60)
- Consenti a R8 di rimuovere le chiamate runtimeCheck di debug (I8c44)
- Rendi
compoundKeyOf
iterativo anziché ricorsivo (I5817f)
Contributo esterno
- Implementare gli stack con gli elenchi di raccolte (I7d47c)
Versione 1.8.0-alpha04
16 ottobre 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha04
viene rilasciato. La versione 1.8.0-alpha04 contiene questi commit.
Miglioramenti delle prestazioni
- Fornisci l'ID snapshot per i record dello stato nel costruttore (85c00f)
- Esegui il refactoring di
SnapshotState***
per evitare errori di verifica del corso (6ee4a6) - Correggere le regole R8 per impedire l'inserimento in linea di throw (5beb92)
- Micro-ottimizza le operazioni (d73c5c)
- Ottimizza le allocazioni di
SynchronizedObject
sulla JVM (2b043f)
Versione 1.8.0-alpha03
2 ottobre 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha03
viene rilasciato. La versione 1.8.0-alpha03 contiene questi commit.
Miglioramenti delle prestazioni
- Creare in modo lazy il contesto figlio per
rememberCoroutineScope
(f61464)rememberCoroutineScope
viene in genere utilizzato per avviare le coroutine in risposta agli eventi che si verificano dopo la composizione. In alcuni casi questi eventi potrebbero non verificarsi mai, con un conseguente aumento dei costi di creazione e annullamento dei job senza alcun vantaggio.- Fai in modo che l'ambito restituito da
rememberCoroutineScope
crei il propriocoroutineContext
in modo lazy quando viene eseguito l'accesso, evitando completamente la creazione e l'annullamento dei job se l'ambito non viene mai utilizzato.
Versione 1.8.0-alpha02
18 settembre 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha02
viene rilasciato. La versione 1.8.0-alpha02 contiene questi commit.
Nuove funzionalità
- È stato aggiunto
PausableComposition
che consente di creare una composizione secondaria che può essere messa in pausa durante la composizione e applicata in modo asincrono alla composizione. Per la messa in pausa è necessario il supporto del compilatore, che è attualmente in fase di sviluppo. (I3394b)
Versione 1.8.0-alpha01
4 settembre 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha01
viene rilasciato. La versione 1.8.0-alpha01 contiene questi commit.
Versione 1.7
Versione 1.7.5
30 ottobre 2024
androidx.compose.runtime:runtime-*:1.7.5
viene rilasciato. La versione 1.7.5 contiene questi commit.
Versione 1.7.4
16 ottobre 2024
androidx.compose.runtime:runtime-*:1.7.4
viene rilasciato. La versione 1.7.4 contiene questi commit.
Versione 1.7.3
2 ottobre 2024
androidx.compose.runtime:runtime-*:1.7.3
viene rilasciato. La versione 1.7.3 contiene questi commit.
Versione 1.7.2
18 settembre 2024
androidx.compose.runtime:runtime-*:1.7.2
viene rilasciato. La versione 1.7.2 contiene questi commit.
Versione 1.7.1
10 settembre 2024
- Nessuna modifica agli elementi Android. Sono stati rimossi
-desktop
elementi e aggiunti-jvmStubs
e-linuxx64Stubs
elementi. Nessuno di questi target è destinato all'uso, ma sono segnaposto per supportare le attività di JetBrains Compose.
Versione 1.7.0
4 settembre 2024
androidx.compose.runtime:runtime-*:1.7.0
viene rilasciato. La versione 1.7.0 contiene questi commit.
Modifiche importanti dalla versione 1.6.0
- È stata aggiunta la possibilità di fornire un locale della composizione calcolato in base ai valori di altri locali della composizione per impostazione predefinita, utilizzando
compositionLocalWithComputedDefault()
o fornendo una funzione lambda da utilizzare per calcolare il valore utilizzandoprovidesComputed
anzichéprovides
. - Il valore di un locale della composizione può essere ottenuto utilizzando la proprietà
currentValue
del locale della composizione accessibile dall'interno della funzione lambda che calcola il valore. Viene utilizzato al posto dicurrent
, che è accessibile solo nelle funzioni@Composable
. (Iadbc0) - Gli oggetti 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 le relative versioni primitive, è il valore passato come parametro amutableStateOf()
. Lo stato iniziale dimutableStateListOf()
emutableStateMapOf()
è vuoto. - Sono stati aggiunti
Snapshot.isInSnapshot
eSnapshot.PreexistingSnapshotId
, che vengono utilizzati per consentire a un oggetto stato di essere immediatamente accessibile dallo snapshot globale al momento della sua creazione. - Gli oggetti stato personalizzati possono essere immediatamente accessibili seguendo il pattern delle modifiche apportate agli oggetti istantanea incorporati. (I84a17)
- Attiva
nonSkippingGroupOptimization
per le librerie di composizione. In questo modo, il codice generato per tutte le funzioni composable non riavviabili in androidx è più efficiente. In futuro prevediamo di attivarla per impostazione predefinita. I(acbc08) - Annullare le lambda componibili nelle sottocomposizioni nello stesso frame. (98301c)
- Chiama il callback
onRelease
nello stesso ordine dionForgotten
. (2cd790) - Attivare la modalità di avanzamento veloce (ed1766)
- Rendere
currentCompoundHashKey
univoco in più casi (d4a872)
Versione 1.7.0-rc01
21 agosto 2024
androidx.compose.runtime:runtime-*:1.7.0-rc01
viene rilasciato. La versione 1.7.0-rc01 contiene questi commit.
Versione 1.7.0-beta07
7 agosto 2024
androidx.compose.runtime:runtime-*:1.7.0-beta07
viene rilasciato. La versione 1.7.0-beta07 contiene questi commit.
Versione 1.7.0-beta06
24 luglio 2024
androidx.compose.runtime:runtime-*:1.7.0-beta06
viene rilasciato. La versione 1.7.0-beta06 contiene questi commit.
Versione 1.7.0-beta05
10 luglio 2024
androidx.compose.runtime:runtime-*:1.7.0-beta05
viene rilasciato. La versione 1.7.0-beta05 contiene questi commit.
Versione 1.7.0-beta04
26 giugno 2024
androidx.compose.runtime:runtime-*:1.7.0-beta04
viene rilasciato. La versione 1.7.0-beta04 contiene questi commit.
Versione 1.7.0-beta03
12 giugno 2024
androidx.compose.runtime:runtime-*:1.7.0-beta03
viene rilasciato. La versione 1.7.0-beta03 contiene questi commit.
Versione 1.7.0-beta02
29 maggio 2024
androidx.compose.runtime:runtime-*:1.7.0-beta02
viene rilasciato. La versione 1.7.0-beta02 contiene questi commit.
Versione 1.7.0-beta01
14 maggio 2024
androidx.compose.runtime:runtime-*:1.7.0-beta01
viene rilasciato. La versione 1.7.0-beta01 contiene questi commit.
Versione 1.7.0-alpha08
1° maggio 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha08
viene rilasciato. La versione 1.7.0-alpha08 contiene questi commit.
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 un locale della composizione calcolato in base ai valori di altri locali della composizione per impostazione predefinita, utilizzando
compositionLocalWithComputedDefault()
o fornendo una funzione lambda da utilizzare per calcolare il valore utilizzandoprovidesComputed
anzichéprovides
. - Il valore di un locale della composizione può essere ottenuto utilizzando la proprietà
currentValue
del locale della composizione accessibile dall'interno della funzione lambda che calcola il valore. Viene utilizzato al posto dicurrent
, che è accessibile solo nelle funzioni@Composable
. (Iadbc0)
Modifiche all'API
- Gli oggetti 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 le relative versioni primitive, è il valore passato come parametro amutableStateOf()
. Lo stato iniziale dimutableStateListOf()
emutableStateMapOf()
è vuoto. - Sono stati aggiunti
Snapshot.isInSnapshot
eSnapshot.PreexistingSnapshotId
, che vengono utilizzati per consentire a un oggetto stato di essere immediatamente accessibile dallo snapshot globale al momento della sua creazione. - Gli oggetti stato personalizzati possono essere immediatamente accessibili seguendo il pattern delle modifiche apportate agli oggetti istantanea incorporati. (I84a17)
Correzioni di bug
- È stato corretto l'unione di
readObserver
negli snapshot nidificati. Ciò ha causato un'insufficiente invalidazione degli stati derivati nidificati quando utilizzati all'interno di unsnapshotFlow
. (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
- Correzione della gestione dei valori singoli
providesDefault
(538f45) - Evitare un deadlock nel Recomposer 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
- Cancellare le modifiche tardive 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 delle prestazioni
- Chiama
Snapshot.current
una volta per valutazione dello stato derivato (ee7daf) - Leggi
currentRecord
una volta per osservazione nella composizione (b882b2) - Rimuovere l'allocazione accidentale dell'iteratore in
snapshotFlow
(231e56) - Attiva
nonSkippingGroupOptimization
per le librerie di composizione. In questo modo, il codice generato per tutte le funzioni composable non riavviabili in androidx è più efficiente. In futuro prevediamo di attivarla 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 all'API
- Introduzione di gruppi di sostituzione per migliorare il rilevamento delle modifiche (0941b5)
Miglioramenti delle prestazioni
- Migliorare l'allocazione della memoria durante il rilevamento delle modifiche (53e7fd)
- Correzione di una perdita di memoria nel Composer (0e097d)
- Utilizza
ScopeMap
per passare le convalide durante la ricompozione (e19a7e) - Ottimizza la mappa degli invalidamenti in modo da conservare solo gli stati derivati (f11c44)
- Sostituire 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
- Annullare le lambda componibili nelle sottocomposizioni nello stesso frame. (98301c)
- Chiama il callback
onRelease
nello stesso ordine dionForgotten
. (2cd790) - Filtra gli stati modificati che non sono osservati in
snapshotFlow
. (796b80)
Miglioramenti delle prestazioni
- Modifica l'osservatore istantaneo in situ 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
- Aggiunta la possibilità di creare slot dopo aver aggiunto un gruppo secondario (b5960c)
- Ottimizzare la registrazione delle modifiche degli stati degli snapshot (28c3fe)
- Attivare la modalità di avanzamento veloce (ed1766)
Correzioni di bug
- Tenere conto del meta parametro predefinito nella funzionalità di memorizzazione nella cache intrinseca (096665)
- Rendere
currentCompoundHashKey
univoco in più casi (d4a872) - Realizzare gruppi quando si esce dalla chiamata di funzione in linea (2a90fc)
Versione 1.6
Versione 1.6.8
12 giugno 2024
androidx.compose.runtime:runtime-*:1.6.8
viene rilasciato. La versione 1.6.8 contiene questi commit.
Versione 1.6.7
1° maggio 2024
androidx.compose.runtime:runtime-*:1.6.7
viene rilasciato. La versione 1.6.7 contiene questi commit.
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 dionForgotten
. (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à
- Rilasciare nuovamente le eccezioni assorbite durante il loop di ricompozione (4dff9a)
Ottimizzazioni del rendimento
- Ottimizzare la registrazione delle modifiche degli stati degli snapshot (28c3fe)
- Ottimizza
rememberSaveable
(f01d79) - Rimandare la rilettura degli stati derivati fino a quando le modifiche non vengono registrate (f38099)
- Migliorare la fornitura di valori locali della composizione (a337ea)
Correzioni di bug
- Correzione della perdita di memoria della tabella delle posizioni (73fcfe)
- Salta la ricompozione delle sottocomposizioni che verranno rimosse. (Ieeb99, b/254645321)
- Attiva i cicli di vita di
RememberObserver
solo quando sono memorizzati nel calcolo di Remember. (f6b4dc) - Limita la cattura di
$dirty
ai lambda in linea. (acfca0) - Correzione del problema per cui i contenuti spostabili a volte ricevevano le lingue di composizione sbagliate. (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 all'API
- Propaga determinati valori di stabilità nell'annotazione. (274a4c)
Correzioni di bug
- Utilizza il criterio di riferimento per lo stato dell'ambito locale della composizione nel contesto. (83361c)
- Limita la cattura di $dirty alle lambda in linea. (acfca0)
- Correzione del problema per cui i contenuti spostabili a volte ricevevano le lingue di composizione sbagliate. (035cd6)
- Utilizza mappe hash non allocanti più veloci in
RecomposeScopeImpl
. (d79494) - Usa
ObjectIntMap
inDerivedState
. (21862e) - Utilizza
IntRef
per intSnapshotThreadLocal
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 i cicli di vita di
RememberObserver
solo quando sono memorizzati nel calcolo di Remember. (f6b4dc) - Miglioramento delle allocazioni nell'ordinamento dell'elenco delle invalidazioni. (954d63)
- Utilizza le nuove mappe non allocative in
SnapshotStateObserver
. (4303ce) - Cancella le convalide quando la composizione viene 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 all'API
SnapshotStateList
ora è contrassegnato comeRandomAccess
per consentire l'utilizzo della versione di indicizzazione diretta degli aiuti per gli elenchi. (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à
- Rilasciare nuovamente le eccezioni assorbite durante il loop di ricompozione (4dff9a)
Modifiche all'API
- È stato aggiunto un metodo per disattivare
ReusableComposition
, rimuovendo le osservazioni, ma mantenendo invariati i nodi. La composizione disattivata può essere riattivata chiamandosetContent
. (Ib7f31) - Aggiungi l'interfaccia
ReusableComposition
per gestire il 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
- Correzione della nuova ottimizzazione
CompositionLocalProvider
(3118e88) - Correggi il modo in cui i nodi dei contenuti mobili vengono smontati. (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 del rendimento
- Ottimizza
rememberSaveable
(f01d79) - Rimandare la rilettura degli stati derivati fino a quando le modifiche non vengono registrate (f38099)
- Migliorare la fornitura di valori locali della composizione (a337ea)
SideEffect
è contrassegnato come@ExplicitGroupsComposable
per evitare la generazione di un gruppo. (I74815)- Evitare di confrontare le mappe locali della composizione al riutilizzo (782071)
Modifiche all'API
- È stato aggiunto un sovraccarico per casi speciali per
CompositionLocalProviders
che evita il sovraccarico utilizzato per velocizzare la fornitura di più valori, ma che rappresenta un sovraccarico quando viene fornito un singolo valore. (I6d640, b/288169379)
Correzioni di bug
- Correzione della perdita di memoria della tabella delle posizioni (73fcfe)
- Correggere il modo in cui viene ripristinato
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 ricompozione delle sottocomposizioni che verranno rimosse. (Ieeb99, b/254645321)
- Riduci le allocazioni quando applichi gli snapshot. (I65c09)
- Evitare 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 all'API
- Sono state rimosse le allocazioni in rielaborazioni, animazioni a colori e
AndroidComposeView
. (Ib2bfa) - È stata aggiunta un'annotazione
@StateFactoryMarker
per contrassegnare le funzioni che creano stati e devono essere racchiuse in una chiamataremember
. (I64550) - Aggiunta di versioni primitive di Stato e
MutableState
(fb3d89) - Aggiunto
Snapshot.isApplyObserverNotificationPending
(I672a5) - Sono state aggiunte versioni primitive dell'API
State
, che consentono di monitorare i valori Int, Long, Float e Double negli oggettiState
senza incorrere in penalità per l'autoboxing. Per utilizzarli, usa i nuovi metodi di fabbricamutableIntState(Int)
,mutableFloatStateOf(Float)
e così via. (I48e43)
Correzioni di bug
- Salta la ricompozione delle sottocomposizioni che verranno rimosse. (Ieeb99, b/254645321)
- Non conservare il riferimento allo snapshot in
ComposerImpl
(0206f7) - Non applicare la composizione due volte (f5791b)
- Garantire l'invalidazione per i valori dello stato derivato non inizializzati (aa2a92)
- Chiama
onEndChanges
durante lo smaltimento della composizione. (62cc8c) - Correzione dello spostamento dei contenuti in una composizione secondaria (4beb41)
- Risolvere potenziali deadlock (c1a425 e 8edce0)
- Ora il ricostruttore creato per una finestra Android bloccherà solo le chiamate a
withFrameNanos
anziché a tutte le composizioni quando riceve una notifica ON_STOP. Ciò significa che le finestre associate alle attività interrotte continueranno a ricomporsi per le modifiche dei 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 - Correggi i flag modificati per i lambda riavviati ea81df9
- Correzione della regressione della modifica in tempo reale per i componenti composibili con nodi 73fd4d8
- ON_STOP dovrebbe mettere in pausa le trasmissioni dell'orologio del frame anziché della composizione ae276f1
- Annullare l'aggiornamento degli ambiti
SnapshotStateObserver
per gli stati derivati invariati 84d9b1c - Correzione di un potenziale blocco quando si eliminano le composizioni 28761fc
- Correggere lo spostamento dei contenuti in una composizione secondaria 92d4156
- Correggere i flag modificati per i lambda riavviati (8a03e9)
- Esegui i callback di disattivazione per
LayoutNode
prima di eliminare gli effetti (8b0fa4) - Correggi
endToMarker()
al termine dei gruppi di nodi. (d71d980) - Utilizza il gruppo
SlotWriter
corrente per il controllo della disattivazione (a0b518b) - Rimuovi
fill
inSlotTable.moveSlotGapTo()
e spostalo in chiusura (81f9935) - Correggere le convalide mancanti durante lo spostamento dei contenuti spostabili (1d7c024)
- Correggere le invalidazioni immediate per i contenuti spostabili spostati (8676618)
Miglioramenti delle prestazioni
- Evita di calcolare
readableHash
inDerivedState
se lo snapshot non è stato modificato. (307102) - Allocazioni ridotte (I65c09, d7ea77, 727974 e 445808)
- Annullamento rapido della composizione
CoroutineScopes
(a55362 e bd382f) - Sovrascrivi i record degli oggetti stato con record di stato inaccessibili (c986960)
- Utilizza il compositore dell'ambito corretto quando realizzi i gruppi (9a5e5b6)
- Utilizza
IdentityArraySet
per memorizzare gli invalidamenti degli snapshot (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
Rimandare la rilettura degli stati derivati fino a quando le modifiche non vengono registrate (f38099)
È disponibile un'ispezione facoltativa per consigliare la migrazione delle chiamate
mutableStateOf()
ai tipi specializzati corrispondenti per le primitive. Il relativo ID lint èAutoboxingStateCreation
. In precedenza, questa ispezione era attiva per impostazione predefinita per tutti i progetti. Per visualizzare questo avviso nell'editor di Android Studio e negli output di lint del progetto, modifica 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 ricompozione 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 delle prestazioni
- 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 all'API
- Sono state rimosse le allocazioni in ricreazione, animazioni a colori e
AndroidComposeView
(Ib2bfa) - È stata aggiunta un'annotazione
@StateFactoryMarker
per contrassegnare le funzioni che creano stati e devono essere racchiuse in una chiamataremember
. (I64550) - Aggiunta di versioni primitive di Stato e
MutableState
(fb3d89) - Aggiunto
Snapshot.isApplyObserverNotificationPending
(I672a5)
Correzioni di bug
- Allocazioni ridotte (I65c09, d7ea77, 727974 e 445808)
- Non conservare il riferimento allo snapshot in
ComposerImpl
(0206f7) - Annullamento rapido della composizione
CoroutineScopes
(a55362 e bd382f) - Non applicare la composizione due volte (f5791b)
- Garantire l'invalidazione per i valori dello stato derivato non inizializzati (aa2a92)
- Chiama
onEndChanges
durante lo smaltimento della composizione. (62cc8c) - Correzione dello spostamento dei contenuti in una composizione secondaria (4beb41)
- Risolvere potenziali deadlock (c1a425
- ON_STOP dovrebbe mettere in pausa le trasmissioni dell'orologio del frame anziché della composizione (f4a2d1)
- Correggere i flag modificati per i lambda riavviati (8a03e9)
- Esegui i callback di disattivazione per
LayoutNode
prima di eliminare gli effetti (8b0fa4)
Contributo esterno
- 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 all'API
- Sono state aggiunte versioni primitive dell'API
State
, che consentono di monitorare i valori Int, Long, Float e Double negli oggettiState
senza incorrere in penalità per l'autoboxing. Per utilizzarli, usa i nuovi metodi di fabbricamutableIntState(Int)
,mutableFloatStateOf(Float)
e così via. (I48e43)
Correzioni di bug
Chiama
onEndChanges
durante lo smaltimento della composizione. I nodi di messa a fuoco rimossi duranteComposition.dispose
si stanno iscrivendo aonEndChanges
per reimpostare la messa a fuoco.(03d4a47)Assicurati l'invalidazione per i valori di stato derivati non inizializzati. Ogni stato derivato è associato a un elenco delle relative dipendenze in
SnapshotStateObserver
, utilizzato per invalidare gli ambiti associati allo stato derivato ogni volta che la dipendenza cambia. La modifica della dipendenza viene registrata durante l'avanzamento dello snapshot, il 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
ripuliva le vecchie dipendenze e poi leggeva il nuovo valore. Ciò ha comportato una condizione di gara con convalida in uno stato pulito, in cui la convalida delle dipendenze non è stata registrata.Questa modifica riordina la lettura dello stato derivato e la pulizia delle dipendenze, garantendo che l'invalidazione 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 all'API
- Ora il ricostruttore creato per una finestra Android bloccherà solo le chiamate a
withFrameNanos
anziché a tutte le composizioni quando riceve una notifica ON_STOP. Ciò significa che le finestre associate alle attività interrotte continueranno a ricomporsi per le modifiche dei dati, ma le animazioni o qualsiasi altro chiamante diwithFrameNanos
verranno bloccate. (Id9e7f, b/240975572)
Correzioni di bug
- Correzione di un potenziale deadlock nell'elenco e nella mappa degli snapshot 5c1a425
- Esegui i callback di disattivazione per
LayoutNode
prima di eliminare gli effetti 3784073 - Correggi i flag modificati per i lambda riavviati ea81df9
- Correzione della regressione della modifica in tempo reale per i componenti composibili con nodi 73fd4d8
- ON_STOP dovrebbe mettere in pausa le trasmissioni dell'orologio del frame anziché della composizione ae276f1
- Annullare l'aggiornamento degli ambiti
SnapshotStateObserver
per gli stati derivati invariati 84d9b1c - Correzione di un potenziale blocco quando si eliminano le composizioni 28761fc
- Correggere lo spostamento dei contenuti in una composizione secondaria 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à
- Ora l'operatore
getValue
di Kotlin può essere componibile (f174f6e)
Correzioni di bug, miglioramenti delle prestazioni
- Sovrascrivi i record degli oggetti stato con record di stato inaccessibili (c986960)
- Utilizza il compositore dell'ambito corretto quando realizzi i gruppi (9a5e5b6)
- Correggi
endToMarker()
al termine dei gruppi di nodi. (d71d980) - Utilizza il gruppo
SlotWriter
corrente per il controllo della disattivazione (a0b518b) - Utilizza
IdentityArraySet
per memorizzare gli invalidamenti degli snapshot (7f60cca) - Rimuovi
fill
inSlotTable.moveSlotGapTo()
e spostalo in chiusura (81f9935) - Correggere le convalide mancanti durante lo spostamento dei contenuti spostabili (1d7c024)
- Correggere le invalidazioni immediate per i contenuti spostabili 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 le 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
Correggere un potenziale deadlock nell'elenco e nella mappa degli snapshot 2eb6570
L'aggiunta di contenuti a un
SnapshotStateList
o a unSnapshotStateMap
può causare un deadlock se la modifica è contemporanea a una scrittura diretta nel record dello stato. Questa situazione è diventata molto più probabile con le modifiche introdotte da 93fcae828b che utilizza le scritture dirette per rilasciare i record inutilizzati.Ora i blocchi sono ordinati in modo che non venga mai tentato di acquisire un blocco istantataneo quando è attivo un blocco di 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()
alla fine dei 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
- Utilizza il valore inizializzato da
LiveData
per la prima composizione 3680e25 - Aggiungi
ComposeNodeLifecycleCallback
per osservare il ciclo di vita dei nodi di composizione. 8b6a258 - Aggiungi la proprietà
parameterTypes
aComposableMethod
7b6c7ad
Correzioni di bug e miglioramenti delle prestazioni
- Cancella entrambi gli indici di ambito in
SnapshotStateObserver
29f4a3e - Aggiungi i gruppi necessari nel corpo delle lambda non ignorabili 7d06752
- Migliorare le caratteristiche del riferimento in memoria dello stato Snapshot 93fcae8
- Rimuovere le caselle nelle ricerche locali della composizione 0875717
- Utilizza la chiave corretta per i gruppi di nodi non riutilizzabili 6388d8d
- Proteggere
SnapshotStateObserver
dalle applicazioni ricorsive e concorrenti 98cb6ba - È stato aggiunto un controllo dei limiti dell'indice nel metodo "get" di
IdentityArraySet
35a77d3 - Aggiorna il modulo di composizione per utilizzare le estensioni
ViewTreeLifecycleOwner
21c2122 - Invia notifiche di applicazione dopo che Recomposer ha completato il frame. 98f2641
- Correzione dell'arresto anomalo di indice fuori intervallo durante l'annullamento del ricompilatore 8f8656f
- Forza sempre la ricomposione se i provider principali della composizione sono cambiati 9526fcc
- Tolleranza del ricostruttore per i job annullati a55f7ed
- Migliora la gestione delle invalidazioni per un numero elevato di compositori 9b7ed67
- Correzione della generazione di gruppi di chiusura per i ritorni 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 all'API
- È stato aggiunto
ComposeNodeLifecycleCallback
, che consente di osservare il ciclo di vita dei nodi Compose (I3731b) - È stata aggiunta
@TestOnly
aComposer.disableSourceInformation()
perché questa funzione è sicura da chiamare solo in un test. (I896c8)
Correzioni di bug
- Rimuovere le caselle nelle ricerche locali delle composizioni (62f66a)
- Migliorare le caratteristiche di riferimento della memoria dello stato 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 all'API
- Più tipi/valori null delle funzioni in linea/nascoste ritirate (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 all'API
TestMonotonicFrameClock
ora utilizza l'annotazione sperimentale corretta. (I95c9e)
Correzioni di bug
- Proteggere
SnapshotStateObserver
dalle applicazioni ricorsive e concorrenti (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 all'API
- aggiunta di un nuovo metodo pubblico alla classe
ComposableMethod
analogo ajava.lang.reflect.Method#getParameterTypes()
(Iab0c3)
Correzioni di bug
- Le notifiche di applicazione degli snapshot 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 all'API
SnapshotStateList
eSnapshotStateMap
ora hanno implementazioni esplicite ditoList()
etoMap()
, rispettivamente. Questi metodi restituiscono i contenuti correnti senza eseguire una copia, poiché restituiscono i dati interni immutabili utilizzati per archiviarli. 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
- Aggiornamento per il supporto di 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 / supporto della modifica in tempo reale
- 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 rapido
- Gestire gli errori di modifica in tempo reale al salvataggio/ripristino
Tracciamento della composizione
- Sono state aggiunte API di monitoraggio del runtime per supportare i nuovi strumenti di monitoraggio della composizione
- Generare chiamate di inizio/fine evento traccia componibile
- È stato aggiunto di nuovo ComposerKt.traceEventStart(Int, String)
API di riflessione composable
- È stata aggiunta una nuova API
ComposableMethod
per consentire invocazioni basate su riflessioni più affidabili delle API componibili. - Spostare invokeComposable nel runtime di composizione
- Ristrutturare l'API per invocare il metodo composable
Correzioni di runtime
- Correzione del test di intervallo errato per il controllo della tabella delle posizioni per gli indicatori
- Consentire ai contenuti spostabili di spostarsi all'interno e all'esterno di SubcomposeLayout
- Correggere lo spostamento dei contenuti in nuovi contenuti di una composizione secondaria
Sistema di snapshot
- Il sistema di istantanee ha ricevuto vari miglioramenti relativi alla gestione della memoria, alle prestazioni e alla correttezza.
- Ottimizzare la rimozione dell'ambito in SnapshotStateObserver
- Eliminare gli snapshot nidificati creati da snapshot trasparenti
- È stata corretta la condizione di gara durante la lettura dello stato dallo snapshot globale
- Supporto di DerivedState in SnapshotStateObserver
- Impedire la rimozione dello stato derivato dalla composizione quando viene letto in altri ambiti
- Utilizzare IdentityArrayMap anziché HashMap all'interno di DerivedState
- Aggiornare gli osservatori dello stato derivato per utilizzare un vettore mutabile
- Aggiorna la pulizia dello stato di SnapshotStateObserver
- Sostituire SnapshotStateObserver.invalidated con ArraySet
- È stata corretta la condizione di gara durante la lettura dello stato dallo snapshot globale
- Correggere l'utilizzo di un record obsoleto nel calcolo dell'hash di DerivedState
- Correzione della condizione di gara durante l'avanzamento dello snapshot globale
- Velocizzare la pulizia delle osservazioni dell'ambito in SnapshotStateObserver
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
- È stato corretto il problema relativo a
ArrayIndexOutOfBoundsException
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.
Modifica che comporta un cambiamento nel comportamento
- Il parametro
remember
erememberCoroutineScope
è stato modificato incrossinline
. Verrà segnalato un errore per i ritorni anticipati anziché consentire un ritorno anticipato che causerà la segnalazione di un errore interno successivo. - Questa modifica può potenzialmente portare alla segnalazione di nuovi errori del compilatore che richiedono la rimozione dei ritorni non locali dalle lambda passate 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 all'API
- A
CompositionData
è stato aggiunto un metodofind
per consentire agli strumenti per sviluppatori che utilizzano questa API di trovare rapidamente un sottogruppo di composizione utilizzando la relativa 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 all'API
ComposerKt.traceEventStart(Int, String)
è stato aggiunto di nuovo 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 all'API
- Spostamento della funzionalità di utilità nel 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
- È stata corretta una perdita di memoria: smaltimento degli 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 visto l'introduzione di alcune funzionalità nella versione 1.2.0, oltre a molte correzioni di bug per la stabilità. La nuova funzionalità più significativa è stata l'introduzione dell'API
movableContentOf
, che può essere utilizzata per abilitare UX complesse come le transizioni degli elementi condivisi. L'APImovableContentOf
converte una funzione lambda componibile in una funzione lambda che sposta il relativo stato e i nodi corrispondenti in qualsiasi nuova posizione in cui viene chiamata. Quando la chiamata precedente esce dalla composizione, lo stato viene conservato temporaneamente 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 nessuna nuova chiamata, lo stato viene rimosso definitivamente e gli osservatori vengono avvisati.Se una funzione lambda
movableContentOf
viene chiamata più volte nella stessa composizione, vengono creati nuovi stati e nodi per ogni chiamata e, quando le chiamate escono dalla composizione e ne vengono inserite di nuove, lo stato viene spostato dalle prime chiamate in uscita alle chiamate in entrata nell'ordine in cui vengono chiamate. Tutti gli stati non rivendicati da nuove chiamate vengono rimossi definitivamente.Oltre a questa e ad altre nuove funzionalità, è stato impiegato molto tempo per stabilizzare il sistema di stato di runtime e snapshot. Sono state rimosse varie perdite di memoria e sono stati ottimizzati i percorsi di codice.
Di seguito è riportato un elenco riepilogativo delle modifiche:
Nuove funzionalità in 1.2
- Aggiungere lo snapshot sperimentale unsafeEnter/Leave
- Aggiunta dell'API sperimentale Snapshot.asContextElement
- Introduzione a Snapshot.withoutReadObservation
- Consentire lo spostamento dello stato all'interno di una composizione
- Monitoraggio delle ricostruzioni in Componi
Rendimento in 1.2
- Migliorare il rendimento locale della composizione
- I profili di riferimento per la composizione devono essere ricavati utilizzando i benchmark
Correzioni di bug in 1.2
- Rimuovere le informazioni di monitoraggio dagli ambiti di ricompozione delle release
- Impedire la rimozione dello stato derivato dalla composizione quando viene letto in altri ambiti
- Utilizzare removeScope() più efficiente in SnapshotStateObserver
- Eseguire la pulizia delle dipendenze degli stati derivati nella composizione
- Correzione della modifica di currentCompositeKeyHash dopo la ricompozione interna all'interno dei contenuti mobili
- Eseguire la pulizia delle composizioni non convalidate durante lo smaltimento
- Correzione della lettura dello stato derivato durante la ricostituzione
- Correzione di una perdita di memoria durante l'osservazione degli oggetti di stato derivati
- È stata corretta la chiave hash composita movableContent per garantire la coerenza
- Correzione di un caso in cui il compositore si arrestava in modo anomalo
- Verificare che l'invalidazione forzata di un gruppo forzi la ricostituzione
- Correzione di un bug relativo al ripristino in ordine errato di rememberSaveable con input
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
- In precedenza, le osservazioni dello stato derivato venivano rimosse incondizionatamente dall'ambito di ricompozione e dalla composizione, il che causava un malfunzionamento di altri ambiti che potrebbero ancora osservare lo stato derivato. Questa modifica rimuove le istanze di stato derivate solo se non sono più osservate 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 all'API
- Le interfacce nelle librerie di composizione ora vengono create utilizzando i metodi di interfaccia predefiniti di 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 release beta di 1.2.
Modifiche all'API
- È stato aggiunto
Snapshot.unsafeEnter/unsafeLeave
sperimentale (I108f3) - È stata aggiunta l'API
Snapshot.asContextElement()
sperimentale (Iff072) - L'annotazione
@ComposableTarget
e le annotazioni contrassegnate da@ComposableTargetMarker
ora possono essere utilizzate nell'ambito del file utilizzando il prefisso@file
. L'utilizzo di un'annotazione target a livello di ambito del file fa sì che il compilatore presuma che tutte le funzioni composable nel file siano destinate a essere il target dell'applicante associato. Ad esempio, l'utilizzo di@file:UiComposable
dichiara che tutte le funzioni@Composable
hanno come target l'applicatore dell'interfaccia utente di Compose. Una funzione che deve avere come target un altro applicatore deve fornire esplicitamente l'annotazione dell'indicatore target 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 all'API
TracingInProgress
è stato aggiunto all'interfacciaCompositionTracer
. (Ic6f12)- Aggiungere
recomposeScopeIdentity
a Composer (I0c873) - API di monitoraggio limitate (Composer.setTracer) a
OptIn(InternalComposeTracingApi)
. (I9187f) - È stato aggiunto
ResuableContentHost
, che consente un maggiore controllo sulla durata dello stato creato per i contenuti riutilizzabili. Ad esempio, se una composizione secondaria non è temporaneamente in uso, i contenuti possono essere disattivati e tutto lo stato memorizzato nella composizione viene dimenticato, 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 all'API
- È stata aggiunta la nuova funzione
Snapshot.withoutReadObservation { ... }
. Consente agli utenti di eseguire la funzione lambda passata senza iscriversi alle modifiche dei valori dello stato letti durante questo blocco. Potrebbe essere utile nei casi in cui vuoi usufruire delle letture/scritture sicure per i thread basate su snapshot, ma vuoi essere in grado di leggere il valore senza causare ricostruzioni o rimisure non necessarie. (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.
Contributo esterno
- Aggiornamento per l'utilizzo di 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 all'API
Sono stati aggiunti
ComposableTarget
,ComposableTargetMarker
eComposableOpenTarget
che consentono di generare report in fase di compilazione quando viene chiamata una funzione componibile che ha come target un applicatore per il quale non è stata progettata.Nella maggior parte dei casi, le annotazioni possono essere dedotte dal plug-in del compilatore di compose, 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 composable astratte (come metodi di interface), campi o variabili globali che sono lambda composable (le variabili e i parametri locali vengono dedotti), o quando si utilizza
ComposeNode
o una funzione composable correlata.Per gli applicatori personalizzati, le funzioni composable che chiamano
ComposeNode
oReusableComposeNode
devono aggiungere un'annotazioneCompoableTarget
per la funzione e per eventuali tipi di parametri lambda composable. Tuttavia, è consigliabile creare un'annotazione annotata conComposableTargetMarker
e poi utilizzare l'annotazione contrassegnata anzichéComposableTarget
direttamente. Un'annotazione componibile contrassegnata conComposableTargetMarker
è equivalente a unComposbleTarget
con il nome completo della classe dell'attributo come parametro dell'applicatore. 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 all'API
È stata aggiunta
movableContentOf
, che converte una funzione lambda componibile in una funzione lambda che sposta il relativo stato e i relativi nodi in qualsiasi nuova posizione in cui viene chiamata. Quando la chiamata precedente esce dalla composizione, lo stato viene conservato temporaneamente 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 gli osservatori vengono informati.Se una funzione lambda
movableContentOf
viene chiamata più volte nella stessa composizione, vengono creati nuovi stati e nodi per ogni chiamata e, quando le chiamate escono dalla composizione e ne vengono inserite di nuove, lo stato viene spostato dalle prime chiamate in uscita alle chiamate in entrata nell'ordine in cui vengono chiamate. Tutti gli stati non rivendicati da nuove chiamate vengono rimossi permanentemente. (Ib4850)È stata aggiunta un'API di monitoraggio alla composizione per consentire agli strumenti di fornire un monitoraggio più dettagliato delle funzioni componibili. Ora il compilatore genera chiamate all'API di monitoraggio che includono informazioni sulle origini. (Ib0eb5)
Per rimuovere queste chiamate e le informazioni di origine associate da una release build, aggiungi la seguente regola 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 composable durante le ricostruzioni. (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 all'API
- È stato aggiunto il campo
identity
aCompositionData
per generare ID invariati nell'ispettore layout. (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
il giornoandroidx.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)
- È stato corretto il problema relativo alla formattazione RTL 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 overscroll di Android 12
- Miglioramenti alle dimensioni dei target di tocco
- Tieni presente che, rispetto a Compose 1.0, i componenti Material espanderanno lo spazio del layout per soddisfare 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 imposti una dimensione inferiore per il pulsante. In questo modo, Compose Material si allinea allo stesso comportamento dei componenti di Material Design, garantendo un comportamento coerente se combini le viste e Compose. Questa modifica garantisce inoltre che, quando crei l'interfaccia utente utilizzando i componenti Material di Compose, vengano soddisfatti i requisiti minimi per l'accessibilità dei touch target. - Supporto stabile per la barra di navigazione laterale
- Passa a una versione stabile un certo numero di API precedentemente sperimentali
- Supporto per le 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 il supporto di Compose Material
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à
- Aggiornata 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 all'API
- Il codice dello snapshot è stato suddiviso in più file, ma tutti rimangono 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 all'API
- È stato rimosso
InternalCompilerApi
dai metodi Composer che devono essere chiamati tra moduli (I1aa0b) Recomposer.state
è stato ritirato e sostituito daRecomposer.currentState
per modificarne il 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 Compose era compatibile solo con il runtime Compose della stessa versione o successiva. Dopo questa modifica, il compilatore Compose è compatibile con una versione precedente del runtime Compose (1.0). (aosp/1796968)
- Compose
1.1.0-alpha03
è stato aggiornato in modo da dipendere 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
- È stato corretto un arresto anomalo durante il monitoraggio delle istanze derivedStateOf. (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
- Aggiornata per 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
- Aggiornata per 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.
Aggiornamento 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
- Aggiornata per dipendere 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. Per ulteriori dettagli, consulta il blog ufficiale relativo al rilascio di Compose.
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 o versioni successive 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 SnapshotStateObserver che causavano NullPointerExceptions irregolari. (aosp/1763445, aosp/1758105, b/192677711)
- Sono stati risolti i problemi relativi agli snapshot di runtime che causavano arresti anomali 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
Questa release aggiunge 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.material
- androidx.compose.material-ripple
- androidx.compose.runtime
- androidx.compose.ui
- androidx.compose.ui.geometry
- androidx.compose.ui.graphics
- androidx.compose.ui.text
- androidx.compose.ui.text
- androidx.compose.ui.unit
- androidx.compose.ui.util
Che cosa sono le regole del profilo?
Le regole del profilo per una raccolta sono specificate in un file di testo
baseline-prof.txt
situato nella directorysrc/main
o equivalente. Il file specifica una regola per riga, dove una regola in questo caso è un pattern per la corrispondenza a metodi o classi nella libreria. La sintassi di queste regole è un superset del formato del profilo ART leggibile da persone che viene utilizzato quando si utilizzaadb shell profman --dump-classes-and-methods ...
. Queste regole possono assumere una di due forme per scegliere come target metodi o classi.Una regola del metodo avrà il seguente pattern:
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
Una regola della classe avrà il seguente pattern:
<CLASS_DESCRIPTOR>
Qui
<FLAGS>
è uno o più dei caratteriH
,S
eP
per indicare se questo metodo deve essere contrassegnato 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 di ritorno del metodo. Ad esempio, il metodofun isPlaced(): Boolean
inLayoutNode
ha la firmaisPlaced()Z
.Questi pattern possono contenere caratteri jolly (
**
,*
e?
) per consentire a una singola regola di includere più metodi o classi.
A cosa servono le regole?
Un metodo con il flag
H
indica che si tratta di un metodo "hot" e deve essere compilato in anticipo.Un metodo che ha il flag
S
indica che si tratta di un metodo chiamato all'avvio e deve essere compilato in anticipo per evitare il costo della compilazione e dell'interpretazione del metodo all'avvio.Un metodo con il flag
P
indica che si tratta di un metodo chiamato dopo l'avvio.Una classe presente in questo file indica che viene utilizzata durante l'avvio e deve essere preallocata nell'heap per evitare il costo del caricamento della classe.
Come funziona?
- Le librerie possono definire queste regole che verranno pacchettizzate negli elementi AAR. Quando viene compilata un'app che include questi elementi, le regole vengono unite e utilizzate per creare un profilo ART binario compatto specifico per l'app. ART può quindi sfruttare questo profilo quando l'app è installata sui dispositivi per compilare in anticipo un sottoinsieme specifico dell'applicazione al fine di migliorare il rendimento dell'applicazione, in particolare la prima esecuzione. Tieni presente che questo non avrà alcun effetto sulle applicazioni di 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 all'API
State<T>
è diventatoState<out T>
(I69049)- Modifica dell'API
ControlledComposition
per abilitare le modifiche di ricomposiz ione in un singolo passaggio di ricomposiz ione. (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 all'API
- Sono state aggiunte nuove API del compilatore di composizione che consentono di rimuovere le informazioni sulle origini generate dal compilatore durante la minimizzazione del codice sorgente. (Ia34e6)
Viene introdotto
ReusableContent
, che tenterà di riutilizzare i nodi nei relativi contenuti anziché 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 aggiornarli.Viene introdotto
ReusableComposeNode
, che riutilizza il nodo emesso anziché sostituirlo come avviene perComposeNode
. (I1dd86)@ComposeCompilerApi
non è più@RequiresOptIn
(Iab690)
Correzioni di bug
- Ora LazyColumn/Row manterrà attivi (non eliminati) fino a 2 elementi precedentemente visibili anche quando non sono visibili. In questo modo, il componente può riutilizzare le sottocomposizioni attive quando dobbiamo comporre un nuovo elemento, il che migliora le prestazioni di 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 all'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 all'API
@InternalComposeApi
rimosso per la registrazione delle letture e delle scritture degli snapshot (Id134d)
Correzioni di bug
- I file AndroidManifest di ui-test-manifest e ui-tooling-data ora sono 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 composable locali erano ignorabili in base ai relativi parametri. Dopo questa modifica, nessuna funzione composable locale verrà saltata. Questa modifica viene apportata perché è normale e previsto che le funzioni locali acquisiscano i parametri dall'elemento principale e il loro salto è una fonte comune di bug.
Per riepilogare, 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 composable
ShowCount
veniva sempre ignorata, anche dopo l'aggiornamento del parametrocount
. Abbiamo deciso, tuttavia, di non dare seguito a questa misura. (I5648a)È stato risolto il problema relativo al ripristino del vecchio valore di
rememberSaveable()
quando 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 all'API
DefaultMonotonicFrameClock
è deprecato. La chiamata awithFrameNanos
oRecomposer.runRecomposeAndApplyChanges
senzaMonotonicFrameClock
ora genera un erroreIllegalStateException
. (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 limitazioni all'utilizzo pubblico delle API sperimentali (I6aa29, b/174531520)
- Correzione del problema relativo a
rememberSaveable { mutableStateOf(0) }
quando viene utilizzato all'interno di una destinazione di navigazione-composizione. (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 all'API
- Aggiungi l'
Recomposer.runRecomposeConcurrentlyAndApplyChanges
API sperimentale per ricomporre le composizioni non valide al di fuori del loop del frame principale. (I342d0) - Tutti i composabili contrassegnati con @ReadOnlyComposable ora vengono convalidati in fase di compilazione per garantire che effettuino chiamate solo ad altri @ReadOnlyComposable (I58961)
Il valore
defaultFactory
percompositionLocalOf
estaticCompositionLocalOf
ora è obbligatorio anziché facoltativo.Queste modifiche rimuovono un potenziale errore di tipo per i tipi non nulli in cui non è stata fornita una fabbrica predefinita. In precedenza, questo forniva un riferimento null per un tipo non null.
Per i tipi nullable, ti consigliamo di fornire
{ null }
come factory predefinita.Sconsigliamo di utilizzare variabili locali con tipi non null se non è possibile fornire un valore predefinito ragionevole. Se non esiste un valore predefinito ragionevole, la funzione lambda
defaultFactory
deve generare un'eccezione. Tuttavia, se viene lanciata un'eccezione, i consumatori della locale avranno una dipendenza implicita dalla sua indicazione che non viene applicata dal sistema di tipi. (Ifbd2a)I simboli obsoleti sono stati rimossi dal runtime di composizione (I3252c)
La risorsa deprecata
emptyContent()
è stata rimossa. Utilizza invece{}
. (Idb33f, b/179432510)Providers è stato rinominato in CompositionLocalProvider
- Il costruttore Composition non accetta più un parametro chiave ed è stato ritirato.
- currentCompositeKeyHash è stata trasformata in una proprietà di primo livello componibile anziché in una funzione di primo livello componibile.
- CompositionData e CompositionGroup sono stati spostati nello spazio dei nomi androidx.compose.runtime.tooling
- ComposableLambda è stata creata come interfaccia anziché come classe concreta e non ha più parametri di tipo.
- ComposableLambdaN è stata creata come interfaccia anziché come 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 clearRoots di primo livello @TestOnly è stata rimossa. Non è più necessario.
- Le funzioni keySourceInfoOf e resetSourceInfo sono state rimosse. Non sono più necessari.
- La funzione Composer.collectKeySourceInformation è stata rimossa. Non è più necessario.
- I metodi isJoinedKey, joinedKeyLeft e joinedKeyRight sono stati rimossi. Non sono più necessari.
- Diverse API di primo livello sono state spostate e riorganizzate in file diversi. A causa della semantica della classe file di Kotlin, la compatibilità binaria verrà interrotta, ma non la compatibilità con il codice sorgente, pertanto non dovrebbe essere un problema per la maggior parte degli utenti.
- (I99b7d, b/177245490)
SnapshotStateObserver non è più sperimentale (Id2e6a)
Sono state eliminate alcune API precedentemente ritirate (Ice5da, b/178633932)
Sono state apportate le seguenti modifiche all'API Material:
- È stato aggiunto il parametro contentPadding a Top/BottomAppBar per consentire la personalizzazione del padding predefinito.
- I parametri in BackdropScaffold sono stati riordinati in modo da rispettare le linee guida dell'API per i parametri obbligatori che precedono i parametri facoltativi.
- Il parametro
icon
in BottomNavigationItem è stato spostato doposelected
eonClick
. - Il parametro
alwaysShowLabels
in BottomNavigationItem è stato rinominato inalwaysShowLabel
. - I parametri
bodyContent
in alcuni componenti sono stati rinominati incontent
. - Parametri riordinati in
ButtonDefaults.buttonColors()
. Tieni presente che, poiché il tipo di parametri non è cambiato, non verrà generato un errore nel 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 è in genere uguale asecondary
nel tema scuro, ma viene aggiunto per coerenza e ulteriore personalizzazione. - Sono stati rimossi ElevationDefaults e animateElevation() dall'API pubblica perché non erano di uso comune / utili.
onValueChangeEnd
inSlider
è stato rinominato inonValueChangeFinished
e impostato come nullable.- Il parametro
text
inSnackbar
è stato rinominato incontent
per coerenza. - È stato aggiunto il parametro
contentPadding
aDropdownMenuItem
per consentire la personalizzazione del padding predefinito econtent
è stato reso un'estensione diRowScope
. ModalDrawerLayout
rinominato inModalDrawer
.BottomDrawerLayout
rinominato 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 all'API
- Il supporto di ViewGroups è stato rimosso da UiApplier. I composabili emitView obsoleti sono stati rimossi. (Ifb214)
- CompositionReference rinominato in CompositionContext (I53fcb)
- ComponentActivity.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 e per nascondere le classi di implementazione interna dall'API pubblica. (Id9e32)
- Gli ambienti sono stati rinominati in modo che corrispondano alla ridenominazione di Ambient -> CompositionLocal. Gli ambienti in precedenza si chiamavano AmbientFoo, ora i CompositionLocals si chiamano LocalFoo. (I2d55d)
- rinominata Ambient in CompositionLocal e ambientOf / staticAmbientOf in compositionLocalOf / staticCompositionLocalOf. Questa modifica contribuisce a chiarire lo scopo di CompositionLocal: un meccanismo per fornire / recuperare valori locali di una composizione. Le istanze di CompositionLocal devono avere il prefisso
Local
, ad esempio val LocalFoo = compositionLocalOf { Foo() }. (Ia55b6) - takeMutableSnapshot e takeSnapshot sono stati trasferiti come metodi complementari di Snapshot. (I91f19)
@ComposableContract
è stata ritirata a favore di 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 perché non hanno più alcun impatto o valore positivo sulle prestazioni (I0484d)
snapshotFlow
ewithMutableSnapshot
non sono più sperimentali (I6a45f)Ora i ricostruttori possono essere chiusi. I ricostruttori chiusi continueranno la ricostituzione fino al completamento delle coroutine secondarie di composizione. Recomposer.shutDown è stato rinominato in cancel per distinguerlo da close. (Ib6d76)
L'elemento
compose:runtime-dispatch
è stato ritirato. MonotonicFrameClock ora si trova in compose:runtime e AndroidUiDispatcher in compose:ui. (Ib5c36)L'API di destinazione del plug-in del compilatore Compose è stata sottoposta a refactoring per utilizzare un'interfaccia anziché una classe concreta. Inoltre, l'interfaccia non utilizza più un parametro di tipo.
Si tratta di una modifica interna che non dovrebbe influire sulla compatibilità del codice sorgente, ma è una modifica che comporta la rottura del codice binario. (I3b922, b/169406779)
È stato introdotto SnapshotMutableState (Icfd03)
DisposableEffectDisposable è stato rinominato DisposaleEffectResult (Ica7c6)
È stato rimosso Recomposer.current(). [Abstract]ComposeView ora utilizza per impostazione predefinita Recomposer con ambito finestra creati in modo lazy e gestiti da ViewTreeLifecycleOwner per la finestra. I tick di animazione basati su recomposition e withFrameNanos vengono messi in pausa quando il ciclo di vita dell'host è interrotto. (I38e11)
Recomposer.runningRecomposers ora offre un StateFlow globale di RecomposerInfo di sola lettura per osservare lo stato della composizione in corso nel processo. Utilizza questa API anziché Recomposer.current(), che ora è stata ritirata. (If8ebe)
DisposableEffectDisposable è stato rinominato in 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 all'API
- onCommit, onDispose e onActive sono stati ritirati a favore delle API SideEffect e DisposableEffect (If760e)
- L'API emit() e tutti i relativi sovraccarichi sono stati ritirati e rinominati in ComposeNode. Le API sono identiche, ma hanno un nome diverso per rispettare le convenzioni di denominazione di Compose (I4137b)
- invalidate e compositionReference() sono ora deprecati a favore di currentRecomposeScope e rememberCompositionReference rispettivamente. (I583a8)
RememberObserver sostituisce CompositionLifecycleObserver e CompositionLifecycleObserver è ora deprecato.
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, che è la prassi consigliata e continuerà a esserlo. Tuttavia, se un riferimento è stato memorizzato più volte in una composizione,onRemembered
viene chiamato per ogni riferimento, mentreonEnter
viene chiamato una sola volta.onEnter
è stato chiamato più volte se l'oggetto è stato utilizzato in sottocomposizioni, comeWithConstraints
eScaffold
, rendendo inaffidabile la singola chiamataonEnter
, che è stata rimossa perRememberObserver
.RememberObserver
aggiungeonAbandoned
, che viene chiamato se l'istanzaRememberObserver
viene restituita dal callback passato aremember
, ma non è stata memorizzata nello stato della composizione e, pertanto, non verrà mai chiamatoonRemembered
. Ciò può accadere se un'eccezione termina la composizione prima del completamento o se la composizione viene ignorata perché lo stato per cui è stata prodotta non è più attuale o non è più necessario. Se l'istanza diRememberObserver
che segue il singolo consiglio di riferimento riportato sopra monitora una risorsa esterna, siaonForgotten
cheonAbandoned
indicano che la risorsa non è più necessaria. Se l'oggetto monitora il lavoro avviato o le risorse allocate inonRemembered
,onAbandoned
può essere ignorato perché non verrà chiamato se viene chiamatoonRemembered
. (I02c36)Non contrassegnare le funzioni
collectAsState()
come in linea (Ia73e4)
Correzioni di bug
- Con restrizioni è 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.
Modifica che provoca un errore
La ristrutturazione dell'API del compilatore interno consente di raggruppare le modifiche ai nodi generati come risultato della composizione nella fase di composizione "Applica modifiche", dopo il completamento di tutte le funzioni
@Composable
.Si tratta di una modifica di interruzione del comportamento che potrebbe influire sul codice dell'applicazione, poiché i nodi non sono più disponibili dalle API interne ed sperimentali fino a quando le modifiche non sono state applicate. Di solito, questo problema può essere risolto circondando il codice con queste dipendenze in un composable
SideEffect
per posticipare l'esecuzione del codice fino a dopo la creazione e l'inizializzazione dei nodi. (I018da)
Modifiche all'API
- È stato aggiunto un modo per monitorare se il recomposer ha applicato modifiche. (I1b3e2)
Espandi le API [Abstract]ComposeView per consentire il riciclo delle visualizzazioni basate su Compose, eliminando la loro composizione per ricrearle nuovamente in un secondo momento. Aggiungi API per installare e rilevare Recomposers basati su finestra e CompositionReference per creare composizioni secondarie.
Aggiungi ViewCompositionStrategy per configurare la strategia di eliminazione della composizione di [Abstract]ComposeViews. Il comportamento predefinito è l'eliminazione al distacco della finestra. (I860ab)
Correzioni di bug
- Ora Recomposer espone un flusso del suo stato attuale, consentendo di monitorare la sua attività e quella 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 all'API
Sono stati rimossi SlotTable, SlotReader e SlotWriter dall'API pubblica. In precedenza erano contrassegnati come InternalComposeAPI. Ora sono interne al modulo di composizione.
CompositionData e CompositionGroup sono stati aggiunti come sostituzione dell'API ui-tooling da utilizzare per estrarre le informazioni sulla composizione. Sono pubblici, ma non sono destinati all'uso al di fuori dell'API ui-tooling, in quanto forniscono le informazioni non elaborate interpretate dall'API ui-tooling (I31a9c)
La classe Applier non è più considerata un (Id85b0)
L'interfaccia
Applier
è cambiata per semplificare la creazione degli alberi dal basso verso l'alto anziché dal basso verso l'alto.Il metodo
insert()
è stato rinominato ininsertTopDown()
.È stato aggiunto un nuovo metodo,
insertBottomUp()
.Un applicatore inserisce i nodi nell'albero in modifica utilizzando
insertTopDown()
oinsertBottomUp()
, a seconda di quale ha un rendimento migliore.Alcuni alberi, come
LayoutNode
eView
, sono molto più efficienti da creare dal basso verso l'alto rispetto a quelli dall'alto verso il basso. Prima di questa modifica, era necessario un insieme di inserimenti per implementare il metodo dal basso verso l'alto, che doveva essere copiato in ogni applicativo che richiedeva la costruzione dal basso verso l'alto per le prestazioni. Con questa modifica, unApplier
sostituisceinsertBottomUp()
per creare un albero dal basso verso l'alto einsertTopDown()
per creare l'albero dall'alto verso il basso. (Icbdc2)Compose supporta i getter delle proprietà che possono eseguire invocazioni composable. Il supporto per questa funzionalità non verrà rimosso, ma la sintassi per dichiarare un getter della proprietà come @Composable sta cambiando.
La sintassi ora non più supportata per farlo consisteva nell'annotare la proprietà stessa:
@Composable val someProperty: Int get() = ...
La sintassi ora 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 precedente ritirata diventerà eventualmente un errore di compilazione. (Id9197)
Correzioni di bug
- AndroidOwner impostato come interno (Ibcad0, b/170296980)
- La funzione subcomposeInto(LayoutNode) è stata resa interna (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 all'API
- È stato aggiunto il controllo lint per il nome e la posizione dei parametri lambda componibili, per verificare la coerenza con le linee guida di Compose.
È stata inoltre eseguita la migrazione di alcune API che utilizzano
children
come nome per la funzione lambda finale acontent
, in base alle indicazioni e al controllo lint. (Iec48e) - Recomposer non accetta più un contesto EmbeddingContext. Le dipendenze di pianificazione richieste vengono ottenute dal contesto effectCoroutineContext. FrameManager è deprecato; le integrazioni della piattaforma devono inizializzare la propria gestione degli snapshot globali. (I02369)
- La funzione RestorableStateHolder.withRestorableState è stata rinominata in RestorableStateProvider (I66640)
Correzioni di bug
- Sono stati ritirati gli ambienti con il suffisso
Ambient
e sostituiti con nuove proprietà con prefisso Ambient, seguendo le linee guida per gli altri ambienti e l'API 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 all'API
- L'annotazione
@UnionType
è stata ritirata (I57cde) - provideDefault è stato aggiunto come alternativa a provide per fornire ambienti e può essere utilizzato per specificare valori di ambiente che verranno impostati solo se non è già stato fornito un valore di ambiente. (Id6635, b/171024925)
- LaunchedTask è stato rinominato in LaunchedEffect per coerenza con le API SideEffect e DisposableEffect. Per promuovere le best practice, non è consentito LaunchedEffect senza parametri subject. (Ifd3d4)
- Applier ora dispone di callback onBeginChanges/onEndChanges che vengono invocati quando un Composer inizia/termina di applicare le modifiche all'albero. Se necessario, possono essere utilizzati per la gestione delle risorse in batch. (Icf476)
- Ora Recomposer richiede un contesto coroutine al momento della costruzione (Ic4610)
- Modifiche all'implementazione interna di SlotTable che non dovrebbero influire sull'API pubblica. (If9828)
- Sono stati rimossi gli adattatori rxjava2 non più supportati che non prendono il valore iniziale (Idb72f)
Correzioni di bug
- foundation.Text è stato ritirato e sostituito con material.Text. Per un'API di testo di base senza opinioni che non utilizza i valori di un tema, consulta androidx.compose.foundation.BasicText. (If64cb)
- BaseTextField è stato ritirato. Utilizza invece BasicTextField. (I896eb)
- Diversi simboli relativi al layout sono stati spostati da androidx.compose.ui ad androidx.compose.layout.ui. (I0fa98, b/170475424)
Contributo esterno
- È stato aggiunto il modulo
runtime-rxjava3
per la composizione. 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 all'API
- Recomposer ora è un CompositionReference e un elemento composizione padre valido. Ora il ricomposimetro esplicito è obbligatorio in meno punti. (I4036f)
- È stata aggiunta l'API corrispondente DisposableEffect a SideEffect, che svolge il ruolo di onCommit-with-params, ma con un onDispose obbligatorio.
- È stata aggiunta l'API rememberUpdatedState per pubblicare i dati della ricomposi- one in processi in corso o di lunga durata come DisposableEffects o LaunchedTasks.
- (Id50b9)
- MutableVector ora implementa RandomAccess (I85d73, b/170461551)
- È stato aggiunto il composable SideEffect per applicare gli effetti collaterali della composizione agli oggetti gestiti dalla composizione. SideEffect è pensato per sostituire il composable onCommit. (Ia77c2)
- Nuova API sperimentale RestorableStateHolder. Consente di salvare lo stato definito con [savedInstanceState] e [rememberSavedInstanceState] per il sottoalbero prima di eliminarlo per consentirne la successiva composizione con lo stato ripristinato. (I66884, b/166586419)
Correzioni di bug
- Attiva 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 all'API
- Modificatore di input che sospende Modifier.pointerInput (Ia77d2) sperimentale
- Le prestazioni di scorrimento di LazyColumn/Row sono migliorate riducendo il lavoro nella composizione secondaria a ogni scorrimento. Il nuovo metodo hasInvalidations() è stato aggiunto per la classe Composition. Il metodo hasPendingChanges() di Recomposer è stato rinominato in hasInvalidations() (Ib2f32, b/168293643, b/167972292, b/165028371)
- Aggiungi l'API produceState per avviare le coroutine dalla composizione
che aggiornano un singolo valore
State<T>
nel tempo (Id4a57) - launchInComposition è stato rinominato in LaunchedTask per rispettare le linee guida dell'API Compose (I99a8e)
- L'ordine delle chiamate place() nei layout personalizzati ora definisce l'ordine di disegno degli 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 all'API
- È stato aggiunto OwnerScope per consentire la raccolta degli ambiti di osservazione del layout e dei disegni una volta che non sono più validi. (Ic4cf8)
- È stata aggiunta l'API derivedStateOf per creare oggetti State in base a un calcolo che può leggere (e derivare da) altri oggetti State (If758b)
- È stata aggiunta l'API TestOnly per SnapshotStateObserver (I6e2a9)
Correzioni di bug
- foundation.Box è stato ritirato. Utilizza invece 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 all'API
CompositionCoroutineScope
non implementa piùMonotonicFrameClock
. Gli utenti che chiamanowithFrameNanos
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 in ComposeTestRule (I7f45a). launchInComposition
non avvia 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 all'API
- Aggiungi le API
snapshotFlow
ewithMutableSnapshot
per utilizzare e produrre modifiche ai dati degli istantanei. (I3e722) La convenzione di chiamata per le funzioni componibili è stata modificata. Si tratta di una modifica che provoca un errore nel codice binario. Tutte le librerie devono essere ricompilate per funzionare con questa versione del plug-in del compilatore di compose.
Questa modifica non crea una modifica che comporta una rottura a livello di codice sorgente, in quanto le uniche API che sono state modificate sono le API del compilatore che richiedono un'attivazione esplicita. (I7afd2, b/158123185)
Sono stati rimossi i metodi di pianificazione da EmbeddingContext (I7b9be)
onPreCommit è deprecato; ora onCommit ha il comportamento di onPreCommit.
onCommit e onActive ora vengono eseguiti nello stesso frame del coreografo in cui vengono apportate le modifiche alla composizione, anziché all'inizio del frame del coreografo successivo. (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 all'API
- Ora le emissioni personalizzate possono dichiarare che uno o più dei relativi settaggi possono essere ignorati e ricomposti indipendentemente dall'emissione. (Ibbd13)
Sono state rimosse le chiamate a FrameManager non più supportate.
Le API di composizione interna sono state modificate per ridurre il carico aggiuntivo per monitorare gli oggetti di stato come
mutableStateof()
(I80ba6)Il composable
state { ... }
è stato ritirato a favore di chiamate esplicite aremember { mutableStateOf(...) }
per maggiore chiarezza. Ciò riduce la superficie complessiva dell'API e il numero di concetti per la gestione dello stato e corrisponde al patternby mutableStateOf()
per la delega delle proprietà della classe. (Ia5727)Ora Flow.collectAsState determina il gestore predefinito dalla composizione stessa anziché utilizzare per impostazione predefinita Dispatchers.Main. (I9c1d9)
È stato corretto l'arresto anomalo che si verificava quando all'interno del ciclo for veniva utilizzato qualcosa che salvava lo stato. Ora è consentita la stessa chiave in savedInstanceState(), l'API di UiSavedStateRegistry è ora adattata a questo nuovo requisito (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561)
Correzioni di bug
emitView
è stato deprecato. Se possibile, utilizzaAndroidView
per emettere le visualizzazioni all'interno di Compose. Tieni presente che la composizione diretta di View e ViewGroup non sarà supportata in futuro, a meno che non si tratti di nodi fogli nell'albero di composizione, nel qual caso è possibile utilizzare 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 all'API
Il criterio di mutazione predefinito di
mutableStateOf()
,ambientOf()
esavedInstanceStateOf()
è diventatostructuralEqualityPolicy()
anzichéreferentialEqualityPolicy()
.Il valore predefinito per decidere se un nuovo valore assegnato a un'istanza
mutableStateOf()
è considerato una modifica ora è l'utilizzo di==
anziché===
.Vedi https://kotlinlang.org/docs/reference/equality.html
ambientOf()
esavedInstanceStateOf()
utilizzanomutableStateOf()
nelle loro implementazioni, pertanto sono stati modificati in modo da essere coerenti conmutableStateOf()
.L'utilizzo dell'uguaglianza strutturale soddisfa maggiormente le aspettative degli sviluppatori.
Ad esempio,
val state = mutableStateOf(1f)
seguito da,
state.value = 1f
non verrà più considerata una modifica a
state
e gli utilizzi distate
durante la composizione non dovranno più essere ricomposti.Si tratta di una modifica che comporta una interruzione del servizio, ma nella maggior parte dei casi (ad esempio quando si utilizzano classi che non sostituiscono
equals()
), non avrà un effetto significativo su un'applicazione.I tipi che sostituiscono
equals()
, come i tipidata
, potrebbero registrare un calo delle prestazioni poiché i relativi metodiequals()
ora, per impostazione predefinita, vengono chiamati quando assegnati a unmutableStateOf()
.Il comportamento precedente può essere ripristinato aggiungendo il parametro
policy = referentialEqualityPolicy()
delle norme alle chiamate amutableStateOf()
,ambientOf()
esavedInstanceStateOf()
. (Ic21a7)Row
eColumn
ora sono funzioni in linea che riducono notevolmente il sovraccarico di utilizzo. (I75c10)
Correzioni di bug
- setViewContent è stato ritirato. Utilizza setContent. (I7e497, b/160335130)
È stato aggiunto MonotonicFrameAnimationClock che ti consente di utilizzare un 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 di MonotonicFrameClock di ManualAnimationClock ora è ManualFrameClock. (I111c7, b/161247083)
Modifier.stateDraggable è stato completamente rielaborato e rinominato in Modifier.swipeable. È stata introdotta una nuova classe SwipeableState e DrawerState e BottomDrawerState sono stati sottoposti a refactoring per ereditarlo. [Modal/Bottom]DrawerLayout non accetta più un parametro onStateChange. (I72332, b/148023068)
Modifier.plus è deprecato. Utilizza Modifier.then. "Poi" indica più chiaramente l'ordine, ma impedisce anche di digitare
Modifier.padding().background() + anotherModifier
, che interrompe la catena ed è più difficile da leggere (Iedd58, b/161529964)SubcomposeLayout viene aggiunto. Si tratta di un'entità di basso livello che consente di comporre gli elementi secondari durante la misurazione se vogliamo utilizzare alcuni valori disponibili solo in un secondo momento durante la misurazione per la composizione del sottoalbero. Ad esempio, WithConstraints non è implementato utilizzando SubcomposeLayout. (I25cc8)
Material FilledTextField è stato rinominato in TextField e la funzionalità di base TextField è stata rinominata in BaseTextField per rendere più semplice la scoperta e l'utilizzo dell'API più semplice (Ia6242, b/155482676)
Modifier.drawBackground è stato rinominato in 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 all'API
L'annotazione
@Model
è stata ritirata. Utilizza state e mutableStateOf come alternative. Questa decisione di ritiro è stata presa dopo un'attenta discussione.Giustificazione
La motivazione include, a titolo esemplificativo:
- Riduce la superficie dell'API e i concetti che dobbiamo insegnare
- Maggiore allineamento con altri kit di strumenti paragonabili (Swift UI, React, Flutter)
- Decisione reversibile. Possiamo sempre ripristinare
@Model
in un secondo momento. - Rimuovi l'utilizzo di casi limite e le domande difficili da rispondere sulla configurazione di
@Model
come elementi da gestire - Classi di dati
@Model
, uguale, hashcode e così via. - Come faccio ad avere alcune proprietà "osservate" e altre no?
- Come faccio a specificare l'uguaglianza strutturale rispetto a quella referenziale da utilizzare nell'osservazione?
- Riduce la "magia" nel sistema. Ridurrebbe la probabilità che qualcuno presuma che il sistema sia più intelligente di quanto non sia (ad es. che sappia confrontare un elenco)
- Rende la granularità dell'osservazione più intuitiva.
- Migliora la possibilità di eseguire il refactoring da variabile a proprietà nella classe
- Potrebbe aprire la possibilità di eseguire ottimizzazioni specifiche per stato create manualmente
- Si allinea di più al resto dell'ecosistema e riduce l'ambiguità rispetto allo stato immutabile o all'approccio "abbracciamo lo stato mutabile"
Note sulla migrazione
Quasi tutti gli utilizzi esistenti di
@Model
possono essere trasformati in uno dei due modi seguenti. L'esempio seguente contiene una classe@Model
con due proprietà solo per fare un esempio e viene utilizzata in un composable.@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 è semplificato con le classi di dati di Kotlin. In sostanza, trasforma tutte le proprietà
var
precedenti in proprietàval
di una classe di dati, quindi utilizzastate
anzichéremember
e assegna il valore dello stato alle copie clonate dell'originale utilizzando il metodo di utilitàcopy(...)
della classe di dati.È importante notare che questo approccio funziona solo quando le uniche mutazioni a quella classe sono state eseguite nello stesso ambito in cui viene creata l'istanza
State
. Se la classe si sottopone a mutazioni interne al di fuori dell'ambito di utilizzo e ti basi sull'osservazione di questo comportamento, l'approccio successivo è quello che ti consigliamo di 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 i delegati delle proprietà
Questo approccio è semplificato con i delegati delle proprietà di Kotlin e l'API
mutableStateOf
che consente di creare istanze di MutableState al di fuori della composizione. In sostanza, sostituisci tutte le proprietàvar
della classe originale con proprietàvar
conmutableStateOf
come delegato della proprietà. Il vantaggio è che l'utilizzo della classe non cambierà affatto, solo la sua implementazione interna. Tuttavia, il comportamento non è completamente identico all'esempio originale, poiché ora ogni proprietà viene osservata/sottoscritta singolarmente, pertanto le ricostruzioni che vedi dopo questa riorganizzazione potrebbero essere più limitate (un bene).class Position(x: Int, y: Int) { var x by mutableStateOf(x) var y by mutableStateOf(y) } // source of Example is identical to original @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }
(I409e8, b/152050010, b/146362815, b/146342522, b/143413369, b/135715219, b/143263925, b/139653744)
Modifica la strategia di generazione del codice del compilatore di Compose. Prima della modifica, il compilatore di compose trasformava le chiamate in funzioni componibili. Con questa modifica, ora trasformiamo il corpo di una funzione composable e lasciamo invariato il sito di chiamata (per lo più).
Ciò significa che la maggior parte della logica di comunicazione con il runtime di composizione avviene all'inizio del corpo della funzione, anziché nel sito di chiamata.
Questa dovrebbe essere una modifica compatibile con la sorgente per tutto l'utilizzo di compose. La maggior parte degli utenti di compose non dovrebbe dover aggiornare alcun codice a seguito di questa modifica.
Per supportare questo lavoro, la firma JVM di tutte le funzioni composable è cambiata. Una funzione componibile che accetta un singolo parametro viene trasformata in una funzione che accetta tre parametri, i parametri aggiuntivi sono il compositore, un numero intero "chiave" e un numero intero con maschera di bit utilizzato per propagare i metadati tramite le chiamate.
Ora Compose trasforma anche gli argomenti predefiniti in una funzione componibile. Ciò avviene senza introdurre un sovraccarico predefinito sintetico aggiuntivo della funzione stessa, pertanto questa modifica comporterà la definizione di un numero inferiore di funzioni.
Modifiche comportamentali intenzionali note derivanti da quanto segue:
- Alcune chiamate verranno ignorate, mentre in precedenza non sarebbe stato così
- Le espressioni componibili nelle espressioni degli argomenti predefiniti ora vengono sottoscritte e gestite correttamente
Questo lavoro ha incluso alcune ottimizzazioni: 1. Il risultato dei confronti dei parametri viene propagato tramite il grafo delle chiamate ad altre funzioni composable. Ciò comporterà meno confronti in fase di esecuzione, una riduzione delle dimensioni della tabella degli slot e un maggiore salto delle funzioni componibili che in precedenza non venivano saltate. 2 I parametri che vengono determinati come "statici" in fase di compilazione non vengono più confrontati o memorizzati in fase di runtime. In questo modo si riduce 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 il lavoro per il runtime 4. I parametri di invio e di ricezione inutilizzati per le funzioni non sono inclusi nel determinare la possibilità di saltare la funzione se non vengono utilizzati all'interno del corpo della funzione.
La maggior parte delle modifiche incompatibili riguarda le API di destinazione del compilatore e l'utilizzo tipico di compose non sarà interessato: 1. Composer::startExpr è stato rimosso 2. Composer::endExpr è stato rimosso 3. Composer::call è stato ritirato 4. Le sovraccaricamenti non varargs di
key
sono stati rimossi. Utilizza la versionevararg
in futuro. 5. L'annotazione Pivotal è stata ritirata. Utilizzakey
come sostituto. 6. ScopeUpdateScope::updateScope è stato modificato in modo da attendere una funzione 3 anziché una funzione 1 7. restartableFunction e restartableFunctionN sono stati aggiornati per includere parametri aggiuntivi in fase di compilazione (I60756, b/143464846)Aggiunti sortWith e removeRange a MutableVector (Icccf7)
Sono state aggiunte implementazioni del metodo predefinito per CompositionLifecycleObserver (I24289)
Applier ora richiede un metodo clear() per eliminare le composizioni (Ibe697)
È stato aggiunto asMutableList() a MutableVector per consentirne il passaggio all'API pubblica senza dover copiare l'intero elenco. (I298df)
È stato aggiunto rememberCoroutineScope() per ottenere un CoroutineScope gestito nella composizione per l'avvio di job in risposta a eventi. (I0e264)
MutableVector è una nuova raccolta che non implementa alcuna interfaccia Collection standard. Questa raccolta offre una velocità superiore agli altri requisiti ed è pensata per essere utilizzata solo nelle implementazioni interne. (I8ebd6)
StableMutableList
eStableMutableMap
sono stati rimossi temporaneamente per evitare un problema nella versione di Kotlin compose richiesta. Queste interfacce verranno reintrodotte non appena Compose verrà aggiornato a una versione di Kotlin che non presenta il problema.SnapshotStateList
eSnapshotStateMap
sono ora pubblici, ma verranno ritirati quandoStableMutableList
eStableMutableMap
saranno ripristinati. (Ia7769)Aggiunta della funzione di primo livello withFrameNanos per la durata dell'animazione (Ie34c5)
L'annotazione @Untracked è stata ritirata. Sostituire con @ComposableContract(tracked=false) (Id211e)
RestartableFunction e le API associate sono state rinominate in ComposableLambda e così via. Queste API erano target solo del compilatore, pertanto in genere non dovrebbero influire sulla compatibilità a livello di codice sorgente. La ridenominazione è stata eseguita principalmente per comunicare meglio la funzione di questa classe quando viene visualizzata nelle tracce dello stack (I7eb25)
L'annotazione @Composable non è più valida per le classi (Ia5f02)
Ambient<T>
ora è @Stable anziché @Immutable (I0b4bb)Prima di questa modifica, il plug-in del compilatore di Compose intercettava in modo non banale le chiamate ai costruttori all'interno di una funzione @Composable se era presente un (I5205a, b/158123804)
Il composable Recompose non è più un'astrazione utile. La maggior parte delle ricostruzioni dovrebbe avvenire a seguito delle assegnazioni di MutableState. Per qualsiasi altro caso, ti consigliamo di utilizzare la funzione
invalidate
per attivare una ricostituzione dell'ambito corrente. (Ifc992)Observe non è più un'astrazione utile. Se devi replicarla, la sua implementazione può essere replicata semplicemente creando una funzione componibile che esegue 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'opzione per StateFlow, introdotta di recente, che consente di precompilare il valore iniziale in modo che lo stato restituito non sia null (I61dd8, b/156233789)
È stato aggiunto un'opzione di adattamento per Flow. Esempio di utilizzo: valore val tramite flow.collectAsState() (If2198, b/153375923)
[Mutabile]Gli operatori di delega della proprietà stato sono stati spostati nelle estensioni per supportare le ottimizzazioni della delega della proprietà di Kotlin 1.4. Gli utenti che chiamano 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 è stato rimosso. Era ridondante con ComponentNode. androidx.compose.ViewAdapters è stato rimosso. Non sono più un caso d'uso supportato. Compose.composeInto è stato ritirato. Utilizza invece
setContent
osetViewContent
. Compose.disposeComposition è stato ritirato. Utilizza invece il metododispose
suComposition
restituito dasetContent
. androidx.compose.Compose.subcomposeInto è stato spostato in androidx.ui.core.subcomposeInto ComponentNode#emitInsertAt è stato rinominato in ComponentNode#insertAt ComponentNode#emitRemoveAt è stato rinominato in ComponentNode#removeAt ComponentNode#emitMode è stato rinominato in ComponentNode#move (Idef00)È stato aggiornato il flag
ComposeFlags.COMPOSER_PARAM
intrue
, il che comporterà la modifica della strategia di generazione del codice per il plug-in di composizione. A un livello generale, questo fa sì che le funzioni @Composable vengano generate con un parametro sintetico aggiuntivo, che viene trasmesso alle chiamate @Composable successive affinché il runtime possa gestire correttamente l'esecuzione. Si tratta di una modifica significativa che comporta la rottura del codice binario, ma dovrebbe preservare la compatibilità a livello di codice sorgente in tutti gli utilizzi consentiti di compose. (I7971c)Modifiche non compatibili all'API Ambient. Per informazioni dettagliate, consulta il log e la documentazione di
Ambient<T>
(I4c7ee, b/143769776)È stato aggiunto ui-livedata, un nuovo elemento con un'entità di LiveData. Esempio di utilizzo: valore val tramite liveData.observeAsState() (Ie9e8c, b/150465596)
Gli adattatori Rx senza valore iniziale esplicito sono deprecati. L'utilizzo di null non è sempre il valore predefinito migliore, ad esempio quando hai un elenco è meglio iniziare con emptyList() o qualsiasi altro valore predefinito ragionevole (I00025, b/161348384)
È stato aggiunto ui-rxjava2, un nuovo elemento con adattatori per RxJava2. Esempio di utilizzo: valore val tramite observable.subscribeAsState() (Ifab4b, b/153369097)
savedInstanceState()
ora può essere utilizzato con tipi nullable (I6847f, b/153532190)Nuovi metodi listSaver() e mapSaver() per semplificare la scrittura di oggetti Saver personalizzati (I8cf68, b/152331508)
Nuove funzioni: savedInstanceState() e rememberSavedInstanceState(). Sono simili a state() e remember(), ma hanno un supporto integrato per lo stato dell'istanza salvato (If1987, b/152025209)
Correzioni di bug
runOnIdleCompose
è stato rinominato inrunOnIdle
(I83607)- È stata creata l'API sperimentale LayoutNode (I4f2e9)
- androidx.ui.foundation.TextFieldValue e androidx.ui.input.EditorValue sono deprecati. Anche i composabili TextField, FilledTextField e CoreTextField che utilizzano questo tipo sono deprecati. Utilizza invece androidx.ui.input.TextFieldValue (I4066d, b/155211005)
- È stata rimossa l'API DrawBackground ritirata a favore delle API di estensione drawBackground su Modifier. È stato eseguito il refactoring delle implementazioni di colore, pennello e drawBackground per ridurre i percorsi di codice e rimuovere il requisito di creazione di Modifier nell'ambito della composizione. (I0343a)
- Sono state aggiornate le API compose di livello superiore che espongono un Canvas per esporre CanvasScope. In questo modo, i consumatori non dovranno più gestire i propri oggetti Paint. I consumatori che hanno ancora bisogno di accedere a un Canvas possono utilizzare il metodo drawCanvas dell'estensione, che fornisce un callback per emettere comandi di disegno con il Canvas di base. (I80afd)
- L'API lambda finale WithConstraints è stata modificata. Ora, anziché due parametri, ha un ambito del ricevitore che, oltre a constraints e layoutDirection, fornisce le proprietà minWidth, maxWidth, minHeight e maxHeight in DP (I91b9a, b/149979702)
- È stato aggiunto il modificatore di spaziatura simmetrica. (I39840)
- Aggiornati wrapContentWidth e wrapContentHeight in modo che prevedano l'allineamento verticale o orizzontale anziché qualsiasi allineamento. Il modificatore di gravità è stato aggiornato in modo da accettare l'allineamento verticale o orizzontale. Le opzioni Riga, Colonna e Serie sono state aggiornate per supportare gli allineamenti continui personalizzati. (Ib0728)
- Il modulo ui-text viene rinominato ui-text-core (I57dic)
- Miglioramento dell'API DrawModifier:
- È stato creato l'ambito del ricevente per draw() ContentDrawScope
- Sono stati rimossi tutti i parametri in draw()
- DrawScope ha la stessa interfaccia dell'ex CanvasScope
- ContentDrawScope ha il metodo drawContent() (Ibaced, b/152919067)
- ColoredRect è stato ritirato. Utilizza invece
Box(Modifier.preferredSize(width, height).drawBackground(color))
. (I499fa, b/152753731) - Operatore Modificatore più sostituito con funzioni di estensione di fabbrica (I225e4)
- I membri RowScope e ColumnScope sono ora accessibili al di fuori di Riga e Colonna. (I3a641)
- LayoutFlexible è stato rinominato LayoutWeight. Il parametro tight è stato rinominato in fill. (If4738)
- WithConstraints ha ricevuto il parametro LayoutDirection (I6d6f7)
- Lo sfondo è stato rinominato in DrawBackground e viene memorizzato per impostazione predefinita (Ia0bd3)
- È stato sostituito ButtonStyle con funzioni distinte ed è stato rimosso il sovraccarico di testo (stringa). Consulta i sample aggiornati per informazioni sull'utilizzo. (If63ab, b/146478620, b/146482131)
runOnIdleCompose
erunOnUiThread
ora sono funzioni globali invece di metodi su ComposeTestRule. (Icbe8f)
Contributo esterno
- Rimuovere le API non necessarie, come Looper e Handler, dal livello di porting del runtime di Compose (I6847d)
- È stata ritirata la funzionalità
Flow<T>.collectAsState()
senza valore iniziale. UtilizzaStateFlow<T>
o passa un valore iniziale esplicito. (I63f98, b/157674865)