Compose Runtime
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshots
(Consulta la documentazione Riferimento API per tutti i pacchetti di Compose)
| Ultimo aggiornamento | Release stabile | Candidato per la release | Release beta | Release alpha |
|---|---|---|---|---|
| 22 ottobre 2025 | 1.9.4 | - | 1.10.0-beta01 | - |
Struttura
Compose è una combinazione di 7 ID gruppo Maven all'interno di androidx. Ogni gruppo
contiene un sottoinsieme mirato di funzionalità, ognuna con il proprio insieme di note di rilascio.
Questa tabella illustra i gruppi e fornisce i link a ogni insieme di note di rilascio.
| Gruppo | Descrizione |
|---|---|
| compose.animation | Crea animazioni nelle applicazioni Jetpack Compose per arricchire l'esperienza utente. |
| compose.compiler | Trasforma le funzioni @Composable e attiva le ottimizzazioni con un plug-in del compilatore Kotlin. |
| compose.foundation | Sviluppa applicazioni Jetpack Compose con i componenti di base pronti all'uso e usali per personalizzare il design degli elementi della tua app. |
| compose.material | Crea UI Jetpack Compose con i componenti Material Design pronti all'uso. Compose offre un modo più semplice e rapido per iniziare ed è progettato per fornire componenti in linea con quanto descritto all'indirizzo www.material.io. |
| compose.material3 | Crea UI Jetpack Compose con i componenti Material Design 3, la nuova evoluzione di Material Design. Material 3 include componenti e temi aggiornati e funzionalità di personalizzazione Material You come il colore dinamico. È progettato per essere coerente con il nuovo stile visivo e l'UI di sistema di Android 12. |
| compose.runtime | Elementi di base del modello di programmazione e della gestione dello stato di Compose e runtime principale utilizzato dal plug-in del compilatore Compose. |
| compose.ui | Componenti fondamentali della UI di Compose necessari per interagire con il dispositivo, inclusi layout, disegno e input. |
Dichiara le dipendenze
Per aggiungere una dipendenza da Compose, devi aggiungere il repository Maven di Google al tuo progetto. Per saperne di più, consulta il repository Maven di Google.
Aggiungi le dipendenze per gli artefatti necessari nel file build.gradle per
la tua app o il tuo modulo:
Trendy
dependencies { implementation "androidx.compose.runtime:runtime:1.9.4" implementation "androidx.compose.runtime:runtime-livedata:1.9.4" implementation "androidx.compose.runtime:runtime-rxjava2:1.9.4" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.runtime:runtime:1.9.4") implementation("androidx.compose.runtime:runtime-livedata:1.9.4") implementation("androidx.compose.runtime:runtime-rxjava2:1.9.4") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Per saperne di più sulle dipendenze, consulta Aggiungi dipendenze di build.
Feedback
Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se riscontri nuovi problemi o hai idee per migliorare questa libreria. Prima di segnalare un nuovo problema, 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 di Issue Tracker.
Tracciamento runtime versione 1.7
Versione 1.7.0-rc01
18 settembre 2024
androidx.compose.runtime:runtime-tracing:1.7.0-rc01 è stato rilasciato. La versione 1.7.0-rc01 contiene questi commit.
Runtime Tracing versione 1.0
Versione 1.0.0-beta01
29 novembre 2023
androidx.compose.runtime:runtime-tracing:1.0.0-beta01 è stato 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 è stato rilasciato. La versione 1.0.0-alpha05 contiene questi commit.
Correzioni di bug
- Sono state bloccate le dipendenze alle versioni stabili supportate più basse (ad es. compose-runtime e tracing-perfetto), risolvendo un problema a causa del quale compose-runtime-tracing inseriva 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 è stato rilasciato. La versione 1.0.0-alpha04 contiene questi commit.
Nuove funzionalità
- Compatibile con le versioni più recenti di Benchmark e Tracing Perfetto, che consente il supporto del tracciamento della composizione all'avvio dell'app (avvio a freddo), ad esempio in AndroidX Benchmark e Android Studio (a partire da Hedgehog Beta 2).
Modifiche alle API
androidx.tracing.perfetto.Tracerinominato inandroidx.tracing.perfetto.PerfettoSdkTrace. (I44af8)- Rendere le API dell'SDK Tracing Perfetto coerenti con
android.os.Trace. (I73ba0, b/282199917) - Prerequisiti per la tracciabilità all'avvio dell'app. (Iad890)
- Sono stati uniti i file delle API sperimentali e pubbliche (I0f2e1, b/278769092)
Versione 1.0.0-alpha02
8 febbraio 2023
androidx.compose.runtime:runtime-tracing:1.0.0-alpha02 è stato rilasciato. La versione 1.0.0-alpha02 contiene questi commit.
Nuove funzionalità
- Nessuna modifica funzionale. Ottimizzazioni multiple del rendimento nelle dipendenze downstream
androidx.tracing:tracing-perfetto*.
Versione 1.0.0-alpha01
7 settembre 2022
androidx.compose.runtime:runtime-tracing:1.0.0-alpha01 è stato rilasciato. La versione 1.0.0-alpha01 contiene questi commit.
Nuove funzionalità
androidx.compose.runtime:runtime-tracingè una libreria che, in presenza di strumenti che la supportano (disponibili a breve), consente di estendere la tracciabilità in un'app Compose. Questa release iniziale è la 1.0.0-alpha01.
Versione 1.10
Versione 1.10.0-beta01
22 ottobre 2025
androidx.compose.runtime:runtime-*:1.10.0-beta01 è stato rilasciato. La versione 1.10.0-beta01 contiene questi commit.
Modifiche alle API
RetainedValuesStore.getExitedValueOrDefaultviene rinominato inRetainedValuesStore.getExitedValueOrElse(If9653, b/452340613)isKeepingExitedValuesè stato rinominato inisRetainingExitedValues(I660bf, b/437095756)RetainScopeè stato rinominato inRetainedValuesStore.RetainScopeHolderè stato rinominato inRetainedValuesStoreRegistry.RetainScopeHolder.RetainScopeProviderè stato rinominato inRetainedValuesStoreRegistry.ProvideChildRetainedValuesStore. (Idf23a, b/437095756)
Correzioni di bug
- Inizializzazione ritardata di
SavedStateinSaveableStateRegistryfino al primo utilizzo. (Ic0a93)
Versione 1.10.0-alpha05
8 ottobre 2025
androidx.compose.runtime:runtime-*:1.10.0-alpha05 è stato rilasciato. La versione 1.10.0-alpha05 contiene questi commit.
Correzioni di bug
- Compila la traccia dello stack per
DiagnosticComposeExceptionin modalità di rilascio. (Ib76cb) - Risolto un problema nello stato Snapshot in cui, l'utilizzo di un criterio di unione per un tipo poteva comportare il calcolo errato del valore precedente, che restituiva un valore futuro dello stato anziché quello precedente. Ciò si verifica se sono in attesa più di due snapshot modificabili e almeno uno dei valori applicati ha una norma di unione. (I527b5, b/442791065)
Versione 1.10.0-alpha04
24 settembre 2025
androidx.compose.runtime:runtime-*:1.10.0-alpha04 è stato rilasciato. La versione 1.10.0-alpha04 contiene questi commit.
Modifiche alle API
- È stata aggiunta l'API
RetainScopeHolderper gestire una raccolta diRetainScopes. Può essere utilizzato per implementare la conservazione per i contenitori e gli host di navigazione che compongono molti elementi secondari con durate di conservazione diverse. (I10e0f) - Sono state aggiunte le API
RetainedContentHosteretainControlledRetainScope, che possono essere utilizzate per creareRetainScopesgestiti automaticamente per contenuti temporanei come i riquadri comprimibili (If81f6). - È stato ritirato l'overload inline di
Updater#setperché il valore fornito veniva inserito troppe volte. È stato aggiunto un overload diUpdater#initche accetta un parametro che evita di richiedere una lambda di acquisizione. (Id679e) - Introduce
RetainedEffect, un'API con effetti collaterali simile aDisposableEffectche segue il ciclo di vita della conservazione anziché quello della composizione. Questa API è pensata per essere utilizzata per gli effetti legati alla conservazione di un altro oggetto che non implementa o non può implementareRetainObserver. (I1c61f, b/177562901) - È stata corretta la documentazione di
RetainObserver.onRetaineded è stato aggiuntoRetainObserver.onUnused, che rispecchiaRememberObserver.onAbandoned(Ia6fc5)
Correzioni di bug
- È stato corretto l'invio di remember dopo il primo gruppo in una funzione (ad esempio una chiamata composable) e prima di un gruppo che può essere rimosso (ad esempio un'istruzione
if) che potrebbe inviareonForgottenin ordine errato. (I453f6, b/346821372) - Evita l'attraversamento del contesto della coroutine durante l'inizializzazione di
LaunchedEffect. (I8d2c3b)
Versione 1.10.0-alpha03
10 settembre 2025
androidx.compose.runtime:runtime-*:1.10.0-alpha03 è stato rilasciato. La versione 1.10.0-alpha03 contiene questi commit.
Modifiche alle API
- Introduce le analisi dello stack di composizione basate sulla chiave di gruppo, che sono attive per impostazione predefinita per tutte le app compresse. Il mapping Proguard per queste tracce verrà generato dal plug-in Gradle del compilatore Compose a partire da Kotlin 2.3.0. (Ifbcb5)
- Aggiungi interfaccia:
IdentifiableRecomposeScopeper gli strumenti (Idd5e0, b/434194620) - È stato impedito che si verifichino invalidazioni non necessarie nelle composizioni che coinvolgono
CompositionLocalContext(I3fa21, b/412750209)
Correzioni di bug
- È stato chiarito nella documentazione e negli strumenti che anche le chiavi passate per la conservazione vengono conservate. Evita di passare chiavi da conservare che causano una perdita di memoria. (Ib553b, b/177562901)
- È stato risolto un problema per cui, quando viene chiamato
resume()di una composizione in pausa su un thread diverso, lo stato delle notifiche in attesa potrebbe confondersi quando il thread principale tenta di ricomporre la composizione in pausa per il frame successivo. (Ie5f17, b/442649894) - Registra le eccezioni acquisite nella composizione. (I47d78, b/432799675, b/436878515, b/359623674, b/400436355)
Versione 1.10.0-alpha02
27 agosto 2025
androidx.compose.runtime:runtime-*:1.10.0-alpha02 è stato rilasciato. La versione 1.10.0-alpha02 contiene questi commit.
Modifiche alle API
- È stato aggiunto
@DoNotRetain, che può essere utilizzato per annotare i tipi che non devono essere utilizzati con l'APIretain, possibilmente perché causano perdite di risorse. (Ie5435) - I progetti rilasciati con Kotlin 2.0 richiedono KGP 2.0.0 o versioni successive per essere utilizzati. (Idb6b5)
Correzioni di bug
- È stato corretto il contenuto mobile in modo che calcoli correttamente le operazioni per Applier quando il contenuto modifica il nodo principale di una composizione. Quando vengono calcolate le modifiche per i contenuti mobili, una chiamata
up()potrebbe rimanere in attesa e non essere inviata all'applier, causando un posizionamento errato dello stato dell'applier per qualsiasi utilizzo successivo. (I7c583), (I47b70) - Contrassegna
CheckResultcome deprecato perché non è destinato all'uso. (I32934)
Versione 1.10.0-alpha01
13 agosto 2025
androidx.compose.runtime:runtime-*:1.10.0-alpha01 è stato rilasciato. La versione 1.10.0-alpha01 contiene questi commit.
Modifiche alle API
- Introduce l'API retain. Come
rememberSaveable, retain può persistere e salvare i valori memorizzati che escono dalla gerarchia di composizione. I valori conservati non vengono serializzati e hanno una durata inferiore rispetto ai valori salvati e si comportano in modo simile a un androidxViewModel. Per ulteriori dettagli, consulta la documentazione. (Ia3105, b/177562901) - È stata aggiunta un'API
awaitOrScheduleNextCompositionEnd(), che esegue un callback quando Recomposer termina la composizione del frame corrente. Se Recomposer non sta componendo un frame, questa API viene sospesa fino al termine della composizione del frame successivo e pianifica la composizione di un nuovo frame. (Ib873c) - Aggiungi un'API del fornitore locale di composizione che non restituisce unità (I22521, b/271871288)
- È stato aggiunto un flag di funzionalità,
isMovableContentUsageTrackingEnabled, che consente di monitorare l'utilizzo dei contenuti mobili per evitare alcuni sovraccarichi durante la creazione iniziale dei contenuti. Al momento, questi flag funzionalità sono disattivati per impostazione predefinita. (Ia713d)
Correzioni di bug
- Corregge un arresto anomalo nei contenuti mobili quando vengono spostati tra le composizioni secondarie. (I3fa1e, b/436858107)
- Corregge un bug relativo alla parte di una traccia dello stack componibile mancante quando si trova all'interno di più sottocomposizioni nidificate. (I98c6f)
- Spostamento di minSdk predefinito dall'API 21 all'API 23 (Ibdfca, b/380448311, b/435705964, b/435705223)
- È stata corretta una condizione di competizione quando lo stato interno di una composizione sospendibile veniva aggiornato da più thread. (I03895)
- Aggiorna l'osservatore della registrazione della composizione in modo che venga chiamato prima della composizione iniziale. (I4adca, b/430600932)
- Correzione di bug minore per rendere
AutoboxingStateValuePropertyDetectorcompatibile sia con K1 che con K2. (Ie81c1)
Contributo esterno
- Rendi l'artefatto runtime-rxjava2 multipiattaforma e aggiungi la JVM come target supportato. (I5409e)
- Rendi l'artefatto runtime-rxjava3 multipiattaforma e aggiungi la JVM come target supportato. (I97e84)
Versione 1.9
Versione 1.9.4
22 ottobre 2025
androidx.compose.runtime:runtime-*:1.9.4 è stato rilasciato. La versione 1.9.4 contiene questi commit.
Versione 1.9.3
8 ottobre 2025
androidx.compose.runtime:runtime-*:1.9.3 è stato rilasciato. La versione 1.9.3 contiene questi commit.
Versione 1.9.2
24 settembre 2025
androidx.compose.runtime:runtime-*:1.9.2 è stato rilasciato. La versione 1.9.2 contiene questi commit.
Versione 1.9.1
10 settembre 2025
androidx.compose.runtime:runtime-*:1.9.1 è stato rilasciato. La versione 1.9.1 contiene questi commit.
Correzioni di bug
- Evita di ricomporre le composizioni in fase di composizione. (Iacb01)
- Impedire che gli ambiti di ricomposizione vengano messi in pausa due volte. (I060b2, b/431584881)
Versione 1.9.0
13 agosto 2025
androidx.compose.runtime:runtime-*:1.9.0 è stato rilasciato. La versione 1.9.0 contiene questi commit.
Modifiche importanti dalla versione 1.8.0
- I controlli Lint forniti con Compose ora richiedono una versione minima di AGP 8.8.2. Se non riesci a eseguire l'upgrade di AGP, puoi eseguire l'upgrade di Lint separatamente utilizzando
android.experimental.lint.version=8.8.2(o una versione più recente) in gradle.properties. Per eseguire i controlli lint di Compose all'interno dell'IDE, è necessario Android Studio Ladybug o versioni successive. - È stata creata una nuova libreria di annotazioni in fase di runtime. Contiene definizioni di annotazioni senza una dipendenza dal runtime di Compose, quindi può essere utilizzato da moduli non Compose.
@Stable,@Immutablee@StableMarkersono stati spostati nell'annotazione in fase di runtime per consentire l'annotazione di moduli non Compose@FrequentlyChangingValuee@RememberInCompositionsono stati aggiunti a runtime-annotation.@FrequentlyChangingValuecontrassegna le dichiarazioni che possono causare ricomposizioni frequenti, mentre@RememberInCompositioncontrassegna le dichiarazioni da ricordare nella composizione. I controlli lint corrispondenti avvisano in caso di utilizzo errato.
Versione 1.9.0-rc01
30 luglio 2025
androidx.compose.runtime:runtime-*:1.9.0-rc01 è stato rilasciato. La versione 1.9.0-rc01 contiene questi commit.
Correzioni di bug
- Aggiorna l'osservatore della registrazione della composizione in modo che venga chiamato prima della composizione iniziale. (I4adca, b/430600932)
Versione 1.9.0-beta03
16 luglio 2025
androidx.compose.runtime:runtime-*:1.9.0-beta03 è stato rilasciato. La versione 1.9.0-beta03 contiene questi commit.
Versione 1.9.0-beta02
2 luglio 2025
androidx.compose.runtime:runtime-*:1.9.0-beta02 è stato rilasciato. La versione 1.9.0-beta02 contiene questi commit.
Correzioni di bug
- È stata ridotta la durata di riferimento dei valori nella tabella degli slot tra le composizioni. Esistono casi in cui un riferimento in una tabella degli slot potrebbe durare un frame in più del necessario. (I49e74, b/418516940)
- Rimuovi la codifica Kotlin per i metodi di ricarica rapida. (Ic56a3, b/426871325)
Versione 1.9.0-beta01
18 giugno 2025
androidx.compose.runtime:runtime-*:1.9.0-beta01 è stato rilasciato. La versione 1.9.0-beta01 contiene questi commit.
Modifiche alle API
- È stata aggiunta un'API di strumentazione per l'analisi delle informazioni sull'origine aggiunte dal compilatore Compose. (Iceaf9, b/408492167)
SnapshotStateSetora implementaParcelablesu Android, pertanto è supportato l'utilizzo come parte dirememberSaveable { ... }. (I755dd, b/378623803)SnapshotStateListora implementaParcelablesu Android, pertanto è supportato l'utilizzo come parte dirememberSaveable { ... }. (Id18be, b/378623803)movableContentOf()ora è contrassegnato con l'annotazione@RememberInComposition, che consente a lint di rilevare utilizzi errati (I2738d)- È stata aggiornata l'API sperimentale per gli osservatori di composizione per consentire un'osservazione più completa delle cause di ricomposizione (I32b6a)
- Modifica
setDiagnosticStackTraceEnabledin sperimentale per tenere conto del futuro sviluppo di questa funzionalità. (I11db3) currentCompositeKeyHashè stato ritirato. Utilizza invececurrentCompositeKeyHashCode. L'API di sostituzione codifica lo stesso hash con più bit, il che riduce in modo esponenziale la possibilità che due gruppi casuali non correlati nella gerarchia di composizione abbiano la stessa chiave hash. (I4cb6a, b/177562901)- I progetti rilasciati con Kotlin 2.0 richiedono l'utilizzo di KGP 2.0.0 o versioni successive (Idb6b5)
@Stable,@Immutablee@StableMarkersono stati spostati nell'annotazione in fase di runtime (in modo compatibile). Ora puoi fare affidamento sull'annotazione in fase di runtime se vuoi utilizzare queste annotazioni da librerie che non dipendono da Compose. (I23a16)- È stato rinominato l'overload
rememberSaveableche accetta unKSerializerinrememberSerializable. Questa modifica chiarisce l'utilizzo previsto conkotlinx.serialization. Il supporto delle classikotlinx.Serializablegeneriche direttamente inrememberSaveablerichiederebbe un parametro di tiporeified, che interromperebbe la compatibilità dell'origine richiedendo a tutti i siti di chiamata di fornire informazioni sul tipo reificato in fase di compilazione. (Idb875, I38627, b/376028110)
Correzioni di bug
- Le composizioni impostate con contenuti in pausa che sono stati annullati devono essere eliminate. Ora viene controllato dalla composizione e verrà generato un errore se viene riutilizzato. (I2daa5, b/406792785)
- È stata corretta la composizione sospendibile in modo che non invii più un
onForgottenspurio per ricordare gli osservatori quando la composizione sospendibile viene eliminata.RememberObserversin una composizione sospendibile annullata deve ricevere solo un onAbandoned. (I26f54) - È stato risolto un problema relativo ai contenuti mobili per cui le invalidazioni che arrivano nelle fasi avanzate dell'elaborazione dei contenuti mobili vengono aggiunte al compositore, ma non vengono aggiornate quando i contenuti vengono spostati, causando la ricomposizione dei contenuti nella posizione errata. (Icd2fa, b/409439507)
- È stato risolto un problema che si verificava quando i contenuti mobili venivano invalidati dopo la composizione, ma prima dello spostamento. (I99eac, b/229001114)
- La chiamata a
remove()di un iteratore di elenco prodotto daSnapshotStateListdopo la chiamata aprevious()potrebbe aver rimosso l'elemento errato dall'elenco e non corrisponde a ciò che faArrayListper la stessa sequenza di chiamate. (I05ab7, b/417493222) - È stato risolto un problema di ordinamento con l'invio di
onForgottonche potrebbe, ad esempio, causare l'esecuzione dionDisposedi effetti usa e getta nell'ordine sbagliato. (Ic1c91, b/417450712) - Correzione per il riutilizzo della gestione dello stato nella composizione sospendibile (Ife96e, b/404058957)
- È stato corretto lo stato di riutilizzo quando una composizione è stata messa in pausa e riavviata, ma è stato necessario ricomporre alcuni stati precedentemente in pausa perché alcuni stati letti sono cambiati mentre la composizione era in pausa. (I441d1, b/416209738)
- È stata completata la correzione dell'invio del ricordo della composizione sospendibile per il problema b/404058957. La correzione precedente era incompleta. (I1afd4, b/404058957)
OffsetApplierora esegue correttamente l'override diapply(), introdotto con la composizione sospendibile. La sua assenza potrebbe causare un'eccezione nella composizione sospendibile durante l'aggiornamento dei nodi virtuali. (Idbf31, b/409291131)- È stato risolto un deadlock che potrebbe interessare gli utenti di Molecule quando una chiamata sospesa a
FrameClock.withFrameNanosviene annullata durante l'invio di un frame. (I89cab, b/407027032) - Il ricompositore potrebbe rimanere inattivo con contenuti mobili (Ie5416, b/409267170)
- L'ordine in cui compaiono
onReuseeonDeactivatepotrebbe essere invertito durante la composizione in pausa. Ora è garantito che si verifichino nell'ordine dionDeactivate/onReuse. (I996e4, b/404058957) - È stato corretto l'invio degli osservatori remember nella composizione sospendibile per evitare l'invio di elementi memorizzati/dimenticati nella stessa applicazione. (I570b2, b/404645679, b/407931790)
- È stato attivato
LifecycleRegistryin modalità non sicura in Compose Multiplatform per disattivare i controlliMainThreade risolvere i problemi di threading. Per ulteriori dettagli, consulta CMP-8227. (Icee87)
Contributo esterno
- È stato corretto un bug che interessava gli utenti di Molecule per cui l'utilizzo di
RecompositionMode.Immediatepoteva causare ricomposizioni mancanti. (I9f3a9, b/419527812) - Sono esposti i metodi getter
PausableCompositionisAppliedeisCancelledche consentono di controllare lo stato diPausableComposition. (I994aa) - Aggiunta di
AnnotationTarget.FUNCTIONall'annotazioneFunctionKeyMeta. (I08021)
Versione 1.9.0-alpha04
4 giugno 2025
androidx.compose.runtime:runtime-*:1.9.0-alpha04 è stato rilasciato. La versione 1.9.0-alpha04 contiene questi commit.
Modifiche alle API
SnapshotStateSetora implementa Parcelable su Android, quindi è supportato per l'utilizzo come parte dirememberSaveable { ... }. (I755dd, b/378623803)SnapshotStateListora implementa Parcelable su Android, quindi è supportato per l'utilizzo come parte dirememberSaveable { ... }. (Id18be, b/378623803)movableContentOf()ora è contrassegnato con l'annotazione@RememberInComposition, che consente a lint di rilevare utilizzi errati (I2738d)- È stata aggiornata l'API sperimentale per gli osservatori di composizione per consentire un'osservazione più completa delle cause di ricomposizione (I32b6a)
Correzioni di bug
- È stato risolto un problema di ordinamento con l'invio di
onForgottonche potrebbe, ad esempio, causare l'esecuzione dionDisposedi effetti usa e getta nell'ordine sbagliato. (Ic1c91, b/417450712) - Correzione per il riutilizzo della gestione dello stato nella composizione sospendibile (Ife96e, b/404058957)
- Correzione di bug minori per rendere compatibile il rilevamento delle raccolte modificabili sia per K1 che per K2 (Ie4878)
- Correzione di bug minore per rendere la ricerca di annotazioni sugli accessor di proprietà sottoposti a override compatibile sia con K1 che con K2 (I9900d)
Contributo esterno
- È stato corretto un bug che interessava gli utenti di Molecule per cui l'utilizzo di
RecompositionMode.Immediatepoteva causare ricomposizioni mancanti. (I9f3a9, b/419527812) - Sono stati esposti i metodi getter
PausableCompositionisApplied eisCancelledche consentono di controllare lo stato diPausableComposition. (I994aa)
Versione 1.9.0-alpha03
20 maggio 2025
androidx.compose.runtime:runtime-*:1.9.0-alpha03 è stato rilasciato. La versione 1.9.0-alpha03 contiene questi commit.
Modifiche alle API
- Modifica
setDiagnosticStackTraceEnabledin sperimentale per tenere conto del futuro sviluppo di questa funzionalità. (I11db3)
Correzioni di bug
- È stato corretto lo stato di riutilizzo quando una composizione è stata messa in pausa e riavviata, ma è stato necessario ricomporre alcuni stati precedentemente in pausa perché alcuni stati letti sono cambiati mentre la composizione era in pausa. (I441d1, b/416209738)
- È stata completata la correzione del problema di memorizzazione della composizione sospendibile per il problema b/404058957, la cui correzione precedente era incompleta. (I1afd4, b/404058957)
SaveableStateHolder.SaveableStateProviderora fornisce unaLocalSavedStateRegistryOwnerai suoi contenuti tramite la composizione. (Ia2761, b/413108878)androidx.compose.runtime.saveableora dipende daandroidx.lifecycle.runtime.compose. (I53228, b/413108878)
Versione 1.9.0-alpha02
7 maggio 2025
androidx.compose.runtime:runtime-*:1.9.0-alpha02 è stato rilasciato. La versione 1.9.0-alpha02 contiene questi commit.
Modifiche alle API
rememberSaveabledeprecato con una "chiave" personalizzata. Ignora l'ambito posizionale, causando bug di stato e comportamenti incoerenti (ad es. condivisione o perdita di stato involontaria, problemi inLazyLayoutsnidificati). Rimuovi il parametro "key" per utilizzare l'ambito posizionale per uno stato coerente e con ambito locale. Per ulteriori dettagli, consulta il messaggio di commit completo. (I5e6ff, b/357685851)
Correzioni di bug
OffsetApplierora esegue correttamente l'override diapply(), introdotto con la composizione sospendibile. Se non è presente, la composizione sospendibile potrebbe generare un'eccezione durante l'aggiornamento dei nodi virtuali. (Idbf31, b/409291131)- È stato risolto un deadlock che potrebbe interessare gli utenti di Molecule quando una chiamata sospesa a
FrameClock.withFrameNanosviene annullata durante l'invio di un frame. (I89cab, b/407027032) - Il ricompositore potrebbe rimanere inattivo con lo stato dei contenuti mobili ancora in attesa di essere eliminati. Normalmente ciò non si verifica perché lo stato dei contenuti mobili viene eliminato nel ciclo principale di Recomposer. Tuttavia, ciò può verificarsi nella composizione sospendibile quando i contenuti mobili vengono eliminati durante
resume()(Ie5416, b/409267170) - L'ordine in cui compaiono
onReuseeonDeactivatepotrebbe essere invertito durante la composizione in pausa. Ora è garantito che si verifichino nell'ordine dionDeactivate/onReuse. (I996e4, b/404058957)
Versione 1.9.0-alpha01
23 aprile 2025
androidx.compose.runtime:runtime-*:1.9.0-alpha01 è stato rilasciato. La versione 1.9.0-alpha01 contiene questi commit.
Modifiche al comportamento
- I controlli Lint forniti con Compose ora richiedono una versione minima di AGP 8.8.2. Se non riesci a eseguire l'upgrade di AGP, puoi eseguire l'upgrade di Lint separatamente utilizzando
android.experimental.lint.version=8.8.2(o una versione più recente) ingradle.properties. Per eseguire i controlli lint di Compose all'interno dell'IDE, è necessario Android Studio Ladybug o versioni successive.
Modifiche alle API
currentCompositeKeyHashè stato ritirato. Utilizza invececurrentCompositeKeyHashCode. L'API di sostituzione codifica lo stesso hash con più bit, il che riduce in modo esponenziale la possibilità che due gruppi casuali non correlati nella gerarchia di composizione abbiano la stessa chiave hash. (I4cb6a, b/177562901)- I progetti rilasciati con Kotlin 2.0 richiedono l'utilizzo di KGP 2.0.0 o versioni successive (Idb6b5)
@Stable,@Immutablee@StableMarkersono stati spostati nell'annotazione in fase di runtime (in modo compatibile). Ora puoi fare affidamento sull'annotazione in fase di runtime se vuoi utilizzare queste annotazioni da librerie che non dipendono da Compose. (I23a16)- Rimuove
onCreatingeonDisposingperché sono stati ritirati e rinominati inonPreCreateeonPreDispose. Questa modifica completa la ridenominazione. (I97461) - Espone una variabile locale di composizione che consente di allegare una traccia dello stack di composizione in base alla posizione di un nodo di composizione nella composizione. (Ie0bda, b/354163858)
- Introduci le analisi dello stack di Compose diagnostiche basate sulle informazioni sull'origine archiviate nella composizione. (I3db9f, b/354163858)
- Ritira
runWithTimingDisableda favore dirunWithMeasurementDisabled, che descrive più chiaramente il comportamento: tutte le metriche vengono sospese. Inoltre, espone la superclasseMicrobenchmarkScopepoiché non è possibile dichiarare nuovamente la funzionerunWithMeasurementDisabledper aprire l'accesso, in quanto è inline. (I9e23b, b/389149423, b/149979716) - Aggiunge
@FrequentlyChangingValue: un'annotazione che può contrassegnare funzioni e getter di proprietà per indicare che non devono essere chiamati direttamente all'interno della composizione, in quanto ciò potrebbe causare ricomposizioni frequenti. Ad esempio, per contrassegnare i valori della posizione di scorrimento e i valori di animazione. Gli avvisi vengono forniti da un controllo lint corrispondente. (I83630, b/234042500) - Aggiunge
@RememberInComposition: un'annotazione che può contrassegnare costruttori, funzioni e getter di proprietà per indicare che non devono essere chiamati direttamente all'interno della composizione, senza essere ricordati. Gli errori verranno generati da un controllo lint corrispondente. Questa annotazione può essere utilizzata per contrassegnare le dichiarazioni che restituiscono oggetti con stato / mutabili, oggetti la cui identità è importante mantenere nelle varie composizioni o oggetti la cui istanziazione è costosa e che devono essere memorizzati nella cache nelle varie composizioni. (Ie7db0) - È stato aggiunto un nuovo overload
rememberSaveableche supportaKSerializerper la persistenza dello stato con controllo del tipo utilizzando KotlinX Serialization. L'API esistente basata suSaverrimane supportata. (Iea4ab, b/376028110)
Correzioni di bug
- È stato corretto l'invio degli osservatori remember nella composizione sospendibile per evitare l'invio di elementi memorizzati/dimenticati nella stessa applicazione. (I570b2, b/404645679, b/407931790)
- I metodi
SnapshotObserveronCreating sono stati rinominati inonPreCreateeonDisposinginonPreDisposein modo che corrispondano alle linee guida per le API. I metodi precedenti sono deprecati e i nuovi metodi chiamano per impostazione predefinita quelli precedenti, quindi le implementazioni esistenti di questa interfaccia continueranno a funzionare finché i metodi non verranno rimossi. Questi metodi verranno rimossi nella versione 1.9.0 alpha in un CL successivo che seguirà a breve questo. Verranno rimossi dalla versione beta 1.8 prima della versione stabile 1.8. (I6d753) - È stato risolto un problema per cui i valori memorizzati potevano essere dimenticati e ricalcolati in modo errato durante la ricomposizione di un gruppo omesso che appare dopo un gruppo mobile (I62cab, b/383769314)
- È stato aggiunto il supporto per le analisi dello stack di Compose in
LaunchedEffecterememberCoroutineScope(I705c0, b/354163858) - I controlli lint di Compose ora richiedono una versione AGP minima 8.8.2 dalla riga di comando e almeno Android Studio Ladybug per il supporto IDE. Se utilizzi una versione precedente di AGP, puoi impostare
android.experimental.lint.version=8.8.2in gradle.properties per eseguire l'upgrade della versione di Lint senza influire su AGP. (I6f2a8)
Contributo esterno
- Aggiunta di
AnnotationTarget.FUNCTIONall'annotazioneFunctionKeyMeta. (I08021)
Versione 1.8
Versione 1.8.3
18 giugno 2025
androidx.compose.runtime:runtime-*:1.8.3 è stato rilasciato. La versione 1.8.3 contiene questi commit.
Versione 1.8.2
20 maggio 2025
androidx.compose.runtime:runtime-*:1.8.2 è stato rilasciato. La versione 1.8.2 contiene questi commit.
Versione 1.8.1
7 maggio 2025
androidx.compose.runtime:runtime-*:1.8.1 è stato rilasciato. La versione 1.8.1 contiene questi commit.
Versione 1.8.0
23 aprile 2025
androidx.compose.runtime:runtime-*:1.8.0 è stato rilasciato. La versione 1.8.0 contiene questi commit.
Versione 1.8.0-rc03
9 aprile 2025
androidx.compose.runtime:runtime-*:1.8.0-rc03 è stato rilasciato. La versione 1.8.0-rc03 contiene questi commit.
Versione 1.8.0-rc02
26 marzo 2025
androidx.compose.runtime:runtime-*:1.8.0-rc02 è stato rilasciato. La versione 1.8.0-rc02 contiene questi commit.
Versione 1.8.0-rc01
12 marzo 2025
androidx.compose.runtime:runtime-*:1.8.0-rc01 è stato rilasciato. La versione 1.8.0-rc01 contiene questi commit.
Modifiche alle API
- I metodi
SnapshotObserveronCreating sono stati rinominati inonPreCreateeonDisposinginonPreDisposein modo che corrispondano alle linee guida per le API. I metodi precedenti sono deprecati e i nuovi metodi chiamano per impostazione predefinita quelli precedenti, quindi le implementazioni esistenti di questa interfaccia continueranno a funzionare finché i metodi non verranno rimossi. Questi metodi verranno rimossi nella versione 1.9.0 alpha in un CL successivo che seguirà a breve questo. Verranno rimossi dalla versione beta 1.8 prima della versione stabile 1.8. (I6d753)
Versione 1.8.0-beta03
26 febbraio 2025
androidx.compose.runtime:runtime-*:1.8.0-beta03 è stato rilasciato. La versione 1.8.0-beta03 contiene questi commit.
Versione 1.8.0-beta02
12 febbraio 2025
androidx.compose.runtime:runtime-*:1.8.0-beta02 è stato rilasciato. La versione 1.8.0-beta02 contiene questi commit.
Correzioni di bug
- Rilancia l'eccezione rilevata nella composizione sospendibile .(384486d)
Versione 1.8.0-beta01
29 gennaio 2025
androidx.compose.runtime:runtime-*:1.8.0-beta01 è stato rilasciato. La versione 1.8.0-beta01 contiene questi commit.
Modifiche alle API
- Risolve un problema per cui la generazione di un errore durante la composizione che non deriva da Exception potrebbe causare l'errore "La composizione in attesa non è stata applicata". (I356be, b/382094412)
Versione 1.8.0-alpha08
15 gennaio 2025
androidx.compose.runtime:runtime-*:1.8.0-alpha08 è stato rilasciato. La versione 1.8.0-alpha08 contiene questi commit.
Versione 1.8.0-alpha07
11 dicembre 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha07 è stato rilasciato. La versione 1.8.0-alpha07 contiene questi commit.
Modifiche alle API
- È stata aggiunta un'API di strumentazione che aiuta lo strumento di controllo del layout a correlare le composizioni secondarie alla composizione principale nei casi in cui un nodo non viene utilizzato per collegare le composizioni. (I4ce3d)
- Sono state rese interne anziché pubbliche le costanti aritmetiche e speciali per
SnapshotId. Se necessario, è possibile eseguire operazioni aritmetiche su unSnasphotIdconvertendolo in unIntoLongutilizzando rispettivamentetoInt()otoLong(). (Ic3a57)
Contributo esterno
- Ottimizza lo spazio di archiviazione per i parametri
movableContentOf. (ed87177)
Versione 1.8.0-alpha06
13 novembre 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha06 è stato rilasciato. La versione 1.8.0-alpha06 contiene questi commit.
Modifiche alle API
- Modifiche all'API
PausableComposition. Queste modifiche che causano interruzioni rispetto alle versioni precedenti di 1.8.0-alpha (dalla versione 1.8.0-alpha02), ma, poiché si tratta di nuove API nella versione 1.8.0, la compatibilità retroattiva non viene mantenuta in quanto le API sono ancora in versione alpha. (I39819) - Aggiunge API di strumentazione per osservare la creazione di nuove composizioni all'interno di un ricompositore (Iaeb7e)
- Aggiunta di
snapshotId, di tipoLong, aSnapshote ritiro diid. L'ID di uno snapshot è stato modificato daIntaLongper evitare l'overflow dell'ID snapshot sui sistemi con frame rate molto elevati e animazioni a lunga esecuzione. Il tipo è stato creato in modo che il valore previsto/effettivo consenta a questo tipo di essereInto di altro tipo su piattaforme che non hanno un tipoLongnativo. Le piattaforme che non hanno unLongnativo, come JavaScript, devono evitare frame rate elevati (oltre 1000 FPS), che causerebbero un overflow perIntcirca ogni 24 giorni. (I38ac3, b/374821679)
Correzioni di bug
providesDefaultfisso 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 è stato rilasciato. La versione 1.8.0-alpha05 contiene questi commit.
Correzioni di bug
- Correzione del problema di overflow dello stack durante l'aggiunta di
Int.MAX_VALUEaSnapshotIdSet. (b/370536104, Ic4179f6) - Micro-ottimizzazioni di runtime (I50c60)
- Consenti a R8 di rimuovere le chiamate runtimeCheck di debug (I8c44)
- Rendi
compoundKeyOfiterativo anziché ricorsivo (I5817f)
Contributo esterno
- Implementa gli stack con gli elenchi di raccolte (I7d47c)
Versione 1.8.0-alpha04
16 ottobre 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha04 è stato rilasciato. La versione 1.8.0-alpha04 contiene questi commit.
Miglioramenti delle prestazioni
- Fornisci l'ID snapshot per i record di stato nel costruttore (85c00f)
- Refactoring di
SnapshotState***per evitare errori di verifica della classe (6ee4a6) - Correzione delle regole R8 per impedire l'incorporamento di throw (5beb92)
- Micro-ottimizza le operazioni (d73c5c)
- Ottimizzare le allocazioni
SynchronizedObjectsulla JVM (2b043f)
Versione 1.8.0-alpha03
2 ottobre 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha03 è stato rilasciato. La versione 1.8.0-alpha03 contiene questi commit.
Miglioramenti delle prestazioni
- Crea in modo differito il contesto secondario per
rememberCoroutineScope(f61464)rememberCoroutineScopeviene in genere utilizzato per avviare le coroutine in risposta agli eventi che si verificano dopo la composizione. In alcuni scenari questi eventi potrebbero non verificarsi mai, con conseguenti costi aggiuntivi per la creazione e l'annullamento dei lavori senza alcun vantaggio.- Fai in modo che l'ambito restituito da
rememberCoroutineScopecrei il relativocoroutineContextin modo differito quando viene eseguito l'accesso, evitando completamente la creazione e l'annullamento del job se l'ambito non viene mai utilizzato.
Versione 1.8.0-alpha02
18 settembre 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha02 è stato 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 sospensione è necessario il supporto del compilatore, attualmente in fase di sviluppo. (I3394b)
Versione 1.8.0-alpha01
4 settembre 2024
androidx.compose.runtime:runtime-*:1.8.0-alpha01 è stato rilasciato. La versione 1.8.0-alpha01 contiene questi commit.
Versione 1.7
Versione 1.7.8
12 febbraio 2025
androidx.compose.runtime:runtime-*:1.7.8 è stato rilasciato. La versione 1.7.8 contiene questi commit.
Versione 1.7.7
29 gennaio 2025
androidx.compose.runtime:runtime-*:1.7.7 è stato rilasciato. Nessuna modifica rispetto alla versione 1.7.6.
androidx.compose.runtime:runtime-*:1.7.6 è stato rilasciato. La versione 1.7.6 contiene questi commit.
Versione 1.7.5
30 ottobre 2024
androidx.compose.runtime:runtime-*:1.7.5 è stato rilasciato. La versione 1.7.5 contiene questi commit.
Versione 1.7.4
16 ottobre 2024
androidx.compose.runtime:runtime-*:1.7.4 è stato rilasciato. La versione 1.7.4 contiene questi commit.
Versione 1.7.3
2 ottobre 2024
androidx.compose.runtime:runtime-*:1.7.3 è stato rilasciato. La versione 1.7.3 contiene questi commit.
Versione 1.7.2
18 settembre 2024
androidx.compose.runtime:runtime-*:1.7.2 è stato rilasciato. La versione 1.7.2 contiene questi commit.
Versione 1.7.1
10 settembre 2024
- Nessuna modifica agli artefatti Android. Sono stati rimossi
-desktopartefatti e sono stati aggiunti-jvmStubse-linuxx64Stubsartefatti. Nessuno di questi target è destinato all'uso, sono segnaposto per supportare gli sforzi di Jetbrains Compose.
Versione 1.7.0
4 settembre 2024
androidx.compose.runtime:runtime-*:1.7.0 è stato rilasciato. La versione 1.7.0 contiene questi commit.
Modifiche importanti dalla versione 1.6.0
- È stata aggiunta la possibilità di fornire una composizione locale calcolata in base ai valori di altre composizioni locali per impostazione predefinita, utilizzando
compositionLocalWithComputedDefault()o fornendo una funzione lambda da utilizzare per calcolare il valore utilizzandoprovidesComputedanzichéprovides. - Il valore di una composizione locale può essere ottenuto utilizzando la proprietà
currentValuedella composizione locale accessibile dall'interno della funzione lambda che calcola il valore. Questo valore viene utilizzato al posto dicurrent, accessibile solo nelle funzioni@Composable. (Iadbc0) - Gli oggetti di stato appena creati sono immediatamente accessibili da altri snapshot, incluso lo snapshot globale, con il loro stato iniziale. Le modifiche successive non sono visibili finché non viene applicato lo snapshot in cui è stato creato l'oggetto.
- Lo stato iniziale di
mutableStateOf(), nonché delle relative versioni primitive, è il valore passato come parametro amutableStateOf(). Lo stato iniziale dimutableStateListOf()emutableStateMapOf()è vuoto. - Sono stati aggiunti
Snapshot.isInSnapshoteSnapshot.PreexistingSnapshotId, che vengono utilizzati per consentire a un oggetto stato di essere immediatamente accessibile dallo snapshot globale al momento della sua creazione. - Gli oggetti di stato personalizzati possono supportare l'accessibilità immediata seguendo il pattern delle modifiche apportate agli oggetti snapshot integrati. (I84a17)
- Attiva
nonSkippingGroupOptimizationper le librerie di composizione. In questo modo, il codice generato per tutte le funzioni componibili non riavviabili in androidx è più efficiente. In futuro prevediamo di attivare questa opzione per impostazione predefinita. I(acbc08) - Invalida le espressioni lambda componibili nelle sottocomposizioni nello stesso frame. (98301c)
- Chiama
onReleasecallback nello stesso ordine dionForgotten. (2cd790) - Attiva la modalità di salto avanzato (ed1766)
- Rendi
currentCompoundHashKeyunico in più casi (d4a872)
Versione 1.7.0-rc01
21 agosto 2024
androidx.compose.runtime:runtime-*:1.7.0-rc01 è stato 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 è stato 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 è stato 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 è stato 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 è stato 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 è stato 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 è stato 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 è stato 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 è stato 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 è stato rilasciato. La versione 1.7.0-alpha07 contiene questi commit.
Nuove funzionalità
- È stata aggiunta la possibilità di fornire una composizione locale calcolata in base ai valori di altre composizioni locali per impostazione predefinita, utilizzando
compositionLocalWithComputedDefault()o fornendo una funzione lambda da utilizzare per calcolare il valore utilizzandoprovidesComputedanzichéprovides. - Il valore di una composizione locale può essere ottenuto utilizzando la proprietà
currentValuedella composizione locale accessibile dall'interno della funzione lambda che calcola il valore. Questo valore viene utilizzato al posto dicurrent, accessibile solo nelle funzioni@Composable. (Iadbc0)
Modifiche alle API
- Gli oggetti di stato appena creati sono immediatamente accessibili da altri snapshot, incluso lo snapshot globale, con il loro stato iniziale. Le modifiche successive non sono visibili finché non viene applicato lo snapshot in cui è stato creato l'oggetto.
- Lo stato iniziale di
mutableStateOf(), nonché delle relative versioni primitive, è il valore passato come parametro amutableStateOf(). Lo stato iniziale dimutableStateListOf()emutableStateMapOf()è vuoto. - Sono stati aggiunti
Snapshot.isInSnapshoteSnapshot.PreexistingSnapshotId, che vengono utilizzati per consentire a un oggetto stato di essere immediatamente accessibile dallo snapshot globale al momento della sua creazione. - Gli oggetti di stato personalizzati possono supportare l'accessibilità immediata seguendo il pattern delle modifiche apportate agli oggetti snapshot integrati. (I84a17)
Correzioni di bug
- È stato corretto l'unione di
readObservernegli snapshot nidificati. Ciò ha causato una mancata invalidazione degli stati derivati nidificati quando vengono utilizzati all'interno di unsnapshotFlow. (Idf138)
Versione 1.7.0-alpha06
3 aprile 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha06 è stato rilasciato. La versione 1.7.0-alpha06 contiene questi commit.
Correzioni di bug
- Correzione della gestione dei valori singoli forniti
providesDefault(538f45) - Evita un deadlock in Recomposer che accede al frame clock (07e5c6)
Versione 1.7.0-alpha05
20 marzo 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha05 è stato rilasciato. La versione 1.7.0-alpha05 contiene questi commit.
Correzioni di bug
- Annulla le modifiche tardive alla composizione disattivata (5950bc)
Versione 1.7.0-alpha04
6 marzo 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha04 è stato rilasciato. La versione 1.7.0-alpha04 contiene questi commit.
Miglioramenti delle prestazioni
- Chiama
Snapshot.currentuna volta per ogni valutazione dello stato derivato (ee7daf) - Leggi
currentRecorduna volta per osservazione nella composizione (b882b2) - Rimuovi l'allocazione accidentale dell'iteratore in
snapshotFlow(231e56) - Attiva
nonSkippingGroupOptimizationper le librerie di composizione. In questo modo, il codice generato per tutte le funzioni componibili non riavviabili in androidx è più efficiente. In futuro prevediamo di attivare questa opzione per impostazione predefinita. I(acbc08)
Versione 1.7.0-alpha03
21 febbraio 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha03 è stato rilasciato. La versione 1.7.0-alpha03 contiene questi commit.
Modifiche alle API
- Introduzione di un'opzione per sostituire i gruppi per migliorare il rilevamento delle modifiche (0941b5)
Miglioramenti delle prestazioni
- Migliora l'allocazione della memoria durante il rilevamento delle modifiche (53e7fd)
- Correzione di una perdita di memoria nel compositore (0e097d)
- Utilizza
ScopeMapper passare le invalidazioni durante la ricomposizione (e19a7e) - Ottimizza la mappa delle invalidazioni in modo da conservare solo gli stati derivati (f11c44)
- Sostituisci gli utilizzi di
IdentityArraySetconScatterSet(db572e) - Ottimizza
removeScopeinScopeMap(bb0530)
Versione 1.7.0-alpha02
7 febbraio 2024
androidx.compose.runtime:runtime-*:1.7.0-alpha02 è stato rilasciato. La versione 1.7.0-alpha02 contiene questi commit.
Correzioni di bug
- Invalida le espressioni lambda componibili nelle sottocomposizioni nello stesso frame. (98301c)
- Chiama
onReleasecallback nello stesso ordine dionForgotten. (2cd790) - Filtro modificato indica stati non osservati in
snapshotFlow. (796b80)
Miglioramenti delle prestazioni
- Modifica l'osservatore dello snapshot sul posto 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 è stato rilasciato. La versione 1.7.0-alpha01 contiene questi commit.
Ottimizzazioni del rendimento
- Aggiunta della possibilità di creare slot dopo l'aggiunta di un gruppo secondario (b5960c)
- Ottimizza la registrazione delle modifiche degli stati degli snapshot (28c3fe)
- Attiva la modalità di salto avanzato (ed1766)
Correzioni di bug
- Tieni conto dei metadati dei parametri predefiniti nella memorizzazione intrinseca (096665)
- Rendi
currentCompoundHashKeyunico in più casi (d4a872) - Vengono realizzati gruppi quando si esce dalla chiamata di funzione incorporata. (2a90fc)
Versione 1.6
Versione 1.6.8
12 giugno 2024
androidx.compose.runtime:runtime-*:1.6.8 è stato rilasciato. La versione 1.6.8 contiene questi commit.
Versione 1.6.7
1° maggio 2024
androidx.compose.runtime:runtime-*:1.6.7 è stato rilasciato. La versione 1.6.7 contiene questi commit.
Versione 1.6.6
17 aprile 2024
androidx.compose.runtime:runtime-*:1.6.6 è stato rilasciato. Nessuna modifica dall'ultima release.
Versione 1.6.5
3 aprile 2024
androidx.compose.runtime:runtime-*:1.6.5 è stato rilasciato. La versione 1.6.5 contiene questi commit.
Versione 1.6.4
20 marzo 2024
androidx.compose.runtime:runtime-*:1.6.4 è stato rilasciato. La versione 1.6.4 contiene questi commit.
Versione 1.6.3
6 marzo 2024
androidx.compose.runtime:runtime-*:1.6.3 è stato rilasciato. La versione 1.6.3 contiene questi commit.
Versione 1.6.2
21 febbraio 2024
androidx.compose.runtime:runtime-*:1.6.2 è stato rilasciato. La versione 1.6.2 contiene questi commit.
Versione 1.6.1
7 febbraio 2024
androidx.compose.runtime:runtime-*:1.6.1 è stato rilasciato. La versione 1.6.1 contiene questi commit.
Correzioni di bug
- Chiama
onReleasecallback nello stesso ordine dionForgotten. (2cd790) - Filtro modificato indica stati non osservati in
snapshotFlow. (796b80)
Versione 1.6.0
24 gennaio 2024
androidx.compose.runtime:runtime-*:1.6.0 è stato rilasciato. La versione 1.6.0 contiene questi commit.
Modifiche importanti dalla versione 1.5.0
Nuove funzionalità
- Rilancia le eccezioni che vengono eliminate durante il ciclo di ricomposizione (4dff9a)
Ottimizzazioni del rendimento
- Ottimizza la registrazione delle modifiche degli stati degli snapshot (28c3fe)
- Ottimizza
rememberSaveable(f01d79) - Posticipa la rilettura degli stati derivati fino alla registrazione delle modifiche (f38099)
- Migliora la fornitura di valori locali di composizione (a337ea)
Correzioni di bug
- Correzione della perdita di memoria della tabella degli slot (73fcfe)
- Salta la ricomposizione delle composizioni secondarie che verranno rimosse. (Ieeb99, b/254645321)
- Attiva i cicli di vita di
RememberObserversolo quando vengono memorizzati nel calcolo del ricordo. (f6b4dc) - Limita l'acquisizione di
$dirtyalle espressioni lambda inline. (acfca0) - Correzione del problema per cui a volte i contenuti mobili ricevono le impostazioni locali di composizione errate. (035cd6)
Versione 1.6.0-rc01
10 gennaio 2024
androidx.compose.runtime:runtime-*:1.6.0-rc01 è stato 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 è stato 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 è stato 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 è stato rilasciato. La versione 1.6.0-beta01 contiene questi commit.
Modifiche alle API
- Propaga determinati valori di stabilità nell'annotazione. (274a4c)
Correzioni di bug
- Utilizza la policy referenziale per lo stato dell'ambito locale di composizione nel contesto. (83361c)
- Limita l'acquisizione di $dirty alle espressioni lambda inline. (acfca0)
- Correzione del problema per cui a volte i contenuti mobili ricevono le impostazioni locali di composizione errate. (035cd6)
- Utilizza hashmaps non allocati più veloci in
RecomposeScopeImpl. (d79494) - Usa
ObjectIntMapinDerivedState. (21862e) - Usa
IntRefper intSnapshotThreadLocalinDerivedState. (04eaf4)
Versione 1.6.0-alpha08
18 ottobre 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha08 è stato rilasciato. La versione 1.6.0-alpha08 contiene questi commit.
Correzioni di bug
- Attiva i cicli di vita di
RememberObserversolo quando vengono memorizzati nel calcolo del ricordo. (f6b4dc) - Migliorare l'ordinamento delle allocazioni nell'elenco delle invalidazioni. (954d63)
- Utilizza le nuove mappe non allocative in
SnapshotStateObserver. (4303ce) - Cancella le invalidazioni quando la composizione viene disattivata. (e001be)
Versione 1.6.0-alpha07
4 ottobre 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha07 è stato rilasciato. La versione 1.6.0-alpha07 contiene questi commit.
Modifiche alle API
SnapshotStateListora è contrassegnato comeRandomAccessper consentire l'utilizzo della versione a indicizzazione diretta degli helper per gli elenchi. (I5210c, b/219554654)
Versione 1.6.0-alpha06
20 settembre 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha06 è stato 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 è stato 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 è stato rilasciato. La versione 1.6.0-alpha04 contiene questi commit.
Nuove funzionalità
- Rilancia le eccezioni che vengono eliminate durante il ciclo di ricomposizione (4dff9a)
Modifiche alle API
- È stato aggiunto un metodo per disattivare
ReusableComposition, rimuovendo le osservazioni ma mantenendo i nodi. La composizione disattivata può essere riattivata chiamando il numerosetContent. (Ib7f31) - Aggiungi l'interfaccia
ReusableCompositionper 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 è stato rilasciato. La versione 1.6.0-alpha03 contiene questi commit.
Correzioni di bug
- Correzione della nuova ottimizzazione
CompositionLocalProvider(3118e88) - Corregge la modalità di smontaggio dei nodi di contenuti mobili. (5e3d59b)
Versione 1.6.0-alpha02
26 luglio 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha02 è stato rilasciato. La versione 1.6.0-alpha02 contiene questi commit.
Nuove funzionalità e miglioramenti del rendimento
- Ottimizza
rememberSaveable(f01d79) - Posticipa la rilettura degli stati derivati fino alla registrazione delle modifiche (f38099)
- Migliora la fornitura di valori locali di composizione (a337ea)
SideEffectè contrassegnato come@ExplicitGroupsComposableper evitare di generare un gruppo. (I74815)- Evita di confrontare le mappe locali di composizione sul riutilizzo (782071)
Modifiche alle API
- È stato aggiunto un overload di caso speciale per
CompositionLocalProvidersche evita l'overhead utilizzato per velocizzare la fornitura di più valori, ma che è overhead quando viene fornito un singolo valore. (I6d640, b/288169379)
Correzioni di bug
- Correzione della perdita di memoria della tabella degli slot (73fcfe)
- È stato corretto il modo in cui ripristiniamo
rememberSaveablequandostateSaverrestituisce null (90748c)
Versione 1.6.0-alpha01
21 giu 2023
androidx.compose.runtime:runtime-*:1.6.0-alpha01 è stato rilasciato. La versione 1.6.0-alpha01 contiene questi commit.
Correzioni di bug
- Salta la ricomposizione delle composizioni secondarie che verranno rimosse. (Ieeb99, b/254645321)
- Allocazioni ridotte durante l'applicazione degli snapshot. (I65c09)
- Evita di calcolare
readableHashinDerivedStatese lo snapshot non è stato modificato (68c565)
Versione 1.5
Versione 1.5.4
18 ottobre 2023
androidx.compose.runtime:runtime-*:1.5.4 è stato rilasciato. La versione 1.5.4 contiene questi commit.
Versione 1.5.3
4 ottobre 2023
androidx.compose.runtime:runtime-*:1.5.3 è stato rilasciato. La versione 1.5.3 contiene questi commit.
Versione 1.5.2
27 settembre 2023
androidx.compose.runtime:runtime-*:1.5.2 è stato rilasciato. La versione 1.5.2 contiene questi commit.
Versione 1.5.1
6 settembre 2023
androidx.compose.runtime:runtime-*:1.5.1 è stato rilasciato. La versione 1.5.1 contiene questi commit.
Versione 1.5.0
9 agosto 2023
androidx.compose.runtime:runtime-*:1.5.0 è stato rilasciato. La versione 1.5.0 contiene questi commit.
Modifiche alle API
- Rimossi allocazioni in ricomposizione, animazioni a colori e
AndroidComposeView. (Ib2bfa) - È stata aggiunta un'annotazione
@StateFactoryMarkerper contrassegnare le funzioni che creano stati e devono essere racchiuse in una chiamataremember. (I64550) - Aggiungi versioni primitive di State e
MutableState(fb3d89) - Aggiunto
Snapshot.isApplyObserverNotificationPending(I672a5) - Sono state aggiunte versioni primitive dell'API
State, che consentono di monitorare i valori Int, Long, Float e Double negli oggettiStatesenza 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 ricomposizione delle composizioni secondarie 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 di stato derivati non inizializzati (aa2a92)
- Chiama
onEndChangesdurante l'eliminazione della composizione. (62cc8c) - Correzione dello spostamento dei contenuti in una composizione secondaria (4beb41)
- Correzione di potenziali deadlock (c1a425 e 8edce0)
- Il ricompositore creato per una finestra Android ora bloccherà solo le chiamate a
withFrameNanosanziché tutta la composizione quando riceve una notifica ON_STOP. Ciò significa che le finestre associate alle attività interrotte continueranno a ricomporsi per le modifiche ai dati, ma le animazioni o qualsiasi altro chiamante diwithFrameNanosverranno bloccate. (Id9e7f, b/240975572) - Esegui i callback di disattivazione per
LayoutNodeprima di eliminare gli effetti 3784073 - Sono stati corretti i flag modificati per le espressioni lambda riavviate ea81df9
- Correzione della regressione della modifica in tempo reale per Composable con nodi 73fd4d8
- ON_STOP deve mettere in pausa le trasmissioni dell'orologio dei frame anziché la composizione ae276f1
- Invalidate
SnapshotStateObserverambiti per stati derivati invariati 84d9b1c - È stato corretto un potenziale deadlock durante l'eliminazione delle composizioni 28761fc
- Correzione dello spostamento dei contenuti in una composizione secondaria 92d4156
- Sono stati corretti i flag modificati per le espressioni lambda riavviate (8a03e9).
- Esegui i callback di disattivazione per
LayoutNodeprima di eliminare gli effetti (8b0fa4) - Correzione di
endToMarker()al termine dei gruppi di nodi. (d71d980) - Utilizza il gruppo
SlotWritercorrente per il controllo della disattivazione (a0b518b) - Rimuovi
fillinSlotTable.moveSlotGapTo()e spostalo in chiusura (81f9935) - È stata corretta la mancata invalidazione durante lo spostamento dei contenuti mobili (1d7c024).
- Correzione delle invalidazioni immediate per i contenuti mobili spostati (8676618)
Miglioramenti delle prestazioni
- Evita di calcolare
readableHashinDerivedStatese 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 di stato con record di stato inaccessibili (c986960)
- Utilizza il compositore dell'ambito corretto quando realizzi i gruppi (9a5e5b6)
- Utilizza
IdentityArraySetper archiviare le invalidazioni degli snapshot (7f60cca) - Riduzione delle allocazioni per le osservazioni degli snapshot (5bc535f)
Versione 1.5.0-rc01
26 luglio 2023
androidx.compose.runtime:runtime-*:1.5.0-rc01 è stato rilasciato. La versione 1.5.0-rc01 contiene questi commit.
Correzioni di bug
Posticipa la rilettura degli stati derivati fino alla registrazione delle modifiche (f38099)
È disponibile un'ispezione facoltativa per consigliare la migrazione delle chiamate
mutableStateOf()ai tipi specializzati corrispondenti per le primitive. Il suo ID lint èAutoboxingStateCreation. In precedenza, questo controllo era abilitato 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 è stato rilasciato. La versione 1.5.0-beta03 contiene questi commit.
Correzioni di bug
- Salta la ricomposizione delle composizioni secondarie che verranno rimosse. (Ieeb99, b/254645321)
Versione 1.5.0-beta02
7 giugno 2023
androidx.compose.runtime:runtime-*:1.5.0-beta02 è stato rilasciato. La versione 1.5.0-beta02 contiene questi commit.
Miglioramenti delle prestazioni
- Evita di calcolare
readableHashinDerivedStatese lo snapshot non è stato modificato. (307102)
Versione 1.5.0-beta01
24 maggio 2023
androidx.compose.runtime:runtime-*:1.5.0-beta01 è stato rilasciato. La versione 1.5.0-beta01 contiene questi commit.
Modifiche alle API
- Rimozione delle allocazioni nella ricomposizione, delle animazioni a colori e di
AndroidComposeView(Ib2bfa) - È stata aggiunta un'annotazione
@StateFactoryMarkerper contrassegnare le funzioni che creano stati e devono essere racchiuse in una chiamataremember. (I64550) - Aggiungi versioni primitive di State e
MutableState(fb3d89) - Aggiunto
Snapshot.isApplyObserverNotificationPending(I672a5)
Correzioni di bug
- Allocazioni ridotte (I65c09, d7ea77, 727974 e 445808)
- Non conservare il riferimento 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 di stato derivati non inizializzati (aa2a92)
- Chiama
onEndChangesdurante l'eliminazione della composizione. (62cc8c) - Correzione dello spostamento dei contenuti in una composizione secondaria (4beb41)
- Correzione di potenziali deadlock (c1a425)
- ON_STOP deve mettere in pausa le trasmissioni dell'orologio dei frame anziché la composizione (f4a2d1)
- Sono stati corretti i flag modificati per le espressioni lambda riavviate (8a03e9).
- Esegui i callback di disattivazione per
LayoutNodeprima 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 è stato rilasciato. La versione 1.5.0-alpha04 contiene questi commit.
Modifiche alle API
- Sono state aggiunte versioni primitive dell'API
State, che consentono di monitorare i valori Int, Long, Float e Double negli oggettiStatesenza 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
onEndChangesdurante l'eliminazione della composizione. I nodi di messa a fuoco rimossi duranteComposition.disposesi iscrivono aonEndChangesper reimpostare la messa a fuoco.(03d4a47)Garantisci 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 una dipendenza cambia. La modifica della dipendenza viene registrata durante l'avanzamento dello snapshot, che può avvenire dopo la lettura dello stato derivato (a causa della chiamata aSnapshot.notifyObjectsInitialized()).La logica di osservazione dello stato derivato precedente in
SnapshotStateObserverpuliva le vecchie dipendenze, quindi leggeva il nuovo valore. Ciò ha comportato una race condition con l'invalidazione che si verifica in uno stato pulito, in cui l'invalidazione 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 è stato rilasciato. La versione 1.5.0-alpha03 contiene questi commit.
Modifiche alle API
- Il ricompositore creato per una finestra Android ora bloccherà solo le chiamate a
withFrameNanosanziché tutta la composizione quando riceve una notifica ON_STOP. Ciò significa che le finestre associate alle attività interrotte continueranno a ricomporsi per le modifiche ai dati, ma le animazioni o qualsiasi altro chiamante diwithFrameNanosverranno bloccate. (Id9e7f, b/240975572)
Correzioni di bug
- Correzione del potenziale deadlock nell'elenco degli snapshot e nella mappa 5c1a425
- Esegui i callback di disattivazione per
LayoutNodeprima di eliminare gli effetti 3784073 - Sono stati corretti i flag modificati per le espressioni lambda riavviate ea81df9
- Correzione della regressione della modifica in tempo reale per Composable con nodi 73fd4d8
- ON_STOP deve mettere in pausa le trasmissioni dell'orologio dei frame anziché la composizione ae276f1
- Invalidate
SnapshotStateObserverambiti per stati derivati invariati 84d9b1c - È stato corretto un potenziale deadlock durante l'eliminazione delle composizioni 28761fc
- Correzione dello spostamento dei contenuti in una composizione secondaria 92d4156
Versione 1.5.0-alpha02
5 aprile 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha02 è stato rilasciato. La versione 1.5.0-alpha02 contiene questi commit.
Nuove funzionalità
- L'operatore
getValuedi Kotlin ora può essere componibile (f174f6e)
Correzioni di bug, miglioramenti delle prestazioni
- Sovrascrivi i record degli oggetti di stato con record di stato inaccessibili (c986960)
- Utilizza il compositore dell'ambito corretto quando realizzi i gruppi (9a5e5b6)
- Correzione di
endToMarker()al termine dei gruppi di nodi. (d71d980) - Utilizza il gruppo
SlotWritercorrente per il controllo della disattivazione (a0b518b) - Utilizza
IdentityArraySetper archiviare le invalidazioni degli snapshot (7f60cca) - Rimuovi
fillinSlotTable.moveSlotGapTo()e spostalo in chiusura (81f9935) - È stata corretta la mancata invalidazione durante lo spostamento dei contenuti mobili (1d7c024).
- Correzione delle invalidazioni immediate per i contenuti mobili spostati (8676618)
- Riduzione delle allocazioni per le osservazioni degli snapshot (5bc535f)
Versione 1.5.0-alpha01
22 marzo 2023
androidx.compose.runtime:runtime-*:1.5.0-alpha01 è stato rilasciato. La versione 1.5.0-alpha01 contiene questi commit.
Nuove funzionalità
- Aggiunge
Modifier.Node#coroutineScopeper consentire aModifier.Nodesdi avviare coroutine (I76ef9) - Consenti a
Modifier.Nodesdi leggereCompositionLocalsimplementando 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 è stato rilasciato. La versione 1.4.2 contiene questi commit.
Correzioni di bug
Correzione di un potenziale deadlock nell'elenco degli snapshot e nella mappa 2eb6570
L'aggiunta di contenuti a un
SnapshotStateListo a unSnapshotStateMappuò causare un deadlock se la modifica è simultanea a una scrittura diretta nel record di stato. Questo problema è diventato molto più probabile con le modifiche introdotte da 93fcae828b, che utilizza scritture dirette per rilasciare i record inutilizzati.I blocchi sono ora ordinati in modo che non venga mai tentato di acquisire un blocco snapshot quando è attivo un blocco mappa o elenco.
Versione 1.4.1
5 aprile 2023
androidx.compose.runtime:runtime-*:1.4.1 è stato rilasciato. La versione 1.4.1 contiene questi commit.
Correzioni di bug
- Correzione di
endToMarker()al termine dei gruppi di nodi. d71d980
Versione 1.4.0
22 marzo 2023
androidx.compose.runtime:runtime-*:1.4.0 è stato rilasciato. La versione 1.4.0 contiene questi commit.
Modifiche importanti dalla versione 1.3.0
- Utilizza il valore inizializzato da
LiveDataper la prima composizione 3680e25 - Aggiungi
ComposeNodeLifecycleCallbackper osservare il ciclo di vita dei nodi di composizione. 8b6a258 - Aggiungi la proprietà
parameterTypesaComposableMethod7b6c7ad
Correzioni di bug e miglioramenti delle prestazioni
- Cancella entrambi gli indici di ambito in
SnapshotStateObserver29f4a3e - Aggiungi i gruppi necessari nel corpo delle espressioni lambda non ignorabili 7d06752
- Migliora le caratteristiche di riferimento della memoria dello stato dello snapshot 93fcae8
- Rimuovi il riquadro nelle ricerche locali della composizione 0875717
- Utilizza la chiave corretta per i gruppi di nodi non riutilizzabili 6388d8d
- Proteggi
SnapshotStateObserverda applicazioni ricorsive e simultanee 98cb6ba - Aggiunta di un controllo dei limiti dell'indice nel metodo "get" di
IdentityArraySet35a77d3 - Aggiorna il modulo di composizione per utilizzare le estensioni
ViewTreeLifecycleOwner21c2122 - Invia notifiche di applicazione al termine del frame di Recomposer. 98f2641
- Correzione dell'arresto anomalo dell'indice fuori dai limiti durante l'annullamento di Recomposer 8f8656f
- Forza sempre la ricomposizione se i provider principali della composizione sono cambiati 9526fcc
- Tolleranza del ricompositore per i job annullati a55f7ed
- Migliora la gestione delle invalidazioni per un numero elevato di autori 9b7ed67
- Correzione della generazione di gruppi di chiusura per i resi non locali b6f590c
Versione 1.4.0-rc01
8 marzo 2023
androidx.compose.runtime:runtime-*:1.4.0-rc01 è stato 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 sono stati 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 è stato rilasciato. La versione 1.4.0-beta01 contiene questi commit.
Modifiche alle API
- È stato aggiunto
ComposeNodeLifecycleCallback, che consente di osservare il ciclo di vita dei nodi Compose (I3731b) - È stato aggiunto
@TestOnlyaComposer.disableSourceInformation(), in quanto questa funzione può essere chiamata in modo sicuro solo in un test. (I896c8)
Correzioni di bug
- Rimuovi il boxing nelle ricerche locali della composizione (62f66a)
- Migliora le caratteristiche di riferimento alla memoria dello stato dello snapshot (dfb451)
Versione 1.4.0-alpha05
25 gennaio 2023
androidx.compose.runtime:runtime:1.4.0-alpha05 e androidx.compose.runtime:runtime-saveable:1.4.0-alpha05 sono stati rilasciati. La versione 1.4.0-alpha05 contiene questi commit.
Modifiche alle API
- Maggiore supporto di tipi/valori null delle funzioni incorporate/ritirate e nascoste (I24f91)
Versione 1.4.0-alpha04
11 gennaio 2023
androidx.compose.runtime:runtime-*:1.4.0-alpha04 è stato rilasciato. La versione 1.4.0-alpha04 contiene questi commit.
Modifiche alle API
TestMonotonicFrameClockora utilizza l'annotazione sperimentale corretta. (I95c9e)
Correzioni di bug
- Proteggi
SnapshotStateObserverda applicazioni ricorsive e simultanee (d902fb)
Versione 1.4.0-alpha03
7 dicembre 2022
androidx.compose.runtime:runtime-*:1.4.0-alpha03 è stato rilasciato. La versione 1.4.0-alpha03 contiene questi commit.
Modifiche alle API
- aggiungendo un nuovo metodo pubblico alla classe
ComposableMethodanalogo ajava.lang.reflect.Method#getParameterTypes()(Iab0c3)
Correzioni di bug
- Le notifiche di applicazione dello snapshot vengono ora inviate dopo che
Recomposerha terminato l'applicazione delle modifiche. (Iad6c0, b/222093277)
Versione 1.4.0-alpha02
9 novembre 2022
androidx.compose.runtime:runtime-*:1.4.0-alpha02 è stato 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 è stato rilasciato. La versione 1.4.0-alpha01 contiene questi commit.
Modifiche alle API
SnapshotStateListeSnapshotStateMapora hanno implementazioni esplicite ditoList()etoMap(), rispettivamente. Questi metodi restituiscono i contenuti correnti senza eseguire una copia, in quanto restituiscono i dati interni immutabili utilizzati per archiviare i contenuti. Questo valore può essere utilizzato, ad esempio, per produrre un flusso di valori utilizzandosnapshotFlowsenza richiedere la copia dei dati. (Ica2bd)
Versione 1.3
Versione 1.3.3
11 gennaio 2023
androidx.compose.runtime:runtime-*:1.3.3 è stato 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 è stato rilasciato. La versione 1.3.2 contiene questi commit.
Correzioni di bug
- È stato effettuato un aggiornamento per supportare androidx.compose.ui 1.3.2
Versione 1.3.1
9 novembre 2022
androidx.compose.runtime:runtime-*:1.3.1 è stato rilasciato. La versione 1.3.1 contiene questi commit.
Versione 1.3.0
24 ottobre 2022
androidx.compose.runtime:runtime-*:1.3.0 è stato rilasciato. La versione 1.3.0 contiene questi commit.
Modifiche importanti dalla versione 1.2.0
Gestione delle eccezioni / Supporto della modifica dal vivo
- Per supportare meglio la modifica dal vivo, 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 dal vivo durante il salvataggio/ripristino
Tracciamento della composizione
- Sono state aggiunte API di tracciamento in fase di runtime per supportare nuovi strumenti di tracciamento della composizione
- Generare chiamate di inizio/fine dell'evento traccia componibile
- Re-added ComposerKt.traceEventStart(Int, String)
API Composable Reflection
- È stata aggiunta una nuova API
ComposableMethodper consentire invocazioni più affidabili basate sulla reflection delle API componibili. - Sposta invokeComposable nel runtime di Compose
- Rielabora l'API per richiamare il metodo componibile
Correzioni di runtime
- Correzione del test dell'intervallo difettoso per il controllo della tabella degli slot per i marcatori
- Consenti lo spostamento dei contenuti mobili all'interno e all'esterno di SubcomposeLayout
- Correggi lo spostamento dei contenuti nei nuovi contenuti di una composizione secondaria
Snapshot System
- Il sistema di snapshot ha ricevuto vari miglioramenti in termini di gestione della memoria, prestazioni e correttezza.
- Rimozione dell'ambito di ottimizzazione in SnapshotStateObserver
- Elimina gli snapshot nidificati creati da snapshot trasparenti
- È stata corretta una condizione di competizione durante la lettura dello stato dallo snapshot globale
- Supporta DerivedState in SnapshotStateObserver
- Impedisci la rimozione dello stato derivato dalla composizione quando viene letto in altri ambiti
- Utilizzare IdentityArrayMap anziché HashMap all'interno di DerivedState
- Aggiorna gli osservatori dello stato derivato in modo che utilizzino il vettore modificabile
- Aggiornamento della pulizia dello stato di SnapshotStateObserver
- Sostituisci SnapshotStateObserver.invalidated con ArraySet
- È stata corretta una condizione di competizione durante la lettura dello stato dallo snapshot globale
- Correggi l'utilizzo di un record obsoleto nel calcolo dell'hash DerivedState
- Correzione della condizione di competizione 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 è stato rilasciato. La versione 1.3.0-rc01 contiene questi commit.
Correzioni di bug
- È stato corretto il problema relativo a
ArrayIndexOutOfBoundsExceptionproveniente dalla tabella degli slot (b/249076084).
Versione 1.3.0-beta03
21 settembre 2022
androidx.compose.runtime:runtime-*:1.3.0-beta03 è stato rilasciato. La versione 1.3.0-beta03 contiene questi commit.
Modifica che provoca un errore nel comportamento
- I parametri
remembererememberCoroutineScopesono stati modificati incrossinline. In questo modo verrà segnalato un errore per i resi anticipati anziché consentire un reso anticipato, il che causerà la segnalazione di un errore interno successivo. - Questa modifica può potenzialmente comportare la segnalazione di nuovi errori del compilatore che richiedono la rimozione dei ritorni non locali dalle espressioni lambda passate a queste funzioni. (Ibea62)
Versione 1.3.0-beta02
7 settembre 2022
androidx.compose.runtime:runtime-*:1.3.0-beta02 è stato 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 è stato rilasciato. La versione 1.3.0-beta01 contiene questi commit.
Modifiche alle API
- È stato aggiunto un metodo
findaCompositionDataper consentire agli strumenti per sviluppatori che utilizzano questa API di trovare rapidamente un sottogruppo di composizione utilizzando la sua identità. (I5794f)
Versione 1.3.0-alpha03
10 agosto 2022
androidx.compose.runtime:runtime-*:1.3.0-alpha03 è stato 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 è stato rilasciato. La versione 1.3.0-alpha02 contiene questi commit.
Modifiche alle API
- È stato aggiunto di nuovo
ComposerKt.traceEventStart(Int, String)per la compatibilità con le versioni precedenti (I6e6de)
Versione 1.3.0-alpha01
29 giugno 2022
androidx.compose.runtime:runtime-*:1.3.0-alpha01 è stato rilasciato. La versione 1.3.0-alpha01 contiene questi commit.
Modifiche alle 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 è stato rilasciato. La versione 1.2.1 contiene questi commit.
Correzioni di bug
- Correzione della perdita di memoria: elimina gli snapshot nidificati creati da snapshot trasparenti b/239603305
Versione 1.2.0
27 luglio 2022
androidx.compose.runtime:runtime-*:1.2.0 è stato rilasciato. La versione 1.2.0 contiene questi commit.
Modifiche importanti dal giorno 1.1.0
Compose Runtime ha introdotto una serie di funzionalità nella versione 1.2.0, oltre a numerose correzioni di bug di stabilizzazione. La nuova funzionalità più significativa è stata l'introduzione dell'
movableContentOfAPI, che può essere utilizzata per abilitare UX complesse come le transizioni degli elementi condivisi. L'APImovableContentOfconverte una lambda componibile in una lambda che sposta il suo stato e i nodi corrispondenti in qualsiasi nuova posizione in cui viene chiamata. Quando la chiamata precedente esce dalla composizione, lo stato viene temporaneamente conservato e, se una nuova chiamata alla lambda entra nella composizione, lo stato e i nodi associati vengono spostati nella posizione della nuova chiamata. Se non viene aggiunta una nuova chiamata, lo stato viene rimosso definitivamente e gli osservatori ricevono una notifica.Se una lambda
movableContentOfviene chiamata più volte nella stessa composizione, vengono creati nuovi stati e nodi per ogni chiamata e, man mano che le chiamate escono dalla composizione e ne entrano di nuove, lo stato viene spostato dalle prime chiamate in uscita a quelle in entrata nell'ordine in cui vengono chiamate. Tutti gli stati non rivendicati dalle nuove chiamate vengono rimossi definitivamente.Oltre a questa e ad alcune altre nuove funzionalità, è stato dedicato molto tempo alla stabilizzazione del sistema di runtime e dello stato degli snapshot. Sono state rimosse varie perdite di memoria e sono stati ottimizzati i percorsi del codice.
Di seguito è riportato un elenco riepilogativo delle modifiche:
Nuove funzionalità in 1.2
- Aggiungi snapshot sperimentale unsafeEnter/Leave
- Aggiunta dell'API sperimentale Snapshot.asContextElement
- Introduce Snapshot.withoutReadObservation
- Consentire lo spostamento di uno stato all'interno di una composizione
- Tracciamento delle ricomposizioni in Compose
Rendimento in 1.2
- Migliorare il rendimento locale della composizione
- I profili di base per la composizione devono essere derivati utilizzando i benchmark
Correzioni di bug in 1.2
- Rimuovere le informazioni di monitoraggio dagli ambiti di ricomposizione della release
- Impedisci la rimozione dello stato derivato dalla composizione quando viene letto in altri ambiti
- Utilizzare removeScope() più efficiente in SnapshotStateObserver
- Pulire le dipendenze dallo stato derivato nella composizione
- Correzione di currentCompositeKeyHash che cambia dopo la ricomposizione interna all'interno di contenuti mobili
- Pulizia delle composizioni non valide durante lo smaltimento
- Correzione della lettura dello stato derivato durante la ricomposizione
- Correzione della perdita di memoria durante l'osservazione degli oggetti di stato derivati
- Fixed movableContent composite hash key to be consistent
- Correzione di un caso limite in cui il compositore si arrestava in modo anomalo
- Assicurarsi che l'invalidazione forzata di un gruppo forzi la ricomposizione
- Correzione del bug per cui rememberSaveable con input viene ripristinato nell'ordine errato
Versione 1.2.0-rc03
29 giugno 2022
androidx.compose.runtime:runtime-*:1.2.0-rc03 è stato rilasciato. La versione 1.2.0-rc03 contiene questi commit.
Correzioni di bug
- In precedenza, le osservazioni sullo stato derivato venivano rimosse in modo incondizionato dall'ambito di ricomposizione e dalla composizione, il che interrompeva altri ambiti che potrebbero ancora osservare lo stato derivato. Questa modifica rimuove le istanze di stato derivato solo se non vengono più osservate da altri ambiti. (b/236618362)
Versione 1.2.0-rc02
22 giugno 2022
androidx.compose.runtime:runtime-*:1.2.0-rc02 è stato 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 è stato rilasciato. La versione 1.2.0-rc01 contiene questi commit.
Modifiche alle API
- Le interfacce nelle librerie Compose ora sono 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 è stato 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 è stato 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 è stato rilasciato. La versione 1.2.0-beta01 contiene questi commit.
Nuove funzionalità
- Questa è la prima release beta della versione 1.2.
Modifiche alle API
- Aggiunta funzionalità sperimentale
Snapshot.unsafeEnter/unsafeLeave(I108f3) - Aggiunta dell'API
Snapshot.asContextElement()sperimentale (Iff072) - L'annotazione
@ComposableTargete le annotazioni contrassegnate da@ComposableTargetMarkerora possono essere utilizzate a livello di file utilizzando il prefisso@file. L'utilizzo di un'annotazione di destinazione nell'ambito del file farà sì che il compilatore presupponga che tutte le funzioni componibili nel file siano destinate a essere destinate all'applier associato. Ad esempio, l'utilizzo di@file:UiComposabledichiara che tutte le funzioni@Composablehanno come target l'applicazione dell'interfaccia utente di Compose. Una funzione che deve avere come target un altro applicatore deve fornire esplicitamente l'annotazione del marcatore di destinazione per l'applicatore desiderato. (I40804)
Versione 1.2.0-alpha08
20 aprile 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha08 è stato rilasciato. La versione 1.2.0-alpha08 contiene questi commit.
Modifiche alle API
- Aggiunta di
TracingInProgressall'interfacciaCompositionTracer. (Ic6f12) - Aggiungi
recomposeScopeIdentitya Composer (I0c873) - API di tracciamento 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 viene utilizzata temporaneamente, i contenuti possono essere disattivati, causando la perdita di tutto lo stato memorizzato nella composizione, 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 è stato rilasciato. La versione 1.2.0-alpha07 contiene questi commit.
Modifiche alle API
- È stata aggiunta la nuova funzione
Snapshot.withoutReadObservation { ... }. Consente agli utenti di eseguire la lambda passata senza iscriversi alle modifiche dei valori di stato letti durante questo blocco. Potrebbe essere utile nei casi d'uso in cui vuoi usufruire di letture/scritture thread-safe basate su snapshot, ma vuoi poter leggere il valore senza causare ricomposizioni o misurazioni non necessarie. (I9f365, b/214054486)
Versione 1.2.0-alpha06
23 marzo 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha06 è stato 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 è stato rilasciato. La versione 1.2.0-alpha05 contiene questi commit.
Contributo esterno
- È stato effettuato un aggiornamento per utilizzare le coroutine Kotlinx 1.6.0 (I3366d)
Versione 1.2.0-alpha04
23 febbraio 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha04 è stato rilasciato. La versione 1.2.0-alpha04 contiene questi commit.
Modifiche alle API
Sono stati aggiunti
ComposableTarget,ComposableTargetMarkereComposableOpenTargetche consentono la generazione di report in fase di compilazione quando viene chiamata una funzione componibile che ha come target un applicatore per cui non è stata progettata.Nella maggior parte dei casi, le annotazioni possono essere dedotte dal plug-in del compilatore Compose, quindi l'utilizzo diretto di queste annotazioni dovrebbe essere raro . I casi che non possono essere dedotti includono la creazione e l'utilizzo di un'applicazione personalizzata, funzioni componibili astratte (come metodi di interfaccia), campi o variabili globali che sono espressioni lambda componibili (le variabili e i parametri locali vengono dedotti), o quando si utilizza
ComposeNodeo una funzione componibile correlata.Per gli applicatori personalizzati, le funzioni componibili che chiamano
ComposeNodeoReusableComposeNodedevono aggiungere un'annotazioneCompoableTargetper la funzione e per tutti i tipi di parametri lambda componibili. Tuttavia, ti consigliamo di creare un'annotazione conComposableTargetMarkere di utilizzare l'annotazione contrassegnata anzichéComposableTargetdirettamente. Un'annotazione componibile contrassegnata conComposableTargetMarkerequivale a unComposbleTargetcon il nome completo della classe dell'attributo come parametro di applicazione. Per un esempio di utilizzo diComposableTargetMarker, vedianroidx.compose.ui.UiComposable. (I38f11)
Versione 1.2.0-alpha03
9 febbraio 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha03 è stato rilasciato. La versione 1.2.0-alpha03 contiene questi commit.
Modifiche alle API
È stata aggiunta
movableContentOf, che converte una funzione lambda componibile in una funzione lambda che sposta il suo stato e i nodi corrispondenti in qualsiasi nuova posizione in cui viene chiamata. Quando la chiamata precedente esce dalla composizione, lo stato viene temporaneamente conservato e se una nuova chiamata alla lambda entra nella composizione, lo stato e i nodi associati vengono spostati nella posizione della nuova chiamata. Se non viene aggiunta una nuova chiamata, lo stato viene rimosso definitivamente e gli osservatori vengono avvisati.Se una lambda
movableContentOfviene chiamata più volte nella stessa composizione, vengono creati nuovi stati e nodi per ogni chiamata e, man mano che le chiamate escono dalla composizione e ne entrano di nuove, lo stato viene spostato dalle prime chiamate in uscita a quelle in entrata nell'ordine in cui vengono chiamate. Tutti gli stati non rivendicati dalle nuove chiamate vengono rimossi in modo permanente. (Ib4850)È stata aggiunta un'API di tracciamento alla composizione per consentire agli strumenti di fornire un tracciamento più dettagliato delle funzioni componibili. Il compilatore ora genera chiamate all'API di tracciamento che includono informazioni sull'origine. (Ib0eb5)
Per rimuovere queste chiamate e le informazioni sull'origine associate da una build di rilascio, aggiungi la seguente regola Proguard:
-assumenosideeffects public class androidx.compose.runtime.ComposerKt { boolean isTraceInProgress(); void traceEventStart(int,java.lang.String); void traceEventEnd(); }Aggiungi
InternalComposeScopeche consente agli strumenti di identificare un componente durante le ricomposizioni. (I07a3f)
Versione 1.2.0-alpha02
26 gennaio 2022
androidx.compose.runtime:runtime-*:1.2.0-alpha02 è stato 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 è stato rilasciato. La versione 1.2.0-alpha01 contiene questi commit.
Modifiche alle API
- È stato aggiunto il campo
identityaCompositionDataper la generazione di ID invarianti in Layout Inspector. (Ic116e)
Aggiornamenti delle dipendenze
- Ora dipende da Kotlin
1.6.10.
Versione 1.1
Versione 1.1.1
23 febbraio 2022
androidx.compose.runtime:runtime-*:1.1.1 è stato rilasciato. La versione 1.1.1 contiene questi commit.
Correzioni di bug
- È stato corretto
NullPointerExceptioninandroidx.compose.ui.platform.RenderNodeLayer.updateDisplayList(aosp/1947059, b/206677462) - È stato corretto l'arresto anomalo causato dai contenuti degli appunti durante la lettura dagli appunti su Android. (I06020, b/197769306)
- È stato corretto RTL in
LazyVerticalGrid(aosp/1931080, b/207510535)
Versione 1.1.0
9 febbraio 2022
androidx.compose.runtime:runtime-*:1.1.0 è stato rilasciato. La versione 1.1.0 contiene questi commit.
Modifiche importanti dalla versione 1.0.0
- Supporto stabile per l'effetto di scorrimento eccessivo di Android 12
- Miglioramenti alle dimensioni del touch target
- Rispetto a Compose 1.0, i componenti Material espanderanno lo spazio del layout per rispondere alle 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 più piccola per il pulsante. In questo modo, Compose Material si allinea allo stesso comportamento dei componenti Material Design, fornendo un comportamento coerente se combini Views e Compose. Questa modifica garantisce inoltre che, quando crei la tua UI utilizzando i componenti di Compose Material, vengano soddisfatti i requisiti minimi per l'accessibilità dei touch target. - Supporto stabile per la modalità di navigazione laterale
- Esegue l'upgrade di una serie di API sperimentali precedenti alla versione stabile
- Supporto per le versioni più recenti di Kotlin
Versione 1.1.0-rc03
26 gennaio 2022
androidx.compose.runtime:runtime-*:1.1.0-rc03 è stato rilasciato. La versione 1.1.0-rc03 contiene questi commit.
Correzioni di bug
- È stato effettuato un aggiornamento per supportare Compose Material
1.1.0-rc03
Versione 1.1.0-rc01
15 dicembre 2021
androidx.compose.runtime:runtime-*:1.1.0-rc01 è stato 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 è stato rilasciato. La versione 1.1.0-beta04 contiene questi commit.
Nuove funzionalità
- È stato effettuato un aggiornamento per garantire la compatibilità con Kotlin
1.6.0
Versione 1.1.0-beta03
17 novembre 2021
androidx.compose.runtime:runtime-*:1.1.0-beta03 è stato 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 è stato rilasciato. La versione 1.1.0-beta02 contiene questi commit.
Modifiche alle API
- Il codice dello snapshot è stato suddiviso in più file, ma tutti si trovano ancora nella stessa classe JVM. (Ic6c98)
Versione 1.1.0-beta01
27 ottobre 2021
androidx.compose.runtime:runtime-*:1.1.0-beta01 è stato 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 è stato rilasciato. La versione 1.1.0-alpha06 contiene questi commit.
Modifiche alle API
- Rimozione di
InternalCompilerApidai metodi Composer che devono essere chiamati tra moduli diversi (I1aa0b) Recomposer.stateè stato ritirato e sostituito daRecomposer.currentStateper modificare il suo tipo in StateFlow (Ic2ab3, b/197773820)
Versione 1.1.0-alpha05
29 settembre 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha05 è stato 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 è stato 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 è stato rilasciato. La versione 1.1.0-alpha03 contiene questi commit.
Nuove funzionalità
- Il compilatore Compose ora supporta le versioni precedenti di Compose Runtime (1.0). Prima di questa modifica, il compilatore Compose era compatibile solo con Compose Runtime della stessa versione o di una versione successiva. Dopo questa modifica, il compilatore Compose è compatibile con una versione precedente di Compose Runtime (1.0). (aosp/1796968)
- È stato effettuato un aggiornamento di Compose
1.1.0-alpha03in modo che dipenda da Kotlin1.5.30. (I74545)
Versione 1.1.0-alpha02
18 agosto 2021
androidx.compose.runtime:runtime-*:1.1.0-alpha02 è stato 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 è stato 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 è stato 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 è stato rilasciato. La versione 1.0.4 contiene questi commit.
Aggiornamenti delle dipendenze
- È stato effettuato un aggiornamento in modo che dipenda da Kotlin
1.5.31
Versione 1.0.3
29 settembre 2021
androidx.compose.runtime:runtime-*:1.0.3 è stato rilasciato. La versione 1.0.3 contiene questi commit.
Aggiornamenti delle dipendenze
- È stato effettuato un aggiornamento in modo che dipenda da Kotlin
1.5.30
Versione 1.0.2
1° settembre 2021
androidx.compose.runtime:runtime-*:1.0.2 è stato rilasciato. La versione 1.0.2 contiene questi commit.
È stato effettuato un 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 è stato rilasciato. La versione 1.0.1 contiene questi commit.
Aggiornamenti delle dipendenze
- È stato effettuato un aggiornamento in modo che dipenda da Kotlin
1.5.21.
Versione 1.0.0
28 luglio 2021
androidx.compose.runtime:runtime-*:1.0.0 è stato 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 delle release 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 superiore 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 è stato rilasciato. La versione 1.0.0-rc02 contiene questi commit.
- Sono state corrette le race condition in SnapshotStateObserver che causavano NullPointerException sporadiche. (aosp/1763445, aosp/1758105, b/192677711)
- Risolti 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 è stato 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 è stato 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 libreria sono specificate in un file di testo
baseline-prof.txtche si trova nella directorysrc/maino in una directory equivalente. Il file specifica una regola per riga, dove una regola in questo caso è un pattern per la corrispondenza con metodi o classi nella libreria. La sintassi di queste regole è un superset del formato del profilo ART leggibile, utilizzato quando si utilizzaadb shell profman --dump-classes-and-methods .... Queste regole assumono una delle 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,SePper indicare se questo metodo deve essere contrassegnato come "Hot", "Startup" o "Post Startup".<CLASS_DESCRIPTOR>è il descrittore della classe a cui appartiene il metodo di destinazione. Ad esempio, la classeandroidx.compose.runtime.SlotTableavrebbe un descrittore diLandroidx/compose/runtime/SlotTable;.<METHOD_SIGNATURE>è la firma del metodo e include il nome, i tipi di parametri e i tipi restituiti del metodo. Ad esempio, il metodofun isPlaced(): BooleansuLayoutNodeha 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
Hindica che si tratta di un metodo "hot" e deve essere compilato in anticipo.Un metodo con il flag
Sindica che viene 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
Pindica che viene 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 incluse nei file AAR. Quando viene creata un'app che include questi artefatti, queste regole vengono unite e utilizzate per creare un profilo binario ART compatto specifico per l'app. ART può quindi sfruttare questo profilo quando l'app viene installata sui dispositivi per compilare in anticipo un sottoinsieme specifico dell'applicazione per migliorarne le prestazioni, in particolare la prima esecuzione. Tieni presente che questa operazione non avrà alcun effetto sulle applicazioni di cui è possibile eseguire il debug.
Versione 1.0.0-beta08
2 giugno 2021
androidx.compose.runtime:runtime-*:1.0.0-beta08 è stato rilasciato. La versione 1.0.0-beta08 contiene questi commit.
Modifiche alle API
State<T>è diventatoState<out T>(I69049)ControlledCompositionModifica dell'API per consentire la ricomposizione delle modifiche in un'unica passata. (Iaafd1, b/184173932)
Versione 1.0.0-beta07
18 maggio 2021
androidx.compose.runtime:runtime-*:1.0.0-beta07 è stato rilasciato. La versione 1.0.0-beta07 contiene questi commit.
Modifiche alle API
- Sono state aggiunte nuove API del compilatore Compose che consentono di rimuovere le informazioni sull'origine generate dal compilatore durante la minimizzazione dell'origine. (Ia34e6)
Introduce
ReusableContent, che tenterà di riutilizzare i nodi nel suo contenuto 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 aggiornare i nodi.Introduce
ReusableComposeNodeche riutilizza il nodo emesso anziché sostituirlo come avviene perComposeNode. (I1dd86)@ComposeCompilerApinon più@RequiresOptIn(Iab690)
Correzioni di bug
- LazyColumn/Row ora mantiene attivi (non eliminati) fino a due elementi precedentemente visibili anche quando sono già stati scorri. Ciò consente al componente di riutilizzare le composizioni secondarie attive quando dovremo 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 è stato rilasciato. La versione 1.0.0-beta06 contiene questi commit.
Modifiche alle API
@ComposeCompilerApinon più@RequiresOptIn(Iab690)
Versione 1.0.0-beta05
21 aprile 2021
androidx.compose.runtime:runtime-*:1.0.0-beta05 è stato rilasciato. La versione 1.0.0-beta05 contiene questi commit.
Modifiche alle API
- Rimossa
@InternalComposeApiper letture e scritture di snapshot di registrazione (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 è stato rilasciato. La versione 1.0.0-beta04 contiene questi commit.
Correzioni di bug
Prima di questa modifica, le funzioni componibili locali erano ignorabili in base ai loro parametri. Dopo questa modifica, nessuna funzione componibile locale verrà ignorata. Questa modifica viene apportata perché è comune e previsto che le funzioni locali acquisiscano parametri dal padre e il loro salto è una fonte comune di bug.
Per riassumere, considera l'esempio:
@Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) { @Composable fun ShowCount() { Text("Count: $count") } ShowCount() Button(onClick={ onCountChange(count + 1) }) { Text("Increment") } }Prima di questa modifica, la funzione componibile
ShowCountveniva sempre ignorata, anche dopo l'aggiornamento del parametrocount. Abbiamo deciso, tuttavia, di non dare seguito a questa misura. (I5648a)È stato risolto il problema per cui
rememberSaveable()ripristinava il vecchio valore quando veniva utilizzato con i parametri di input (I1b110, b/182403380)
Versione 1.0.0-beta03
24 marzo 2021
androidx.compose.runtime:runtime-*:1.0.0-beta03 è stato rilasciato. La versione 1.0.0-beta03 contiene questi commit.
Modifiche alle API
DefaultMonotonicFrameClockè deprecato. La chiamatawithFrameNanosoRecomposer.runRecomposeAndApplyChangessenzaMonotonicFrameClockora genereràIllegalStateException. (I4eb0d)
Versione 1.0.0-beta02
10 marzo 2021
androidx.compose.runtime:runtime-*:1.0.0-beta02 è stato rilasciato. La versione 1.0.0-beta02 contiene questi commit.
Correzioni di bug
- Applica restrizioni all'utilizzo pubblico delle API sperimentali (I6aa29, b/174531520)
- Correzione di
rememberSaveable { mutableStateOf(0) }danneggiato quando viene utilizzato all'interno di una destinazione di navigation-compose. (I1312b, b/180042685, b/180701630)
Versione 1.0.0-beta01
24 febbraio 2021
androidx.compose.runtime:runtime-*:1.0.0-beta01 è stato rilasciato. La versione 1.0.0-beta01 contiene questi commit.
Questa è la prima release di Compose 1.0.0 Beta.
Modifiche alle API
- Aggiungi
Recomposer.runRecomposeConcurrentlyAndApplyChangesAPI sperimentale per ricomporre le composizioni invalidate al di fuori del ciclo del frame principale. (I342d0) - Tutti i composable contrassegnati con @ReadOnlyComposable vengono ora convalidati in fase di compilazione per garantire che chiamino solo altri @ReadOnlyComposable (I58961)
Il
defaultFactorypercompositionLocalOfestaticCompositionLocalOfora è obbligatorio anziché facoltativo.Questa modifica rimuove un potenziale errore di tipo per i tipi non annullabili per i quali non è stata fornita alcuna fabbrica predefinita. In precedenza, questo forniva un riferimento null per un tipo non annullabile.
Per i tipi annullabili, valuta la possibilità di fornire
{ null }come factory predefinita.Sconsigliamo di utilizzare le impostazioni internazionali con tipi non nullabili, a meno che non sia possibile fornire un valore predefinito ragionevole. Se non esiste un valore predefinito ragionevole, la lambda
defaultFactorydeve generare un'eccezione. Tuttavia, la generazione di un'eccezione significa che i consumatori delle impostazioni internazionali avranno una dipendenza implicita dalla sua fornitura che non viene applicata dal sistema di tipi. (Ifbd2a)I simboli ritirati sono stati rimossi dal runtime di composizione (I3252c)
L'API
emptyContent()deprecata è 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 è diventata una proprietà componibile di primo livello anziché una funzione componibile di primo livello.
- CompositionData e CompositionGroup sono stati spostati nello spazio dei nomi androidx.compose.runtime.tooling
- ComposableLambda è diventata un'interfaccia anziché una classe concreta e non ha più parametri di tipo.
- ComposableLambdaN è stata trasformata in un'interfaccia anziché in una classe concreta e non ha più parametri di tipo.
- La funzione snapshotFlow è stata spostata nello spazio dei nomi androidx.compose.runtime
- Il metodo di unione di SnapshotMutationPolicy non è più sperimentale
- La funzione @TestOnly clearRoots di primo livello è stata rimossa. Non è più necessario.
- Le funzioni keySourceInfoOf e resetSourceInfo sono state rimosse. Non sono più necessari.
- Composer.collectKeySourceInformation è stato rimosso. Non è più necessario.
- I metodi isJoinedKey, joinedKeyLeft e joinedKeyRight sono stati rimossi. Non sono più necessari.
- Diverse API di primo livello sono state spostate e riorganizzate in file diversi. A causa della semantica della classe di file di Kotlin, la compatibilità binaria verrà interrotta, ma non quella del codice sorgente, quindi non dovrebbe essere un problema per la maggior parte degli utenti.
- (I99b7d, b/177245490)
SnapshotStateObserver non è più sperimentale (Id2e6a)
Sono state eliminate alcune API ritirate in precedenza (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 sono stati riordinati in BackdropScaffold in modo che seguano le linee guida dell'API per i parametri obbligatori prima di quelli facoltativi.
- Il parametro
iconin BottomNavigationItem è stato spostato doposelectedeonClick. - Il parametro
alwaysShowLabelsin BottomNavigationItem è stato rinominato inalwaysShowLabel. - È stato rinominato il parametro
bodyContentin alcuni componenti incontent. - Parametri riordinati in
ButtonDefaults.buttonColors(). Tieni presente che, poiché il tipo di parametri non è cambiato, non si verificherà un errore nel codice. Assicurati di utilizzare parametri denominati o di aggiornare l'ordinamento manualmente, altrimenti il codice non funzionerà come in precedenza. - Aggiunto il parametro
secondaryVariantadarkColors(). In genere questo colore è uguale asecondarynel tema scuro, ma viene aggiunto per coerenza e ulteriore personalizzazione. - Rimossi ElevationDefaults e animateElevation() dalla superficie dell'API pubblica perché non venivano utilizzati / erano utili di frequente.
- Rinominato
onValueChangeEndinSliderinonValueChangeFinishede reso annullabile. - Il parametro
textinSnackbarè stato rinominato incontentper coerenza. - È stato aggiunto il parametro
contentPaddingaDropdownMenuItemper consentire la personalizzazione del padding predefinito econtentè diventata un'estensione diRowScope. ModalDrawerLayoutrinominato inModalDrawer.BottomDrawerLayoutrinominato inBottomDrawer.- (I1cc66)
Versione 1.0.0-alpha12
10 febbraio 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha12 è stato rilasciato. La versione 1.0.0-alpha12 contiene questi commit.
Modifiche alle API
- Il supporto per ViewGroups è stato rimosso da UiApplier. I composable emitView ritirati 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 per le API, nonché per nascondere le classi di implementazione interne dall'API pubblica. (Id9e32)
- Rinominate le impostazioni di Ambienti in modo che corrispondano al nuovo nome Ambient -> CompositionLocal. Gli ambient erano denominati AmbientFoo, ora i CompositionLocals sono denominati LocalFoo. (I2d55d)
- Rinominate Ambient in CompositionLocal e ambientOf / staticAmbientOf in compositionLocalOf / staticCompositionLocalOf rispettivamente. Questa modifica contribuisce a rendere più chiaro lo scopo di CompositionLocal: un meccanismo per fornire / recuperare valori locali per una composizione. Le istanze CompositionLocal devono avere il prefisso
Local, ad esempio val LocalFoo = compositionLocalOf { Foo() }. (Ia55b6) - takeMutableSnapshot e takeSnapshot sono stati spostati per diventare metodi complementari di Snapshot. (I91f19)
@ComposableContractè stato ritirato 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)
snapshotFlowewithMutableSnapshotnon sono più sperimentali (I6a45f)Ora i ricompositori possono essere chiusi. I ricompositori chiusi continueranno la ricomposizione finché le coroutine secondarie di composizione non saranno completate. Recomposer.shutDown rinominato in cancel per contrastarlo con close. (Ib6d76)
L'artefatto
compose:runtime-dispatchè ora deprecato. MonotonicFrameClock ora si trova in compose:runtime e AndroidUiDispatcher si trova in compose:ui. (Ib5c36)L'API a cui fa riferimento il 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 binaria che causa interruzioni. (I3b922, b/169406779)
È stato introdotto SnapshotMutableState (Icfd03)
DisposableEffectDisposable è stato rinominato in DisposaleEffectResult (Ica7c6)
È stato rimosso Recomposer.current(). [Abstract]ComposeView ora per impostazione predefinita crea Recomposer in modo differito e con ambito finestra, basati su ViewTreeLifecycleOwner per la finestra. La ricomposizione e i tick di animazione basati su withFrameNanos vengono messi in pausa mentre il ciclo di vita dell'host è interrotto. (I38e11)
Recomposer.runningRecomposers ora offre un StateFlow globale di RecomposerInfo di sola lettura per osservare lo stato di composizione in corso nel processo. Preferisci questa API a Recomposer.current(), che ora è ritirata. (If8ebe)
DisposableEffectDisposable è stato rinominato in DisposaleEffectResult (I3ea68)
Versione 1.0.0-alpha11
28 gennaio 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha11 è stato rilasciato. La versione 1.0.0-alpha11 contiene questi commit.
Modifiche alle API
- onCommit, onDispose e onActive sono stati ritirati a favore delle API SideEffect e DisposableEffect (If760e)
- L'API emit() e tutti gli overload 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 ritirati a favore di currentRecomposeScope e rememberCompositionReference rispettivamente. (I583a8)
RememberObserver sostituisce CompositionLifecycleObserver e CompositionLifecycleObserver è ora ritirato.
RememberObserverè un sostituto diCompositionLifecycleObservercon semantica modificata e metodi rinominati. Il passaggio alla nuova API può essere eseguito meccanicamente per gli oggetti che vengono ricordati una sola volta, il che è e continua a essere la prassi consigliata. Tuttavia, se un riferimento è stato memorizzato più di una volta in una composizione,onRememberedviene chiamato per ogni riferimento, mentreonEnterviene chiamato una sola volta.onEnterè stato chiamato più volte se l'oggetto è stato utilizzato in sottocomposizioni, comeWithConstraintseScaffold, rendendo inaffidabile la singola chiamataonEnter, che è stata rimossa perRememberObserver.RememberObserveraggiungeonAbandoned, che viene chiamato se l'istanzaRememberObserverviene restituita dal callback passato aremember, ma non è stata memorizzata nello stato di composizione e, pertanto, non verrà mai chiamatoonRemembered. Ciò può verificarsi se un'eccezione termina la composizione prima del completamento o la composizione viene eliminata perché lo stato per cui stava producendo una composizione non è più attuale o non è più necessario. Se l'istanza diRememberObserverche segue il singolo suggerimento di riferimento riportato sopra monitora una risorsa esterna, siaonForgottencheonAbandonedindicano che la risorsa non è più necessaria. Se l'oggetto monitora il lavoro iniziato o le risorse allocate inonRemembered,onAbandonedpuò essere ignorato perché non verrà chiamato se viene chiamatoonRemembered. (I02c36)Non contrassegnare le funzioni
collectAsState()come inline (Ia73e4)
Correzioni di bug
- WithConstraints è stato rielaborato come BoxWithConstraints e spostato in foundation.layout. (I9420b, b/173387208)
- Utilizza TestCoroutineDispatcher nei test (I532b6)
Versione 1.0.0-alpha10
13 gennaio 2021
androidx.compose.runtime:runtime-*:1.0.0-alpha10 è stato 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 a seguito della composizione nella fase "Applica modifiche" della composizione, dopo il completamento di tutte le funzioni
@Composable.Si tratta di una modifica comportamentale che potrebbe influire sul codice dell'applicazione, poiché i nodi non sono più disponibili dalle API interne ed sperimentali finché le modifiche non sono state applicate. In genere, questo problema può essere risolto racchiudendo il codice con queste dipendenze in un composable
SideEffectper posticipare l'esecuzione del codice fino a quando i nodi non sono stati creati e inizializzati. (I018da)
Modifiche alle API
- È stato aggiunto un modo per monitorare se il ricompositore ha applicato le modifiche. (I1b3e2)
Espandi le API [Abstract]ComposeView per consentire il riciclo delle visualizzazioni basate su Compose, eliminando la loro composizione per ricrearla di nuovo in un secondo momento. Aggiungi API per l'installazione e l'individuazione di ricompositori e CompositionReference con ambito finestra per la creazione di 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
- Recomposer ora 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 è stato rilasciato. La versione 1.0.0-alpha09 contiene questi commit.
Modifiche alle API
Sono state rimosse SlotTable, SlotReader e SlotWriter dall'API pubblica. In precedenza, questi erano contrassegnati come InternalComposeAPI. Ora sono interni al modulo di composizione.
CompositionData e CompositionGroup sono stati aggiunti come sostituzione dell'API ui-tooling da utilizzare per estrarre le informazioni sulla composizione. Queste sono pubbliche, ma non sono destinate all'uso al di fuori dell'API ui-tooling, in quanto forniscono le informazioni non elaborate che l'API ui-tooling interpreta (I31a9c).
La classe Applier non è più considerata un (Id85b0)
L'interfaccia
Applierè stata modificata per semplificare la creazione di alberi dal basso verso l'alto anziché dall'alto verso il basso.Il metodo
insert()è stato rinominato ininsertTopDown().È stato aggiunto un nuovo metodo,
insertBottomUp().Un'applicazione inserisce i nodi nell'albero che sta modificando utilizzando
insertTopDown()oinsertBottomUp()a seconda di quale ha un rendimento migliore.Alcuni alberi, come
LayoutNodeeView, sono molto più efficienti da costruire dal basso verso l'alto che dall'alto verso il basso. Prima di questa modifica, era necessario uno stack di inserti per implementare la costruzione bottom-up, che doveva essere copiato in ogni applicatore che richiedeva la costruzione bottom-up per le prestazioni. Con questa modifica, unApplieresegue l'override diinsertBottomUp()per creare una struttura dal basso verso l'alto einsertTopDown()per creare la struttura dall'alto verso il basso. (Icbdc2)Compose supporta i getter delle proprietà che possono effettuare chiamate componibili. Il supporto per questa funzionalità non verrà rimosso, ma la sintassi per dichiarare un getter di proprietà come @Composable sta cambiando.
La sintassi ora ritirata per eseguire questa operazione prevedeva l'annotazione della 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 alla fine diventerà un errore di compilazione. (Id9197)
Correzioni di bug
- AndroidOwner made internal (Ibcad0, b/170296980)
- subcomposeInto(LayoutNode) è stato reso interno (Id724a)
Versione 1.0.0-alpha08
2 dicembre 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha08 è stato rilasciato. La versione 1.0.0-alpha08 contiene questi commit.
Modifiche alle API
- È stato aggiunto il controllo lint per la denominazione e la posizione dei parametri lambda componibili, per verificare la coerenza con le linee guida di Compose.
Inoltre, sono state migrate alcune API utilizzando
childrencome nome per la lambda finale incontent, in base al controllo lint e alle indicazioni. (Iec48e) - Recomposer non accetta più un EmbeddingContext; le dipendenze di pianificazione richieste vengono ottenute da effectCoroutineContext. FrameManager è deprecato; le integrazioni della piattaforma devono inizializzare la propria gestione degli snapshot globali. (I02369)
- La funzione RestorableStateHolder.withRestorableState è stata rinominata RestorableStateProvider (I66640)
Correzioni di bug
- Gli Ambients ritirati con
Ambientcome suffisso sono stati sostituiti con nuove proprietà con il prefisso Ambient, seguendo le altre linee guida per Ambients 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 è stato rilasciato. La versione 1.0.0-alpha07 contiene questi commit.
Nuove funzionalità
Modifiche alle API
- L'annotazione
@UnionTypeè stata ritirata (I57cde) - provideDefault è stato aggiunto come alternativa a provide per fornire gli ambient e può essere utilizzato per specificare i valori ambient che verranno impostati solo se non è già stato fornito un valore ambient. (Id6635, b/171024925)
- LaunchedTask è stato rinominato LaunchedEffect per coerenza con le API SideEffect e DisposableEffect. LaunchedEffect senza parametri dell'oggetto non è consentito per incoraggiare le best practice. (Ifd3d4)
- Applier ora dispone di callback onBeginChanges/onEndChanges che vengono richiamati quando Composer inizia/termina l'applicazione delle modifiche all'albero. Questi possono essere utilizzati per la gestione batch delle risorse, se necessario. (Icf476)
- Recomposer ora richiede un CoroutineContext al momento della creazione (Ic4610)
- Modifiche all'implementazione interna di SlotTable che non dovrebbero influire sull'API pubblica. (If9828)
- Sono stati rimossi gli adattatori rxjava2 obsoleti che non accettano il valore iniziale (Idb72f)
Correzioni di bug
- foundation.Text è stato ritirato e sostituito con material.Text. Per un'API di testo di base e non soggettiva che non utilizza valori di un tema, consulta androidx.compose.foundation.BasicText. (If64cb)
- BaseTextField è stato ritirato. Utilizza invece BasicTextField. (I896eb)
- Diversi simboli correlati al layout sono stati spostati da androidx.compose.ui ad androidx.compose.layout.ui. (I0fa98, b/170475424)
Contributo esterno
- Aggiunto il modulo
runtime-rxjava3per la composizione. Simile aruntime-rxjava2(I02cbf)
Versione 1.0.0-alpha06
28 ottobre 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha06 è stato rilasciato. La versione 1.0.0-alpha06 contiene questi commit.
Modifiche alle API
- Recomposer è ora un elemento CompositionReference e un elemento padre di composizione valido. Ora Explicit Recomposer è obbligatorio in meno posizioni. (I4036f)
- È stata aggiunta l'API 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 dalla ricomposizione a processi in corso o di lunga durata, come DisposableEffect o LaunchedTask.
- (Id50b9)
- MutableVector ora implementa RandomAccess (I85d73, b/170461551)
- È stato aggiunto il componibile 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 consentire di ricomporlo la volta successiva 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 è stato rilasciato. La versione 1.0.0-alpha05 contiene questi commit.
Modifiche alle API
- Modificatore sperimentale.Modificatore di input di sospensione pointerInput (Ia77d2)
- Le prestazioni di scorrimento di LazyColumn/Row vengono migliorate riducendo il lavoro nella composizione secondaria a ogni scorrimento. È stato aggiunto il nuovo metodo hasInvalidations() per la classe Composition. Il metodo hasPendingChanges() di Recomposer è stato rinominato 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 LaunchedTask per rispettare le linee guida dell'API Compose (I99a8e)
- L'ordine delle chiamate place() nei layout personalizzati ora definisce l'ordine di disegno per i figli (Ibc9f6)
Versione 1.0.0-alpha04
1° ottobre 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha04 è stato rilasciato. La versione 1.0.0-alpha04 contiene questi commit.
Modifiche alle API
- È stato aggiunto OwnerScope per consentire la raccolta di ambiti di osservazione di layout e 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)
- Aggiunta dell'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 è stato rilasciato. La versione 1.0.0-alpha03 contiene questi commit.
Modifiche alle API
CompositionCoroutineScopenon implementa piùMonotonicFrameClock. I chiamanti diwithFrameNanosdevono importare esplicitamente la funzione di primo livello. (Icb642, b/166778123)
Correzioni di bug
- Le funzioni di test globali come
onNodeowaitForIdlesono ora deprecate. Esegui la migrazione alle nuove controparti definite in ComposeTestRule (I7f45a). launchInCompositionnon 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 è stato rilasciato. La versione 1.0.0-alpha02 contiene questi commit.
Modifiche alle API
- Aggiungi le API
snapshotFlowewithMutableSnapshotper utilizzare e produrre modifiche ai dati degli snapshot. (I3e722) La convenzione di chiamata per le funzioni componibili è cambiata. Si tratta di una modifica che provoca un errore binario. Tutte le librerie devono essere ricompilate per funzionare con questa versione del plug-in del compilatore Compose.
Questa modifica non crea una modifica che causa interruzioni a livello di origine, in quanto le uniche API modificate sono le API del compilatore che hanno un consenso esplicito. (I7afd2, b/158123185)
Sono stati rimossi i metodi di pianificazione da EmbeddingContext (I7b9be)
onPreCommit è deprecato; onCommit ora ha il comportamento di onPreCommit.
onCommit e onActive ora vengono eseguiti nello stesso frame del coreografo in cui vengono applicate 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 è stato 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 è stato rilasciato. La versione 0.1.0-dev17 contiene questi commit.
Modifiche alle API
- Ora le emissioni personalizzate possono dichiarare che uno o più dei relativi setter possono essere ignorati e ricomposti indipendentemente dall'emissione. (Ibbd13)
Sono state rimosse le chiamate FrameManager deprecate.
Le API di composizione interne sono state modificate per ridurre l'overhead per il monitoraggio degli oggetti di stato come
mutableStateof()(I80ba6)Il composable
state { ... }è ora ritirato a favore di chiamate esplicite aremember { mutableStateOf(...) }per maggiore chiarezza. In questo modo si riduce la superficie complessiva dell'API e il numero di concetti per la gestione dello stato e si adatta al patternby mutableStateOf()per la delega delle proprietà delle classi. (Ia5727)Flow.collectAsState ora determina il dispatcher predefinito dalla composizione stessa anziché utilizzare Dispatchers.Main per impostazione predefinita. (I9c1d9)
È stato corretto un arresto anomalo che si verificava quando veniva utilizzata un'istruzione che salva lo stato all'interno del ciclo for. Ora è consentito avere la stessa chiave in savedInstanceState(), l'API di UiSavedStateRegistry è stata modificata in base a questo nuovo requisito (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561)
Correzioni di bug
emitViewè stato deprecato. Se possibile, utilizzaAndroidViewper emettere Views 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 foglie nell'albero di composizione, caso in cui ciò può essere ottenuto utilizzando AndroidView. (I29b1e, b/163871221)
Versione 0.1.0-dev16
5 agosto 2020
androidx.compose.runtime:runtime-*:0.1.0-dev16 è stato rilasciato. La versione 0.1.0-dev16 contiene questi commit.
Modifiche alle API
Il criterio di mutazione predefinito di
mutableStateOf(),ambientOf()esavedInstanceStateOf()è stato modificato instructuralEqualityPolicy()anzichéreferentialEqualityPolicy().Il valore predefinito per decidere se un nuovo valore assegnato a un'istanza
mutableStateOf()è considerato una modifica ora prevede l'utilizzo di==anziché di===.Vedi https://kotlinlang.org/docs/reference/equality.html
ambientOf()esavedInstanceStateOf()utilizzanomutableStateOf()nelle loro implementazioni, pertanto sono stati modificati per essere coerenti conmutableStateOf().L'utilizzo dell'uguaglianza strutturale corrisponde maggiormente alle aspettative degli sviluppatori.
Ad esempio,
val state = mutableStateOf(1f)seguito da
state.value = 1fnon sarà più considerata una modifica a
statee gli utilizzi distatedurante la composizione non dovranno più essere ricomposti.Si tratta di una modifica che causa interruzioni, ma nella maggior parte dei casi (ad esempio quando si utilizzano classi che non eseguono l'override di
equals()), non avrà un effetto evidente su un'applicazione.Le classi che eseguono l'override di
equals(), come le classidata, potrebbero riscontrare un peggioramento delle prestazioni perché i metodiequals()vengono ora chiamati per impostazione predefinita quando vengono assegnati a unmutableStateOf().Il comportamento precedente può essere ripristinato aggiungendo il parametro
policy = referentialEqualityPolicy()ai call dimutableStateOf(),ambientOf()esavedInstanceStateOf(). (Ic21a7)RoweColumnsono ora funzioni inline che riducono significativamente l'overhead del loro utilizzo. (I75c10)
Correzioni di bug
- setViewContent è stato ritirato. Al suo posto deve essere utilizzato setContent. (I7e497, b/160335130)
È stato aggiunto MonotonicFrameAnimationClock, che 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 ereditare da questa classe. [Modal/Bottom]DrawerLayout non accetta più un parametro onStateChange. (I72332, b/148023068)
Modifier.plus è deprecato, utilizza invece Modifier.then. "Poi" ha un segnale di ordinamento più forte e impedisce anche di digitare
Modifier.padding().background() + anotherModifier, che interrompe la catena e rende più difficile la lettura (Iedd58, b/161529964)Viene aggiunto SubcomposeLayout. È una primitiva di basso livello che consente di comporre i figli 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 TextField e TextField di base è stato rinominato BaseTextField per rendere l'API più semplice da scoprire e utilizzare (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 è stato rilasciato. La versione 0.1.0-dev15 contiene questi commit.
Aggiornamento delle dipendenze
- Per utilizzare la versione
0.1.0-dev15di Compose, devi aggiornare le dipendenze in base ai nuovi snippet di codice mostrati sopra nella sezione Dichiarazione delle dipendenze.
Modifiche alle API
L'annotazione
@Modelè ora deprecata. Utilizza state e mutableStateOf come alternative. Questa decisione di ritiro è stata presa dopo un'attenta discussione.Giustificazione
La motivazione include, a titolo esemplificativo:
- Riduce l'area di superficie e i concetti delle API che dobbiamo insegnare
- Più in linea con altri toolkit comparabili (Swift UI, React, Flutter)
- Decisione reversibile. Possiamo sempre ripristinare
@Modelin un secondo momento. - Rimuove l'utilizzo di casi limite e le domande difficili a cui rispondere sulla configurazione di
@Modelcome elementi da gestire. @Modelclassi di dati, equals, hashcode e così via.- Come faccio a fare in modo che alcune proprietà vengano "osservate" e altre no?
- Come faccio a specificare l'uguaglianza strutturale e referenziale da utilizzare nell'osservazione?
- Riduce la "magia" nel sistema. Riduce la probabilità che qualcuno presuma che il sistema sia più intelligente di quanto non sia (ad esempio, che sappia come differenziare un elenco)
- Rende più intuitiva la granularità dell'osservazione.
- Migliora la refactorability da variabile a proprietà nella classe
- Potenzialmente apre le possibilità di eseguire ottimizzazioni specifiche per stato create manualmente
- Si allinea maggiormente al resto dell'ecosistema e riduce l'ambiguità nei confronti dello stato immutabile o del nostro "stato mutabile".
Note sulla migrazione
Quasi tutti gli utilizzi esistenti di
@Modelvengono trasformati in modo abbastanza semplice in uno dei due modi. L'esempio seguente include una classe@Modelcon due proprietà solo a scopo illustrativo e viene utilizzata in un elemento componibile.@Model class Position( var x: Int, var y: Int ) @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }Alternativa 1: utilizza
State<OriginalClass>e crea copie.Questo approccio è semplificato dalle classi di dati di Kotlin. In sostanza, trasforma tutte le proprietà
varprecedenti in proprietàvaldi una classe di dati, quindi utilizzastateanzichéremembere assegna il valore di stato alle copie clonate dell'originale utilizzando il metodo praticocopy(...)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 modifica internamente al di fuori dell'ambito di utilizzo e ti affidi all'osservazione di questa modifica, l'approccio successivo è quello che devi 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: utilizzare mutableStateOf e i delegati di proprietà
Questo approccio è semplificato dai delegati di proprietà di Kotlin e dall'API
mutableStateOf, che consente di creare istanze MutableState al di fuori della composizione. In sostanza, sostituisci tutte le proprietàvardella classe originale con le proprietàvarconmutableStateOfcome delegato della proprietà. Il vantaggio è che l'utilizzo della classe non cambierà, ma solo la sua implementazione interna. Il comportamento non è completamente identico all'esempio originale, in quanto ogni proprietà viene ora osservata/sottoscritta individualmente, quindi le ricomposizioni che vedi dopo questo refactoring potrebbero essere più ristrette (il che è 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 Compose trasformava le chiamate alle funzioni componibili. Con questa modifica, ora trasformiamo il corpo di una funzione componibile e lasciamo invariato (per lo più) il punto di chiamata.
Ciò significa che la maggior parte della logica di comunicazione con il runtime di composizione si verifica all'inizio del corpo della funzione, anziché nel punto di chiamata.
Questa modifica dovrebbe essere compatibile con l'origine per tutto l'utilizzo di Compose. La maggior parte degli utenti di Compose non dovrà aggiornare alcun codice a seguito di questa modifica.
Per supportare questo lavoro, la firma JVM di tutte le funzioni componibili è stata modificata. 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 maschera di bit utilizzato per propagare i metadati tramite le chiamate.
Ora Compose trasforma anche gli argomenti predefiniti in una funzione componibile. Lo fa senza introdurre un sovraccarico predefinito sintetico aggiuntivo della funzione stessa, quindi questa modifica comporterà la definizione di un numero inferiore di funzioni.
Modifiche intenzionali note del comportamento risultanti da questa operazione:
- Alcune chiamate verranno saltate, cosa che non sarebbe successa in precedenza
- Le espressioni componibili nelle espressioni degli argomenti predefiniti ora vengono gestite e sottoscritte correttamente
Questo lavoro ha incluso alcune ottimizzazioni: 1. Il risultato dei confronti dei parametri viene propagato attraverso il grafico delle chiamate ad altre funzioni componibili. In questo modo vengono eseguiti meno confronti in fase di runtime, si riduce la dimensione della tabella degli slot e si saltano più funzioni componibili che in precedenza non venivano saltate 2. I parametri che vengono considerati "statici" in fase di compilazione non vengono più confrontati o archiviati nel 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 si riduce il lavoro per il runtime 4. I parametri di invio e ricezione inutilizzati per le funzioni non sono inclusi nella determinazione della possibilità di ignorare la funzione se non vengono utilizzati all'interno del corpo della funzione.
La maggior parte delle modifiche che causano interruzioni riguardava le API a cui si rivolge direttamente il 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. Gli overload non varargs di
keysono stati rimossi. Utilizza la versionevarargda ora in poi. 5. L'annotazione Pivotal è stata ritirata. Utilizzakeycome sostituzione. 6. ScopeUpdateScope::updateScope è stato modificato in modo da prevedere una Function3 anziché una Function1 7. restartableFunction e restartableFunctionN sono stati aggiornati per includere parametri aggiuntivi in fase di compilazione (I60756, b/143464846)Aggiunta di 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)
Aggiunto asMutableList() a MutableVector per consentire il passaggio all'API pubblica senza dover copiare l'intera lista. (I298df)
È stato aggiunto rememberCoroutineScope() per ottenere un CoroutineScope gestito nella composizione per lanciare job in risposta agli eventi. (I0e264)
MutableVector è una nuova raccolta che non implementa nessuna delle interfacce Collection standard. Questa raccolta offre velocità rispetto ad altri requisiti ed è destinata a essere utilizzata solo nelle implementazioni interne. (I8ebd6)
StableMutableListeStableMutableMapsono stati rimossi temporaneamente per evitare un problema nella versione di Kotlin richiesta da Compose. Queste interfacce verranno reintrodotte una volta che Compose sarà aggiornato a una versione di Kotlin che non presenta il problema.SnapshotStateListeSnapshotStateMapsono ora pubblici, ma verranno ritirati una volta ripristinatiStableMutableListeStableMutableMap. (Ia7769)aggiungi la funzione di primo livello withFrameNanos per la durata dell'animazione (Ie34c5)
L'annotazione @Untracked è stata ritirata. Sostituisci con @ComposableContract(tracked=false) (Id211e)
RestartableFunction e le API associate sono state rinominate in ComposableLambda e così via. Queste API erano destinate solo al compilatore, quindi normalmente non dovrebbero influire sulla compatibilità a livello di codice sorgente. Il cambio di nome è stato eseguito principalmente per comunicare meglio la funzione di questa classe quando viene visualizzata nelle analisi 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 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 della ricomposizione dovrebbe avvenire in seguito alle assegnazioni di MutableState. Per qualsiasi altro elemento, ti consigliamo di utilizzare la funzione
invalidateper attivare una ricomposizione dell'ambito corrente. (Ifc992)Observe non è più un'astrazione utile. Se devi replicarlo, 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 adattatore per StateFlow, introdotto di recente, che consente di precompilare il valore iniziale in modo che lo stato restituito non sia nullabile (I61dd8, b/156233789).
È stato aggiunto un adattatore per Flow. Esempio di utilizzo: val value by flow.collectAsState() (If2198, b/153375923)
Gli operatori delegati della proprietà [Mutable]State sono stati spostati nelle estensioni per supportare le ottimizzazioni dei delegati della proprietà Kotlin 1.4. I chiamanti devono aggiungere importazioni per continuare a utilizzare
by state { ... }oby mutableStateOf(...). (I5312c)androidx.compose.ViewComposer è stato spostato in androidx.ui.node.UiComposer androidx.compose.Emittable è 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
setContentosetViewContent. Compose.disposeComposition è stato ritirato. Utilizza invece il metododisposesuCompositionrestituito 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_PARAMin modo che siatrue, il che modificherà la strategia di generazione del codice per il plug-in di composizione. A livello generale, questo fa sì che le funzioni @Composable vengano generate con un parametro sintetico aggiuntivo, che viene passato alle chiamate @Composable successive affinché il runtime gestisca correttamente l'esecuzione. Si tratta di una modifica binaria significativa, ma dovrebbe preservare la compatibilità a livello di codice sorgente in tutti gli utilizzi approvati di Compose. (I7971c)Modifiche che causano interruzioni all'API ambients. Per maggiori dettagli, consulta la documentazione relativa ai log e a
Ambient<T>(I4c7ee, b/143769776)È stato aggiunto ui-livedata, un nuovo artefatto con un adattatore per LiveData. Esempio di utilizzo: val value by liveData.observeAsState() (Ie9e8c, b/150465596)
Gli adattatori Rx senza valore iniziale esplicito sono ritirati. L'utilizzo di null non è sempre la scelta migliore per impostazione predefinita, ad esempio quando hai un elenco è meglio iniziare con emptyList() o qualsiasi altro valore predefinito ragionevole (I00025, b/161348384).
Aggiunto ui-rxjava2: nuovo artefatto con adattatori per RxJava2. Esempio di utilizzo: val value by observable.subscribeAsState() (Ifab4b, b/153369097)
savedInstanceState()ora può essere utilizzato con i tipi che accettano valori null (I6847f, b/153532190)Nuove funzioni 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 il supporto integrato dello stato dell'istanza salvata (If1987, b/152025209)
Correzioni di bug
runOnIdleComposerinominato inrunOnIdle(I83607)- API sperimentale LayoutNode (I4f2e9)
- androidx.ui.foundation.TextFieldValue e androidx.ui.input.EditorValue sono deprecati. TextField, FilledTextField e CoreTextField che utilizzano questo tipo sono anch'essi deprecati. Utilizza androidx.ui.input.TextFieldValue (I4066d, b/155211005)
- Rimosse le API DrawBackground deprecate a favore delle API di estensione drawBackground su Modifier. È stato eseguito il refactoring delle implementazioni di colore, pennello e paint drawBackground per ridurre anche i percorsi del codice, nonché rimuovere il requisito di creazione di Modifier come parte della composizione. (I0343a)
- API Compose di livello superiore aggiornate che espongono un Canvas per esporre invece CanvasScope. In questo modo i consumatori non devono più gestire i propri oggetti Paint. Per 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 sottostante. (I80afd)
- L'API lambda finale WithConstraints è stata modificata. Ora, anziché due parametri, ha un ambito del destinatario che, oltre a vincoli e layoutDirection, fornisce le proprietà minWidth, maxWidth, minHeight e maxHeight in Dp (I91b9a, b/149979702)
- Aggiunto il modificatore di spaziatura interna simmetrica. (I39840)
- Aggiornamento di wrapContentWidth e wrapContentHeight per prevedere l'allineamento verticale o orizzontale anziché qualsiasi allineamento. Il modificatore di gravità è stato aggiornato per accettare l'allineamento verticale o orizzontale. Riga, Colonna e Stack sono stati aggiornati per supportare gli allineamenti continui personalizzati. (Ib0728)
- Il modulo ui-text viene rinominato ui-text-core (I57dec)
- Migliora l'API DrawModifier:
- È stato creato l'ambito del destinatario per draw() ContentDrawScope
- Rimossi tutti i parametri in draw()
- DrawScope ha la stessa interfaccia del precedente CanvasScope
- ContentDrawScope ha il metodo drawContent() (Ibaced, b/152919067)
- ColoredRect è stato ritirato. Utilizza invece
Box(Modifier.preferredSize(width, height).drawBackground(color)). (I499fa, b/152753731) - Sostituzione dell'operatore Modifier plus con le funzioni di estensione della fabbrica (I225e4)
- I membri di RowScope e ColumnScope sono ora accessibili al di fuori di Riga e Colonna. (I3a641)
- Layout flessibile rinominato in LayoutWeight. Il parametro stretto è stato rinominato in riempimento. (If4738)
- WithConstraints ha ricevuto il parametro LayoutDirection (I6d6f7)
- Rinomina lo sfondo in DrawBackground e impostalo come memorizzato per impostazione predefinita (Ia0bd3)
- ButtonStyle è stato sostituito con funzioni distinte ed è stata rimossa la sovraccarica di testo (stringa). Consulta gli esempi aggiornati per le informazioni sull'utilizzo. (If63ab, b/146478620, b/146482131)
runOnIdleComposeerunOnUiThreadsono ora funzioni globali anziché metodi di ComposeTestRule. (Icbe8f)
Contributo esterno
- Rimuovi le API non necessarie, come Looper e Handler, dal livello di porting di Compose Runtime (I6847d)
- Deprecare
Flow<T>.collectAsState()senza valore iniziale. UtilizzaStateFlow<T>o passa un valore iniziale esplicito. (I63f98, b/157674865)