Compose Runtime

Componenti di base del modello di programmazione e della gestione dello stato di Compose, nonché runtime di base per il plug-in del compilatore Compose come target.
Ultimo aggiornamento Release stabile Candidato per la release Versione beta Versione alpha
11 dicembre 2024 1.7.6 - - 1.8.0-alpha07

Struttura

Compose è una combinazione di 7 ID gruppo Maven in androidx. Ogni gruppo contiene un sottoinsieme mirato di funzionalità, ciascuna con il proprio insieme di note di rilascio.

Questa tabella illustra i gruppi e i link a ogni set di note di rilascio.

GruppoDescrizione
compose.animationCreare animazioni nelle loro applicazioni Jetpack Compose per arricchire l'esperienza utente.
compose.compilerTrasforma le funzioni @Composable e abilita le ottimizzazioni con un plug-in del compilatore Kotlin.
compose.foundationScrivi applicazioni Jetpack Compose con componenti di base pronti all'uso ed espandi la base per creare i componenti del tuo sistema di progettazione.
compose.materialCrea interfacce utente Jetpack Compose con componenti Material Design pronti all'uso. Si tratta del punto di contatto di primo livello di Compose, progettato per fornire componenti corrispondenti a quelli descritti all'indirizzo www.material.io.
compose.material3Crea interfacce utente Jetpack Compose con i componenti Material Design 3, la prossima evoluzione di Material Design. Material 3 include temi e componenti aggiornati e funzionalità di personalizzazione di Material You come i colori dinamici ed è progettato per essere coerente con il nuovo stile visivo e l'interfaccia utente di sistema di Android 12.
compose.runtimeComponenti di base del modello di programmazione e della gestione dello stato di Compose, nonché runtime di base per il plug-in del compilatore Compose come target.
compose.uiComponenti fondamentali dell'interfaccia utente di composizione necessari per interagire con il dispositivo, inclusi layout, disegno e input.

Dichiarazione delle dipendenze

Per aggiungere una dipendenza da Compose, devi aggiungere il repository Maven di Google al tuo progetto. Per ulteriori informazioni, consulta il repository Maven di Google.

Aggiungi le dipendenze per gli elementi necessari nel file build.gradle per la tua app o il tuo modulo:

Groovy

dependencies {
    implementation "androidx.compose.runtime:runtime:1.7.5"
    implementation "androidx.compose.runtime:runtime-livedata:1.7.5"
    implementation "androidx.compose.runtime:runtime-rxjava2:1.7.5"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.15"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

dependencies {
    implementation("androidx.compose.runtime:runtime:1.7.5")
    implementation("androidx.compose.runtime:runtime-livedata:1.7.5")
    implementation("androidx.compose.runtime:runtime-rxjava2:1.7.5")
}

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.15"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Per ulteriori informazioni sulle dipendenze, consulta Aggiungere dipendenze di compilazione.

Feedback

Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se riscontri nuovi problemi o hai idee per migliorare questa raccolta. Prima di crearne uno nuovo, dai un'occhiata ai problemi esistenti in questa raccolta. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.

Creare un nuovo problema

Per ulteriori informazioni, consulta la documentazione del Monitoraggio problemi.

Tracciamento del runtime versione 1.7

Versione 1.7.0-rc01

18 settembre 2024

androidx.compose.runtime:runtime-tracing:1.7.0-rc01 viene rilasciato. La versione 1.7.0-rc01 contiene questi commit.

Tracciamento del runtime versione 1.0

Versione 1.0.0-beta01

29 novembre 2023

androidx.compose.runtime:runtime-tracing:1.0.0-beta01 viene rilasciato. La versione 1.0.0-beta01 contiene questi commit.

Versione 1.0.0-alpha05

15 novembre 2023

androidx.compose.runtime:runtime-tracing:1.0.0-alpha05 viene rilasciato. La versione 1.0.0-alpha05 contiene questi commit.

Correzioni di bug

  • Dipendenze bloccate alle versioni stabili più recenti supportate (ad es.compose-runtime e tracing-perfetto). È stato risolto un problema per cui compose-runtime-tracing importava una versione più recente di compose-runtime nell'app.

Versione 1.0.0-alpha04

23 agosto 2023

androidx.compose.runtime:runtime-tracing:1.0.0-alpha04 viene rilasciato. La versione 1.0.0-alpha04 contiene questi commit.

Nuove funzionalità

  • Compatibile con le versioni più recenti di Benchmark e Tracing Perfetto, che consentono il supporto del monitoraggio della composizione all'avvio dell'app (avvio a freddo), ad esempio in AndroidX Benchmark e Android Studio (a partire da Hedgehog Beta 2).

Modifiche all'API

  • androidx.tracing.perfetto.Trace rinominato in androidx.tracing.perfetto.PerfettoSdkTrace. (I44af8)
  • Rendere le API SDK Tracing Perfetto coerenti con android.os.Trace. (I73ba0, b/282199917)
  • Prerequisiti per il monitoraggio all'avvio dell'app. (Iad890)
  • File API sperimentali e pubblici uniti (I0f2e1, b/278769092)

Versione 1.0.0-alpha02

8 febbraio 2023

androidx.compose.runtime:runtime-tracing:1.0.0-alpha02 viene rilasciato. La versione 1.0.0-alpha02 contiene questi commit.

Nuove funzionalità

  • Nessuna modifica funzionale. Più ottimizzazioni delle prestazioni nelle dipendenze a valle androidx.tracing:tracing-perfetto*.

Versione 1.0.0-alpha01

7 settembre 2022

androidx.compose.runtime:runtime-tracing:1.0.0-alpha01 viene rilasciato. La versione 1.0.0-alpha01 contiene questi commit.

Nuove funzionalità

  • androidx.compose.runtime:runtime-tracing è una libreria che, in presenza di strumenti di supporto (disponibile a breve), consente il monitoraggio esteso in un'app Compose. Questa release iniziale è 1.0.0-alpha01.

Versione 1.8

Versione 1.8.0-alpha07

11 dicembre 2024

androidx.compose.runtime:runtime-*:1.8.0-alpha07 viene rilasciato. La versione 1.8.0-alpha07 contiene questi commit.

Modifiche all'API

  • È stata aggiunta un'API di strumenti che aiuta l'ispettore del layout a correlare le sottocomposizioni alla composizione principale nei casi in cui non viene utilizzato un nodo per collegare le composizioni. (I4ce3d)
  • Le costanti aritmetiche e speciali per SnapshotId sono state rese interne anziché pubbliche. Se necessario, è possibile eseguire operazioni aritmetiche su un SnasphotId convertendolo in un Int o un Long utilizzando rispettivamente toInt() o toLong(). (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 viene rilasciato. La versione 1.8.0-alpha06 contiene questi commit.

Modifiche all'API

  • Modifiche all'API PausableComposition. Queste modifiche non compatibili con le release precedenti di 1.8.0-alpha (da 1.8.0-alpha02), ma poiché si tratta di nuove API in 1.8.0, la compatibilità con le versioni precedenti non è mantenuta perché le API sono ancora in versione alpha. (I39819)
  • Aggiunge API di strumenti per osservare la creazione di nuove composizioni all'interno di un Recomposer (Iaeb7e)
  • È stato aggiunto snapshotId di tipo Long a Snapshot e id è stato ritirato. L'ID di uno snapshot è passato da Int a Long per evitare che l'ID snapshot superi la capacità massima su sistemi con frequenze fotogrammi molto elevate e animazioni a lunga esecuzione. Il tipo è stato impostato su previsto/effettivo per consentire che sia Int o di un altro tipo su piattaforme che non dispongono di un tipo Long nativo. Le piattaforme che non dispongono di un Long nativo, come JavaScript, devono evitare frequenze frame elevate (oltre 1000 FPS), che causerebbero un overflow per Int ogni 24 giorni circa. (I38ac3, b/374821679)

Correzioni di bug

Versione 1.8.0-alpha05

30 ottobre 2024

androidx.compose.runtime:runtime-*:1.8.0-alpha05 viene rilasciato. La versione 1.8.0-alpha05 contiene questi commit.

Correzioni di bug

  • Correggi l'overflow dello stack aggiungendo Int.MAX_VALUE a SnapshotIdSet. (b/370536104, Ic4179f6)
  • Micro-ottimizzazioni di runtime (I50c60)
  • Consenti a R8 di rimuovere le chiamate runtimeCheck di debug (I8c44)
  • Rendi compoundKeyOf iterativo anziché ricorsivo (I5817f)

Contributo esterno

  • Implementare gli stack con gli elenchi di raccolte (I7d47c)

Versione 1.8.0-alpha04

16 ottobre 2024

androidx.compose.runtime:runtime-*:1.8.0-alpha04 viene rilasciato. La versione 1.8.0-alpha04 contiene questi commit.

Miglioramenti delle prestazioni

  • Fornisci l'ID snapshot per i record dello stato nel costruttore (85c00f)
  • Esegui il refactoring di SnapshotState*** per evitare errori di verifica del corso (6ee4a6)
  • Correggi le regole R8 per impedire l'inserimento in linea di throw (5beb92)
  • Micro-ottimizza le operazioni (d73c5c)
  • Ottimizza le allocazioni di SynchronizedObject sulla JVM (2b043f)

Versione 1.8.0-alpha03

2 ottobre 2024

androidx.compose.runtime:runtime-*:1.8.0-alpha03 viene rilasciato. La versione 1.8.0-alpha03 contiene questi commit.

Miglioramenti delle prestazioni

  • Creare in modo lazy il contesto figlio per rememberCoroutineScope (f61464)
    • rememberCoroutineScope viene in genere utilizzato per avviare le coroutine in risposta agli eventi che si verificano dopo la composizione. In alcuni casi questi eventi potrebbero non verificarsi mai, con un conseguente aumento dei costi di creazione e annullamento dei job senza alcun vantaggio.
    • Fai in modo che l'ambito restituito da rememberCoroutineScope crei il proprio coroutineContext in modo lazy quando viene eseguito l'accesso, evitando completamente la creazione e l'annullamento dei job se l'ambito non viene mai utilizzato.

Versione 1.8.0-alpha02

18 settembre 2024

androidx.compose.runtime:runtime-*:1.8.0-alpha02 viene rilasciato. La versione 1.8.0-alpha02 contiene questi commit.

Nuove funzionalità

  • È stato aggiunto PausableComposition che consente di creare una composizione secondaria che può essere messa in pausa durante la composizione e applicata in modo asincrono alla composizione. Per la messa in pausa è necessario il supporto del compilatore, che è attualmente in fase di sviluppo. (I3394b)

Versione 1.8.0-alpha01

4 settembre 2024

androidx.compose.runtime:runtime-*:1.8.0-alpha01 viene rilasciato. La versione 1.8.0-alpha01 contiene questi commit.

Versione 1.7

Versione 1.7.6

11 dicembre 2024

androidx.compose.runtime:runtime-*:1.7.6 viene rilasciato. La versione 1.7.6 contiene questi commit.

Versione 1.7.5

30 ottobre 2024

androidx.compose.runtime:runtime-*:1.7.5 viene rilasciato. La versione 1.7.5 contiene questi commit.

Versione 1.7.4

16 ottobre 2024

androidx.compose.runtime:runtime-*:1.7.4 viene rilasciato. La versione 1.7.4 contiene questi commit.

Versione 1.7.3

2 ottobre 2024

androidx.compose.runtime:runtime-*:1.7.3 viene rilasciato. La versione 1.7.3 contiene questi commit.

Versione 1.7.2

18 settembre 2024

androidx.compose.runtime:runtime-*:1.7.2 viene rilasciato. La versione 1.7.2 contiene questi commit.

Versione 1.7.1

10 settembre 2024

  • Nessuna modifica agli elementi Android. Sono stati rimossi -desktop elementi e aggiunti -jvmStubs e -linuxx64Stubs elementi. Nessuno di questi target è destinato all'uso, ma sono segnaposto per supportare le attività di JetBrains Compose.

Versione 1.7.0

4 settembre 2024

androidx.compose.runtime:runtime-*:1.7.0 viene rilasciato. La versione 1.7.0 contiene questi commit.

Modifiche importanti dalla versione 1.6.0

  • È stata aggiunta la possibilità di fornire un locale della composizione calcolato in base ai valori di altri locali della composizione per impostazione predefinita, utilizzando compositionLocalWithComputedDefault() o fornendo una funzione lambda da utilizzare per calcolare il valore utilizzando providesComputed anziché provides.
  • Il valore di un locale della composizione può essere ottenuto utilizzando la proprietà currentValue del locale della composizione accessibile dall'interno della funzione lambda che calcola il valore. Viene utilizzato al posto di current, che è accessibile solo nelle funzioni @Composable. (Iadbc0)
  • Gli oggetti stato appena creati sono immediatamente accessibili da altri snapshot, incluso lo snapshot globale, con il loro stato iniziale. Eventuali modifiche successive non sono visibili finché non viene applicato lo snapshot in cui è stato creato l'oggetto.
  • Lo stato iniziale di mutableStateOf(), così come le relative versioni primitive, è il valore passato come parametro a mutableStateOf(). Lo stato iniziale di mutableStateListOf() e mutableStateMapOf() è vuoto.
  • Sono stati aggiunti Snapshot.isInSnapshot e Snapshot.PreexistingSnapshotId, che vengono utilizzati per consentire a un oggetto stato di essere immediatamente accessibile dallo snapshot globale al momento della sua creazione.
  • Gli oggetti stato personalizzati possono essere immediatamente accessibili seguendo il pattern delle modifiche apportate agli oggetti istantanea incorporati. (I84a17)
  • Attiva nonSkippingGroupOptimization per le librerie di composizione. In questo modo, il codice generato per tutte le funzioni composable non riavviabili in androidx è più efficiente. In futuro prevediamo di attivarla per impostazione predefinita. I(acbc08)
  • Annullare le lambda composable nelle sottocomposizioni nello stesso frame. (98301c)
  • Chiama il callback onRelease nello stesso ordine di onForgotten. (2cd790)
  • Attivare la modalità di avanzamento veloce (ed1766)
  • Rendere currentCompoundHashKey univoco in più casi (d4a872)

Versione 1.7.0-rc01

21 agosto 2024

androidx.compose.runtime:runtime-*:1.7.0-rc01 viene rilasciato. La versione 1.7.0-rc01 contiene questi commit.

Versione 1.7.0-beta07

7 agosto 2024

androidx.compose.runtime:runtime-*:1.7.0-beta07 viene rilasciato. La versione 1.7.0-beta07 contiene questi commit.

Versione 1.7.0-beta06

24 luglio 2024

androidx.compose.runtime:runtime-*:1.7.0-beta06 viene rilasciato. La versione 1.7.0-beta06 contiene questi commit.

Versione 1.7.0-beta05

10 luglio 2024

androidx.compose.runtime:runtime-*:1.7.0-beta05 viene rilasciato. La versione 1.7.0-beta05 contiene questi commit.

Versione 1.7.0-beta04

26 giugno 2024

androidx.compose.runtime:runtime-*:1.7.0-beta04 viene rilasciato. La versione 1.7.0-beta04 contiene questi commit.

Versione 1.7.0-beta03

12 giugno 2024

androidx.compose.runtime:runtime-*:1.7.0-beta03 viene rilasciato. La versione 1.7.0-beta03 contiene questi commit.

Versione 1.7.0-beta02

29 maggio 2024

androidx.compose.runtime:runtime-*:1.7.0-beta02 viene rilasciato. La versione 1.7.0-beta02 contiene questi commit.

Versione 1.7.0-beta01

14 maggio 2024

androidx.compose.runtime:runtime-*:1.7.0-beta01 viene rilasciato. La versione 1.7.0-beta01 contiene questi commit.

Versione 1.7.0-alpha08

1° maggio 2024

androidx.compose.runtime:runtime-*:1.7.0-alpha08 viene rilasciato. La versione 1.7.0-alpha08 contiene questi commit.

Versione 1.7.0-alpha07

17 aprile 2024

androidx.compose.runtime:runtime-*:1.7.0-alpha07 viene rilasciato. La versione 1.7.0-alpha07 contiene questi commit.

Nuove funzionalità

  • È stata aggiunta la possibilità di fornire un locale della composizione calcolato in base ai valori di altri locali della composizione per impostazione predefinita, utilizzando compositionLocalWithComputedDefault() o fornendo una funzione lambda da utilizzare per calcolare il valore utilizzando providesComputed anziché provides.
  • Il valore di un locale della composizione può essere ottenuto utilizzando la proprietà currentValue del locale della composizione accessibile dall'interno della funzione lambda che calcola il valore. Viene utilizzato al posto di current, che è accessibile solo nelle funzioni @Composable. (Iadbc0)

Modifiche all'API

  • Gli oggetti stato appena creati sono immediatamente accessibili da altri snapshot, incluso lo snapshot globale, con il loro stato iniziale. Eventuali modifiche successive non sono visibili finché non viene applicato lo snapshot in cui è stato creato l'oggetto.
  • Lo stato iniziale di mutableStateOf(), così come le relative versioni primitive, è il valore passato come parametro a mutableStateOf(). Lo stato iniziale di mutableStateListOf() e mutableStateMapOf() è vuoto.
  • Sono stati aggiunti Snapshot.isInSnapshot e Snapshot.PreexistingSnapshotId, che vengono utilizzati per consentire a un oggetto stato di essere immediatamente accessibile dallo snapshot globale al momento della sua creazione.
  • Gli oggetti stato personalizzati possono essere immediatamente accessibili seguendo il pattern delle modifiche apportate agli oggetti istantanea incorporati. (I84a17)

Correzioni di bug

  • È stato corretto l'unione di readObserver negli snapshot nidificati. Ciò ha causato un'invalidazione insufficiente degli stati derivati nidificati quando utilizzati all'interno di un snapshotFlow. (Idf138)

Versione 1.7.0-alpha06

3 aprile 2024

androidx.compose.runtime:runtime-*:1.7.0-alpha06 viene rilasciato. La versione 1.7.0-alpha06 contiene questi commit.

Correzioni di bug

  • Correzione della gestione dei valori singoli providesDefault (538f45)
  • Evitare un deadlock nel Recomposer che accede all'orologio del frame (07e5c6)

Versione 1.7.0-alpha05

20 marzo 2024

androidx.compose.runtime:runtime-*:1.7.0-alpha05 viene rilasciato. La versione 1.7.0-alpha05 contiene questi commit.

Correzioni di bug

  • Cancellare le modifiche tardive alla composizione disattivata (5950bc)

Versione 1.7.0-alpha04

6 marzo 2024

androidx.compose.runtime:runtime-*:1.7.0-alpha04 viene rilasciato. La versione 1.7.0-alpha04 contiene questi commit.

Miglioramenti delle prestazioni

  • Chiama Snapshot.current una volta per valutazione dello stato derivato (ee7daf)
  • Leggi currentRecord una volta per osservazione nella composizione (b882b2)
  • Rimuovere l'allocazione accidentale dell'iteratore in snapshotFlow (231e56)
  • Attiva nonSkippingGroupOptimization per le librerie di composizione. In questo modo, il codice generato per tutte le funzioni composable non riavviabili in androidx è più efficiente. In futuro prevediamo di attivarla per impostazione predefinita. I(acbc08)

Versione 1.7.0-alpha03

21 febbraio 2024

androidx.compose.runtime:runtime-*:1.7.0-alpha03 viene rilasciato. La versione 1.7.0-alpha03 contiene questi commit.

Modifiche all'API

  • Introduzione di gruppi di sostituzione per migliorare il rilevamento delle modifiche (0941b5)

Miglioramenti delle prestazioni

  • Migliorare l'allocazione della memoria durante il rilevamento delle modifiche (53e7fd)
  • Correzione di una perdita di memoria nel Composer (0e097d)
  • Utilizza ScopeMap per passare le convalide durante la ricompozione (e19a7e)
  • Ottimizza la mappa degli invalidamenti in modo da conservare solo gli stati derivati (f11c44)
  • Sostituire gli utilizzi di IdentityArraySet con ScatterSet (db572e)
  • Ottimizza removeScope in ScopeMap (bb0530)

Versione 1.7.0-alpha02

7 febbraio 2024

androidx.compose.runtime:runtime-*:1.7.0-alpha02 viene rilasciato. La versione 1.7.0-alpha02 contiene questi commit.

Correzioni di bug

  • Annullare le lambda composable nelle sottocomposizioni nello stesso frame. (98301c)
  • Chiama il callback onRelease nello stesso ordine di onForgotten. (2cd790)
  • Filtra gli stati modificati che non sono osservati in snapshotFlow. (796b80)

Miglioramenti delle prestazioni

  • Modifica l'osservatore istantaneo in situ quando è già trasparente. (f60f30)
  • Ottimizza SnapshotIdSet.lowest(). (7ae149)
  • Utilizza un fold() senza allocazione in SnapshotIdSet. (532b7d)
  • Rimuovere l'allocazione dell'iteratore (83f96b)

Versione 1.7.0-alpha01

24 gennaio 2024

androidx.compose.runtime:runtime-*:1.7.0-alpha01 viene rilasciato. La versione 1.7.0-alpha01 contiene questi commit.

Ottimizzazioni del rendimento

  • Aggiunta la possibilità di creare slot dopo aver aggiunto un gruppo secondario (b5960c)
  • Ottimizzare la registrazione delle modifiche degli stati degli snapshot (28c3fe)
  • Attivare la modalità di avanzamento veloce (ed1766)

Correzioni di bug

  • Tenere conto del meta parametro predefinito nella funzionalità di memorizzazione nella cache intrinseca (096665)
  • Rendere currentCompoundHashKey univoco in più casi (d4a872)
  • Realizzare gruppi quando si esce dalla chiamata di funzione in linea (2a90fc)

Versione 1.6

Versione 1.6.8

12 giugno 2024

androidx.compose.runtime:runtime-*:1.6.8 viene rilasciato. La versione 1.6.8 contiene questi commit.

Versione 1.6.7

1° maggio 2024

androidx.compose.runtime:runtime-*:1.6.7 viene rilasciato. La versione 1.6.7 contiene questi commit.

Versione 1.6.6

17 aprile 2024

androidx.compose.runtime:runtime-*:1.6.6 viene rilasciato. Nessuna modifica dall'ultima release.

Versione 1.6.5

3 aprile 2024

androidx.compose.runtime:runtime-*:1.6.5 viene rilasciato. La versione 1.6.5 contiene questi commit.

Versione 1.6.4

20 marzo 2024

androidx.compose.runtime:runtime-*:1.6.4 viene rilasciato. La versione 1.6.4 contiene questi commit.

Versione 1.6.3

6 marzo 2024

androidx.compose.runtime:runtime-*:1.6.3 viene rilasciato. La versione 1.6.3 contiene questi commit.

Versione 1.6.2

21 febbraio 2024

androidx.compose.runtime:runtime-*:1.6.2 viene rilasciato. La versione 1.6.2 contiene questi commit.

Versione 1.6.1

7 febbraio 2024

androidx.compose.runtime:runtime-*:1.6.1 viene rilasciato. La versione 1.6.1 contiene questi commit.

Correzioni di bug

  • Chiama il callback onRelease nello stesso ordine di onForgotten. (2cd790)
  • Filtra gli stati modificati che non sono osservati in snapshotFlow. (796b80)

Versione 1.6.0

24 gennaio 2024

androidx.compose.runtime:runtime-*:1.6.0 viene rilasciato. La versione 1.6.0 contiene questi commit.

Modifiche importanti dalla versione 1.5.0

Nuove funzionalità

  • Rilasciare nuovamente le eccezioni assorbite durante il loop di ricompozione (4dff9a)

Ottimizzazioni del rendimento

  • Ottimizzare la registrazione delle modifiche degli stati degli snapshot (28c3fe)
  • Ottimizza rememberSaveable (f01d79)
  • Rimandare la rilettura degli stati derivati fino a quando le modifiche non vengono registrate (f38099)
  • Migliorare la fornitura di valori locali della composizione (a337ea)

Correzioni di bug

  • Correzione della perdita di memoria della tabella delle posizioni (73fcfe)
  • Salta la ricompozione delle sottocomposizioni che verranno rimosse. (Ieeb99, b/254645321)
  • Attiva i cicli di vita di RememberObserver solo quando sono memorizzati nel calcolo del ricordo. (f6b4dc)
  • Limita la cattura di $dirty ai lambda in linea. (acfca0)
  • Correzione del problema per cui i contenuti spostabili a volte ricevevano le lingue di composizione sbagliate. (035cd6)

Versione 1.6.0-rc01

10 gennaio 2024

androidx.compose.runtime:runtime-*:1.6.0-rc01 viene rilasciato. La versione 1.6.0-rc01 contiene questi commit.

Versione 1.6.0-beta03

13 dicembre 2023

androidx.compose.runtime:runtime-*:1.6.0-beta03 viene rilasciato. La versione 1.6.0-beta03 contiene questi commit.

Versione 1.6.0-beta02

29 novembre 2023

androidx.compose.runtime:runtime-*:1.6.0-beta02 viene rilasciato. La versione 1.6.0-beta02 contiene questi commit.

Versione 1.6.0-beta01

15 novembre 2023

androidx.compose.runtime:runtime-*:1.6.0-beta01 viene rilasciato. La versione 1.6.0-beta01 contiene questi commit.

Modifiche all'API

  • Propaga determinati valori di stabilità nell'annotazione. (274a4c)

Correzioni di bug

  • Utilizza il criterio di riferimento per lo stato dell'ambito locale della composizione nel contesto. (83361c)
  • Limita la cattura di $dirty alle lambda in linea. (acfca0)
  • Correzione del problema per cui i contenuti spostabili a volte ricevevano le lingue di composizione sbagliate. (035cd6)
  • Utilizza mappe hash non allocanti più veloci in RecomposeScopeImpl. (d79494)
  • Usa ObjectIntMap in DerivedState. (21862e)
  • Utilizza IntRef per int SnapshotThreadLocal in DerivedState. (04eaf4)

Versione 1.6.0-alpha08

18 ottobre 2023

androidx.compose.runtime:runtime-*:1.6.0-alpha08 viene rilasciato. La versione 1.6.0-alpha08 contiene questi commit.

Correzioni di bug

  • Attiva i cicli di vita di RememberObserver solo quando sono memorizzati nel calcolo del ricordo. (f6b4dc)
  • Miglioramento delle allocazioni nell'ordinamento dell'elenco delle invalidazioni. (954d63)
  • Utilizza le nuove mappe non allocative in SnapshotStateObserver. (4303ce)
  • Cancella le convalide quando la composizione viene disattivata. (e001be)

Versione 1.6.0-alpha07

4 ottobre 2023

androidx.compose.runtime:runtime-*:1.6.0-alpha07 viene rilasciato. La versione 1.6.0-alpha07 contiene questi commit.

Modifiche all'API

  • SnapshotStateList ora è contrassegnato come RandomAccess per consentire l'utilizzo della versione di indicizzazione diretta degli aiuti per gli elenchi. (I5210c, b/219554654)

Versione 1.6.0-alpha06

20 settembre 2023

androidx.compose.runtime:runtime-*:1.6.0-alpha06 viene rilasciato. La versione 1.6.0-alpha06 contiene questi commit.

Versione 1.6.0-alpha05

6 settembre 2023

androidx.compose.runtime:runtime-*:1.6.0-alpha05 viene rilasciato. La versione 1.6.0-alpha05 contiene questi commit.

Versione 1.6.0-alpha04

23 agosto 2023

androidx.compose.runtime:runtime-*:1.6.0-alpha04 viene rilasciato. La versione 1.6.0-alpha04 contiene questi commit.

Nuove funzionalità

  • Rilasciare nuovamente le eccezioni assorbite durante il loop di ricompozione (4dff9a)

Modifiche all'API

  • È stato aggiunto un metodo per disattivare ReusableComposition, rimuovendo le osservazioni, ma mantenendo invariati i nodi. La composizione disattivata può essere riattivata chiamando setContent. (Ib7f31)
  • Aggiungi l'interfaccia ReusableComposition per gestire il ciclo di vita e il riutilizzo delle sottocomposizioni. (I812d1, b/252846775)

Versione 1.6.0-alpha03

9 agosto 2023

androidx.compose.runtime:runtime-*:1.6.0-alpha03 viene rilasciato. La versione 1.6.0-alpha03 contiene questi commit.

Correzioni di bug

  • Correzione della nuova ottimizzazione CompositionLocalProvider (3118e88)
  • Correggi il modo in cui i nodi dei contenuti mobili vengono smontati. (5e3d59b)

Versione 1.6.0-alpha02

26 luglio 2023

androidx.compose.runtime:runtime-*:1.6.0-alpha02 viene rilasciato. La versione 1.6.0-alpha02 contiene questi commit.

Nuove funzionalità e miglioramenti del rendimento

  • Ottimizza rememberSaveable (f01d79)
  • Rimandare la rilettura degli stati derivati fino a quando le modifiche non vengono registrate (f38099)
  • Migliorare la fornitura di valori locali della composizione (a337ea)
  • SideEffect è contrassegnato come @ExplicitGroupsComposable per evitare la generazione di un gruppo. (I74815)
  • Evita di confrontare le mappe locali della composizione al riutilizzo (782071)

Modifiche all'API

  • È stato aggiunto un sovraccarico per casi speciali per CompositionLocalProviders che evita il sovraccarico utilizzato per velocizzare la fornitura di più valori, ma che rappresenta un sovraccarico quando viene fornito un singolo valore. (I6d640, b/288169379)

Correzioni di bug

  • Correzione della perdita di memoria della tabella delle posizioni (73fcfe)
  • Correggere il modo in cui viene ripristinato rememberSaveable quando stateSaver restituisce null (90748c)

Versione 1.6.0-alpha01

21 giu 2023

androidx.compose.runtime:runtime-*:1.6.0-alpha01 viene rilasciato. La versione 1.6.0-alpha01 contiene questi commit.

Correzioni di bug

  • Salta la ricompozione delle sottocomposizioni che verranno rimosse. (Ieeb99, b/254645321)
  • Riduci le allocazioni quando applichi gli snapshot. (I65c09)
  • Evitare di calcolare readableHash in DerivedState se lo snapshot non è stato modificato (68c565)

Versione 1.5

Versione 1.5.4

18 ottobre 2023

androidx.compose.runtime:runtime-*:1.5.4 viene rilasciato. La versione 1.5.4 contiene questi commit.

Versione 1.5.3

4 ottobre 2023

androidx.compose.runtime:runtime-*:1.5.3 viene rilasciato. La versione 1.5.3 contiene questi commit.

Versione 1.5.2

27 settembre 2023

androidx.compose.runtime:runtime-*:1.5.2 viene rilasciato. La versione 1.5.2 contiene questi commit.

Versione 1.5.1

6 settembre 2023

androidx.compose.runtime:runtime-*:1.5.1 viene rilasciato. La versione 1.5.1 contiene questi commit.

Versione 1.5.0

9 agosto 2023

androidx.compose.runtime:runtime-*:1.5.0 viene rilasciato. La versione 1.5.0 contiene questi commit.

Modifiche all'API

  • Sono state rimosse le allocazioni in rielaborazioni, animazioni a colori e AndroidComposeView. (Ib2bfa)
  • È stata aggiunta un'annotazione @StateFactoryMarker per contrassegnare le funzioni che creano stati e devono essere racchiuse in una chiamata remember. (I64550)
  • Aggiunta di versioni primitive di Stato e MutableState (fb3d89)
  • Aggiunto Snapshot.isApplyObserverNotificationPending (I672a5)
  • Sono state aggiunte versioni primitive dell'API State, che consentono di monitorare i valori Int, Long, Float e Double negli oggetti State senza incorrere in penalità per l'autoboxing. Per utilizzarli, usa i nuovi metodi di fabbrica mutableIntState(Int), mutableFloatStateOf(Float) e così via. (I48e43)

Correzioni di bug

  • Salta la ricompozione delle sottocomposizioni che verranno rimosse. (Ieeb99, b/254645321)
  • Non conservare il riferimento allo snapshot in ComposerImpl (0206f7)
  • Non applicare la composizione due volte (f5791b)
  • Garantire l'invalidazione per i valori dello stato derivato non inizializzati (aa2a92)
  • Chiama onEndChanges durante lo smaltimento della composizione. (62cc8c)
  • Correzione dello spostamento dei contenuti in una composizione secondaria (4beb41)
  • Risolvere potenziali deadlock (c1a425 e 8edce0)
  • Ora il ricostruttore creato per una finestra Android bloccherà solo le chiamate a withFrameNanos anziché a 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 di withFrameNanos verranno bloccate. (Id9e7f, b/240975572)
  • Esegui i callback di disattivazione per LayoutNode prima di eliminare gli effetti 3784073
  • Correggi i flag modificati per i lambda riavviati ea81df9
  • Correzione della regressione della modifica in tempo reale per i componenti composibili con nodi 73fd4d8
  • ON_STOP dovrebbe mettere in pausa le trasmissioni dell'orologio del frame anziché della composizione ae276f1
  • Annullare l'aggiornamento degli ambiti SnapshotStateObserver per gli stati derivati invariati 84d9b1c
  • Correzione di un potenziale blocco quando si eliminano le composizioni 28761fc
  • Correggere lo spostamento dei contenuti in una composizione secondaria 92d4156
  • Correggere i flag modificati per i lambda riavviati (8a03e9)
  • Esegui i callback di disattivazione per LayoutNode prima di eliminare gli effetti (8b0fa4)
  • Correggi endToMarker() al termine dei gruppi di nodi. (d71d980)
  • Utilizza il gruppo SlotWriter corrente per il controllo della disattivazione (a0b518b)
  • Rimuovi fill in SlotTable.moveSlotGapTo() e spostalo in chiusura (81f9935)
  • Correzione delle convalide mancanti durante lo spostamento dei contenuti spostabili (1d7c024)
  • Correggere le convalide immediate per i contenuti spostabili spostati (8676618)

Miglioramenti delle prestazioni

  • Evita di calcolare readableHash in DerivedState se lo snapshot non è stato modificato. (307102)
  • Allocazioni ridotte (I65c09, d7ea77, 727974 e 445808)
  • Annullamento rapido della composizione CoroutineScopes (a55362 e bd382f)
  • Sovrascrivi i record degli oggetti stato con record di stato inaccessibili (c986960)
  • Utilizza il compositore dell'ambito corretto quando realizzi i gruppi (9a5e5b6)
  • Utilizza IdentityArraySet per memorizzare gli invalidamenti degli snapshot (7f60cca)
  • Riduci le allocazioni per le osservazioni degli snapshot (5bc535f)

Versione 1.5.0-rc01

26 luglio 2023

androidx.compose.runtime:runtime-*:1.5.0-rc01 viene rilasciato. La versione 1.5.0-rc01 contiene questi commit.

Correzioni di bug

  • Rimandare la rilettura degli stati derivati fino a quando le modifiche non vengono registrate (f38099)

  • È disponibile un'ispezione facoltativa per consigliare la migrazione delle chiamate mutableStateOf() ai tipi specializzati corrispondenti per le primitive. Il relativo ID lint è AutoboxingStateCreation. In precedenza, questa ispezione era attiva per impostazione predefinita per tutti i progetti. Per visualizzare questo avviso nell'editor di Android Studio e negli output di lint del progetto, modifica la gravità da informativa ad avviso (o superiore) dichiarando warning "AutoboxingStateCreation" all'interno della configurazione build.gradle o build.gradle.kts del modulo come mostrato (I34f7e):

        android {
            lint {
                warning "AutoboxingStateCreation"
            }
            ...
        }
    

Versione 1.5.0-beta03

28 giugno 2023

androidx.compose.runtime:runtime-*:1.5.0-beta03 viene rilasciato. La versione 1.5.0-beta03 contiene questi commit.

Correzioni di bug

  • Salta la ricompozione delle sottocomposizioni che verranno rimosse. (Ieeb99, b/254645321)

Versione 1.5.0-beta02

7 giugno 2023

androidx.compose.runtime:runtime-*:1.5.0-beta02 viene rilasciato. La versione 1.5.0-beta02 contiene questi commit.

Miglioramenti delle prestazioni

  • Evita di calcolare readableHash in DerivedState se lo snapshot non è stato modificato. (307102)

Versione 1.5.0-beta01

24 maggio 2023

androidx.compose.runtime:runtime-*:1.5.0-beta01 viene rilasciato. La versione 1.5.0-beta01 contiene questi commit.

Modifiche all'API

  • Sono state rimosse le allocazioni in ricreazione, animazioni a colori e AndroidComposeView (Ib2bfa)
  • È stata aggiunta un'annotazione @StateFactoryMarker per contrassegnare le funzioni che creano stati e devono essere racchiuse in una chiamata remember. (I64550)
  • Aggiunta di versioni primitive di Stato e MutableState (fb3d89)
  • Aggiunto Snapshot.isApplyObserverNotificationPending (I672a5)

Correzioni di bug

  • Allocazioni ridotte (I65c09, d7ea77, 727974 e 445808)
  • Non conservare il riferimento allo snapshot in ComposerImpl (0206f7)
  • Annullamento rapido della composizione CoroutineScopes (a55362 e bd382f)
  • Non applicare la composizione due volte (f5791b)
  • Garantire l'invalidazione per i valori dello stato derivato non inizializzati (aa2a92)
  • Chiama onEndChanges durante lo smaltimento della composizione. (62cc8c)
  • Correzione dello spostamento dei contenuti in una composizione secondaria (4beb41)
  • Risolvere potenziali deadlock (c1a425
  • ON_STOP dovrebbe mettere in pausa le trasmissioni dell'orologio del frame anziché della composizione (f4a2d1)
  • Correggere i flag modificati per i lambda riavviati (8a03e9)
  • Esegui i callback di disattivazione per LayoutNode prima di eliminare gli effetti (8b0fa4)

Contributo esterno

  • Aggiunto Snapshot.isApplyObserverNotificationPending (I672a5)

Versione 1.5.0-alpha04

10 maggio 2023

androidx.compose.runtime:runtime-*:1.5.0-alpha04 viene rilasciato. La versione 1.5.0-alpha04 contiene questi commit.

Modifiche all'API

  • Sono state aggiunte versioni primitive dell'API State, che consentono di monitorare i valori Int, Long, Float e Double negli oggetti State senza incorrere in penalità per l'autoboxing. Per utilizzarli, usa i nuovi metodi di fabbrica mutableIntState(Int), mutableFloatStateOf(Float) e così via. (I48e43)

Correzioni di bug

  • Chiama onEndChanges durante lo smaltimento della composizione. I nodi di messa a fuoco rimossi durante il giorno Composition.dispose si stanno iscrivendo a onEndChanges per reimpostare la messa a fuoco.(03d4a47)

  • Assicurati l'invalidazione per i valori di stato derivati non inizializzati. Ogni stato derivato è associato a un elenco delle relative dipendenze in SnapshotStateObserver, utilizzato per invalidare gli ambiti associati allo stato derivato ogni volta che la dipendenza cambia. La modifica della dipendenza viene registrata durante l'avanzamento dello snapshot, il che può verificarsi dopo la lettura dello stato derivato (a causa della chiamata a Snapshot.notifyObjectsInitialized()).

    La precedente logica di osservazione dello stato derivato in SnapshotStateObserver ripuliva le vecchie dipendenze e poi leggeva il nuovo valore. Ciò ha comportato una condizione di gara con convalida in uno stato pulito, in cui la convalida delle dipendenze non è stata registrata.

    Questa modifica riordina la lettura dello stato derivato e la pulizia delle dipendenze, garantendo che l'invalidazione avvenga sempre in uno stato valido. (c472be6)

Versione 1.5.0-alpha03

19 aprile 2023

androidx.compose.runtime:runtime-*:1.5.0-alpha03 viene rilasciato. La versione 1.5.0-alpha03 contiene questi commit.

Modifiche all'API

  • Ora il ricostruttore creato per una finestra Android bloccherà solo le chiamate a withFrameNanos anziché a 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 di withFrameNanos verranno bloccate. (Id9e7f, b/240975572)

Correzioni di bug

  • Correzione di un potenziale deadlock nell'elenco di snapshot e nella mappa 5c1a425
  • Esegui i callback di disattivazione per LayoutNode prima di eliminare gli effetti 3784073
  • Correggi i flag modificati per i lambda riavviati ea81df9
  • Correzione della regressione della modifica in tempo reale per i componenti composibili con nodi 73fd4d8
  • ON_STOP dovrebbe mettere in pausa le trasmissioni dell'orologio del frame anziché della composizione ae276f1
  • Annullare l'aggiornamento degli ambiti SnapshotStateObserver per gli stati derivati invariati 84d9b1c
  • Correzione di un potenziale blocco quando si eliminano le composizioni 28761fc
  • Correggere lo spostamento dei contenuti in una composizione secondaria 92d4156

Versione 1.5.0-alpha02

5 aprile 2023

androidx.compose.runtime:runtime-*:1.5.0-alpha02 viene rilasciato. La versione 1.5.0-alpha02 contiene questi commit.

Nuove funzionalità

  • Ora l'operatore getValue di Kotlin può essere componibile (f174f6e)

Correzioni di bug, miglioramenti delle prestazioni

  • Sovrascrivi i record degli oggetti stato con record di stato inaccessibili (c986960)
  • Utilizza il compositore dell'ambito corretto quando realizzi i gruppi (9a5e5b6)
  • Correggi endToMarker() al termine dei gruppi di nodi. (d71d980)
  • Utilizza il gruppo SlotWriter corrente per il controllo della disattivazione (a0b518b)
  • Utilizza IdentityArraySet per memorizzare gli invalidamenti degli snapshot (7f60cca)
  • Rimuovi fill in SlotTable.moveSlotGapTo() e spostalo in chiusura (81f9935)
  • Correzione delle convalide mancanti durante lo spostamento dei contenuti spostabili (1d7c024)
  • Correggere le convalide immediate per i contenuti spostabili spostati (8676618)
  • Riduci le allocazioni per le osservazioni degli snapshot (5bc535f)

Versione 1.5.0-alpha01

22 marzo 2023

androidx.compose.runtime:runtime-*:1.5.0-alpha01 viene rilasciato. La versione 1.5.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Aggiunge Modifier.Node#coroutineScope per consentire a Modifier.Nodes di avviare le coroutine (I76ef9)
  • Consenti a Modifier.Nodes di leggere CompositionLocals implementando l'interfaccia CompositionLocalConsumerModifierNode. (Ib44df)

Versione 1.4

Versione 1.4.3

3 maggio 2023

androidx.compose.runtime:runtime-*:1.4.3 viene rilasciato senza modifiche.

Versione 1.4.2

19 aprile 2023

androidx.compose.runtime:runtime-*:1.4.2 viene rilasciato. La versione 1.4.2 contiene questi commit.

Correzioni di bug

  • Correggere un potenziale deadlock nell'elenco e nella mappa degli snapshot 2eb6570

  • L'aggiunta di contenuti a un SnapshotStateList o a un SnapshotStateMap può causare un deadlock se la modifica è contemporanea a una scrittura diretta nel record dello stato. Questa situazione è diventata molto più probabile con le modifiche introdotte da 93fcae828b che utilizza le scritture dirette per rilasciare i record inutilizzati.

  • Ora i blocchi sono ordinati in modo che non venga mai tentato di acquisire un blocco istantataneo quando è attivo un blocco di mappa o elenco.

Versione 1.4.1

5 aprile 2023

androidx.compose.runtime:runtime-*:1.4.1 viene rilasciato. La versione 1.4.1 contiene questi commit.

Correzioni di bug

  • Correggi endToMarker() alla fine dei gruppi di nodi. d71d980

Versione 1.4.0

22 marzo 2023

androidx.compose.runtime:runtime-*:1.4.0 viene rilasciato. La versione 1.4.0 contiene questi commit.

Modifiche importanti dalla versione 1.3.0

  • Utilizza il valore inizializzato da LiveData per la prima composizione 3680e25
  • Aggiungi ComposeNodeLifecycleCallback per osservare il ciclo di vita dei nodi di composizione. 8b6a258
  • Aggiungi la proprietà parameterTypes a ComposableMethod 7b6c7ad

Correzioni di bug e miglioramenti delle prestazioni

  • Cancella entrambi gli indici di ambito in SnapshotStateObserver 29f4a3e
  • Aggiungi i gruppi necessari nel corpo delle lambda non ignorabili 7d06752
  • Migliorare le caratteristiche del riferimento in memoria dello stato Snapshot 93fcae8
  • Rimuovere le caselle nelle ricerche locali della composizione 0875717
  • Utilizza la chiave corretta per i gruppi di nodi non riutilizzabili 6388d8d
  • Proteggere SnapshotStateObserver dalle applicazioni ricorsive e concorrenti 98cb6ba
  • È stato aggiunto un controllo dei limiti dell'indice nel metodo "get" di IdentityArraySet 35a77d3
  • Aggiorna il modulo di composizione per utilizzare le estensioni ViewTreeLifecycleOwner 21c2122
  • Invia notifiche di applicazione dopo che Recomposer ha completato il frame. 98f2641
  • Correzione dell'arresto anomalo di indice fuori intervallo durante l'annullamento del ricomposer 8f8656f
  • Forza sempre la ricomposione se i provider principali della composizione sono cambiati 9526fcc
  • Tolleranza del ricostruttore per i job annullati a55f7ed
  • Migliora la gestione delle invalidazioni per un numero elevato di compositori 9b7ed67
  • Correzione della generazione di gruppi di chiusura per i ritorni non locali b6f590c

Versione 1.4.0-rc01

8 marzo 2023

androidx.compose.runtime:runtime-*:1.4.0-rc01 viene rilasciato. La versione 1.4.0-rc01 contiene questi commit.

Correzioni di bug

Versione 1.4.0-beta02

22 febbraio 2023

androidx.compose.runtime:runtime:1.4.0-beta02 e androidx.compose.runtime:runtime-saveable:1.4.0-beta02 vengono rilasciati. La versione 1.4.0-beta02 contiene questi commit.

Versione 1.4.0-beta01

8 febbraio 2023

androidx.compose.runtime:runtime-*:1.4.0-beta01 viene rilasciato. La versione 1.4.0-beta01 contiene questi commit.

Modifiche all'API

  • È stato aggiunto ComposeNodeLifecycleCallback, che consente di osservare il ciclo di vita dei nodi Compose (I3731b)
  • È stata aggiunta @TestOnly a Composer.disableSourceInformation() perché questa funzione è sicura da chiamare solo in un test. (I896c8)

Correzioni di bug

  • Rimuovere le caselle nelle ricerche locali della composizione (62f66a)
  • Migliorare le caratteristiche di riferimento della memoria dello stato Snapshot (dfb451)

Versione 1.4.0-alpha05

25 gennaio 2023

androidx.compose.runtime:runtime:1.4.0-alpha05 e androidx.compose.runtime:runtime-saveable:1.4.0-alpha05 vengono rilasciati. La versione 1.4.0-alpha05 contiene questi commit.

Modifiche all'API

  • Più tipi/valori null delle funzioni in linea/nascoste ritirate (I24f91)

Versione 1.4.0-alpha04

11 gennaio 2023

androidx.compose.runtime:runtime-*:1.4.0-alpha04 viene rilasciato. La versione 1.4.0-alpha04 contiene questi commit.

Modifiche all'API

  • TestMonotonicFrameClock ora utilizza l'annotazione sperimentale corretta. (I95c9e)

Correzioni di bug

  • Proteggere SnapshotStateObserver da applicazioni ricorsive e concorrenti (d902fb)

Versione 1.4.0-alpha03

7 dicembre 2022

androidx.compose.runtime:runtime-*:1.4.0-alpha03 viene rilasciato. La versione 1.4.0-alpha03 contiene questi commit.

Modifiche all'API

  • aggiunta di un nuovo metodo pubblico alla classe ComposableMethod analogo a java.lang.reflect.Method#getParameterTypes() (Iab0c3)

Correzioni di bug

  • Le notifiche di applicazione degli snapshot vengono ora inviate dopo che Recomposer ha completato l'applicazione delle modifiche. (Iad6c0, b/222093277)

Versione 1.4.0-alpha02

9 novembre 2022

androidx.compose.runtime:runtime-*:1.4.0-alpha02 viene rilasciato. La versione 1.4.0-alpha02 contiene questi commit.

Versione 1.4.0-alpha01

24 ottobre 2022

androidx.compose.runtime:runtime-*:1.4.0-alpha01 viene rilasciato. La versione 1.4.0-alpha01 contiene questi commit.

Modifiche all'API

  • SnapshotStateList e SnapshotStateMap ora hanno implementazioni esplicite di toList() e toMap(), rispettivamente. Questi metodi restituiscono i contenuti correnti senza eseguire una copia, poiché restituiscono i dati interni immutabili utilizzati per archiviarli. Questo valore può essere utilizzato, ad esempio, per produrre un flusso di valori utilizzando snapshotFlow senza richiedere la copia dei dati. (Ica2bd)

Versione 1.3

Versione 1.3.3

11 gennaio 2023

androidx.compose.runtime:runtime-*:1.3.3 viene rilasciato. La versione 1.3.3 contiene questi commit.

  • Nessuna modifica dalla versione 1.3.2

Versione 1.3.2

7 dicembre 2022

androidx.compose.runtime:runtime-*:1.3.2 viene rilasciato. La versione 1.3.2 contiene questi commit.

Correzioni di bug

  • Aggiornamento per il supporto di androidx.compose.ui 1.3.2

Versione 1.3.1

9 novembre 2022

androidx.compose.runtime:runtime-*:1.3.1 viene rilasciato. La versione 1.3.1 contiene questi commit.

Versione 1.3.0

24 ottobre 2022

androidx.compose.runtime:runtime-*:1.3.0 viene rilasciato. La versione 1.3.0 contiene questi commit.

Modifiche importanti dalla versione 1.2.0

Gestione delle eccezioni / supporto della modifica in tempo reale

Tracciamento della composizione

API di riflessione composable

Correzioni di runtime

Sistema di snapshot

Versione 1.3.0-rc01

5 ottobre 2022

androidx.compose.runtime:runtime-*:1.3.0-rc01 viene rilasciato. La versione 1.3.0-rc01 contiene questi commit.

Correzioni di bug

  • È stato corretto il problema relativo a ArrayIndexOutOfBoundsException proveniente dalla tabella degli slot (b/249076084)

Versione 1.3.0-beta03

21 settembre 2022

androidx.compose.runtime:runtime-*:1.3.0-beta03 viene rilasciato. La versione 1.3.0-beta03 contiene questi commit.

Modifica che comporta un cambiamento nel comportamento

  • Il parametro remember e rememberCoroutineScope è stato modificato in crossinline. Verrà segnalato un errore per i ritorni anticipati anziché consentire un ritorno anticipato che causerà la segnalazione di un errore interno successivo.
  • Questa modifica può potenzialmente portare alla segnalazione di nuovi errori del compilatore che richiedono la rimozione dei ritorni non locali dalle lambda passate a queste funzioni. (Ibea62)

Versione 1.3.0-beta02

7 settembre 2022

androidx.compose.runtime:runtime-*:1.3.0-beta02 viene rilasciato. La versione 1.3.0-beta02 contiene questi commit.

Correzioni di bug

Versione 1.3.0-beta01

24 agosto 2022

androidx.compose.runtime:runtime-*:1.3.0-beta01 viene rilasciato. La versione 1.3.0-beta01 contiene questi commit.

Modifiche all'API

  • A CompositionData è stato aggiunto un metodo find per consentire agli strumenti per sviluppatori che utilizzano questa API di trovare rapidamente un sottogruppo di composizione utilizzando la relativa identità. (I5794f)

Versione 1.3.0-alpha03

10 agosto 2022

androidx.compose.runtime:runtime-*:1.3.0-alpha03 viene rilasciato. La versione 1.3.0-alpha03 contiene questi commit.

Versione 1.3.0-alpha02

27 luglio 2022

androidx.compose.runtime:runtime-*:1.3.0-alpha02 viene rilasciato. La versione 1.3.0-alpha02 contiene questi commit.

Modifiche all'API

  • ComposerKt.traceEventStart(Int, String) è stato aggiunto di nuovo per la compatibilità con le versioni precedenti (I6e6de)

Versione 1.3.0-alpha01

29 giugno 2022

androidx.compose.runtime:runtime-*:1.3.0-alpha01 viene rilasciato. La versione 1.3.0-alpha01 contiene questi commit.

Modifiche all'API

  • Spostamento della funzionalità di utilità nel runtime (I4f729)

Versione 1.2

Versione 1.2.1

10 agosto 2022

androidx.compose.runtime:runtime-*:1.2.1 viene rilasciato. La versione 1.2.1 contiene questi commit.

Correzioni di bug

  • È stata corretta una perdita di memoria: smaltimento degli snapshot nidificati creati da snapshot trasparenti b/239603305

Versione 1.2.0

27 luglio 2022

androidx.compose.runtime:runtime-*:1.2.0 viene rilasciato. La versione 1.2.0 contiene questi commit.

Modifiche importanti dal giorno 1.1.0

  • Compose Runtime ha visto l'introduzione di alcune funzionalità nella versione 1.2.0, insieme a molte correzioni di bug per la stabilità. La nuova funzionalità più significativa è stata l'introduzione dell'API movableContentOf, che può essere utilizzata per abilitare UX complesse come le transizioni degli elementi condivisi. L'API movableContentOf converte una funzione lambda componibile in una funzione lambda che sposta il relativo stato e i relativi nodi in qualsiasi nuova posizione in cui viene chiamata. Quando la chiamata precedente esce dalla composizione, lo stato viene conservato temporaneamente e, se una nuova chiamata alla funzione lambda entra nella composizione, lo stato e i nodi associati vengono spostati nella posizione della nuova chiamata. Se non viene aggiunta nessuna nuova chiamata, lo stato viene rimosso definitivamente e gli osservatori vengono avvisati.

  • Se una funzione lambda movableContentOf viene chiamata più volte nella stessa composizione, vengono creati nuovi stati e nodi per ogni chiamata e, quando le chiamate escono dalla composizione e ne vengono inserite di nuove, lo stato viene spostato dalle prime chiamate in uscita alle chiamate in entrata nell'ordine in cui vengono chiamate. Tutti gli stati non rivendicati da nuove chiamate vengono rimossi definitivamente.

  • Oltre a questa e ad altre nuove funzionalità, è stato impiegato molto tempo per stabilizzare il sistema di stato di runtime e snapshot. Sono state rimosse varie perdite di memoria e sono stati ottimizzati i percorsi di codice.

  • Di seguito è riportato un elenco riepilogativo delle modifiche:

Nuove funzionalità in 1.2

Rendimento in 1.2

Correzioni di bug in 1.2

Versione 1.2.0-rc03

29 giugno 2022

androidx.compose.runtime:runtime-*:1.2.0-rc03 viene rilasciato. La versione 1.2.0-rc03 contiene questi commit.

Correzioni di bug

  • In precedenza, le osservazioni dello stato derivato venivano rimosse incondizionatamente dall'ambito di ricompozione e dalla composizione insieme, il che ha causato un malfunzionamento di altri ambiti che potrebbero ancora osservare lo stato derivato. Questa modifica rimuove le istanze di stato derivate solo se non sono più osservate da altri ambiti. (b/236618362)

Versione 1.2.0-rc02

22 giugno 2022

androidx.compose.runtime:runtime-*:1.2.0-rc02 viene rilasciato. La versione 1.2.0-rc02 contiene questi commit.

Versione 1.2.0-rc01

15 giugno 2022

androidx.compose.runtime:runtime-*:1.2.0-rc01 viene rilasciato. La versione 1.2.0-rc01 contiene questi commit.

Modifiche all'API

  • Le interfacce nelle librerie di composizione ora vengono create utilizzando i metodi di interfaccia predefiniti di JDK8 (I5bcf1)

Versione 1.2.0-beta03

1° giugno 2022

androidx.compose.runtime:runtime-*:1.2.0-beta03 viene rilasciato. La versione 1.2.0-beta03 contiene questi commit.

Versione 1.2.0-beta02

18 maggio 2022

androidx.compose.runtime:runtime-*:1.2.0-beta02 viene rilasciato. La versione 1.2.0-beta02 contiene questi commit.

Versione 1.2.0-beta01

11 maggio 2022

androidx.compose.runtime:runtime-*:1.2.0-beta01 viene rilasciato. La versione 1.2.0-beta01 contiene questi commit.

Nuove funzionalità

  • Questa è la prima release beta di 1.2.

Modifiche all'API

  • È stato aggiunto Snapshot.unsafeEnter/unsafeLeave sperimentale (I108f3)
  • È stata aggiunta l'API Snapshot.asContextElement() sperimentale (Iff072)
  • L'annotazione @ComposableTarget e le annotazioni contrassegnate da @ComposableTargetMarker ora possono essere utilizzate nell'ambito del file utilizzando il prefisso @file. L'utilizzo di un'annotazione target a livello di ambito del file fa sì che il compilatore presuma che tutte le funzioni composable nel file siano destinate a essere il target dell'applicante associato. Ad esempio, l'utilizzo di @file:UiComposable dichiara che tutte le funzioni @Composable hanno come target l'applicatore dell'interfaccia utente di Compose. Una funzione che deve avere come target un altro applicatore deve fornire esplicitamente l'annotazione dell'indicatore target per l'applicatore desiderato. (I40804)

Versione 1.2.0-alpha08

20 aprile 2022

androidx.compose.runtime:runtime-*:1.2.0-alpha08 viene rilasciato. La versione 1.2.0-alpha08 contiene questi commit.

Modifiche all'API

  • TracingInProgress è stato aggiunto all'interfaccia CompositionTracer. (Ic6f12)
  • Aggiungere recomposeScopeIdentity a Composer (I0c873)
  • API di monitoraggio limitate (Composer.setTracer) a OptIn(InternalComposeTracingApi). (I9187f)
  • È stato aggiunto ResuableContentHost, che consente un maggiore controllo sulla durata dello stato creato per i contenuti riutilizzabili. Ad esempio, se una composizione secondaria non è temporaneamente in uso, i contenuti possono essere disattivati e tutto lo stato memorizzato nella composizione viene dimenticato, attivando, ad esempio, tutti gli effetti usa e getta. (I2c0f2, b/220322704)

Versione 1.2.0-alpha07

6 aprile 2022

androidx.compose.runtime:runtime-*:1.2.0-alpha07 viene rilasciato. La versione 1.2.0-alpha07 contiene questi commit.

Modifiche all'API

  • È stata aggiunta la nuova funzione Snapshot.withoutReadObservation { ... }. Consente agli utenti di eseguire la funzione lambda passata senza iscriversi alle modifiche dei valori dello stato letti durante questo blocco. Potrebbe essere utile nei casi in cui vuoi usufruire delle letture/scritture sicure per i thread basate su snapshot, ma vuoi essere in grado di leggere il valore senza causare ricostruzioni o rimisure non necessarie. (I9f365, b/214054486)

Versione 1.2.0-alpha06

23 marzo 2022

androidx.compose.runtime:runtime-*:1.2.0-alpha06 viene rilasciato. La versione 1.2.0-alpha06 contiene questi commit.

Versione 1.2.0-alpha05

9 marzo 2022

androidx.compose.runtime:runtime-*:1.2.0-alpha05 viene rilasciato. La versione 1.2.0-alpha05 contiene questi commit.

Contributo esterno

  • Aggiornamento per l'utilizzo di Kotlinx coroutines 1.6.0 (I3366d)

Versione 1.2.0-alpha04

23 febbraio 2022

androidx.compose.runtime:runtime-*:1.2.0-alpha04 viene rilasciato. La versione 1.2.0-alpha04 contiene questi commit.

Modifiche all'API

  • Sono stati aggiunti ComposableTarget, ComposableTargetMarker e ComposableOpenTarget che consentono di generare report in fase di compilazione quando viene chiamata una funzione componibile che ha come target un applicatore per il quale non è stata progettata.

    Nella maggior parte dei casi, le annotazioni possono essere dedotte dal plug-in del compilatore di compose, pertanto l'utilizzo diretto di queste annotazioni dovrebbe essere raro . I casi che non possono essere dedotti includono la creazione e l'utilizzo di un applicatore personalizzato, funzioni composable astratte (come metodi di interface), campi o variabili globali che sono lambda composable (le variabili e i parametri locali vengono dedotti), o quando si utilizza ComposeNode o una funzione composable correlata.

    Per gli applicatori personalizzati, le funzioni composable che chiamano ComposeNode o ReusableComposeNode devono aggiungere un'annotazione CompoableTarget per la funzione e per eventuali tipi di parametri lambda composable. Tuttavia, è consigliabile creare un'annotazione annotata con ComposableTargetMarker e poi utilizzare l'annotazione contrassegnata anziché ComposableTarget direttamente. Un'annotazione componibile contrassegnata con ComposableTargetMarker è equivalente a un ComposbleTarget con il nome completo della classe dell'attributo come parametro dell'applicatore. Per un esempio di utilizzo di ComposableTargetMarker, consulta anroidx.compose.ui.UiComposable. (I38f11)

Versione 1.2.0-alpha03

9 febbraio 2022

androidx.compose.runtime:runtime-*:1.2.0-alpha03 viene rilasciato. La versione 1.2.0-alpha03 contiene questi commit.

Modifiche all'API

  • È stata aggiunta movableContentOf, che converte una funzione lambda componibile in una funzione lambda che sposta il relativo stato e i relativi nodi in qualsiasi nuova posizione in cui viene chiamata. Quando la chiamata precedente esce dalla composizione, lo stato viene conservato temporaneamente e se una nuova chiamata alla funzione lambda entra nella composizione, lo stato e i nodi associati vengono spostati nella posizione della nuova chiamata. Se non viene aggiunta alcuna nuova chiamata, lo stato viene rimosso definitivamente e gli osservatori vengono informati.

    Se una funzione lambda movableContentOf viene chiamata più volte nella stessa composizione, vengono creati nuovi stati e nodi per ogni chiamata e, quando le chiamate escono dalla composizione e ne vengono inserite di nuove, lo stato viene spostato dalle prime chiamate in uscita alle chiamate in entrata nell'ordine in cui vengono chiamate. Tutti gli stati non rivendicati da nuove chiamate vengono rimossi permanentemente. (Ib4850)

  • È stata aggiunta un'API di monitoraggio alla composizione per consentire agli strumenti di fornire un monitoraggio più dettagliato delle funzioni componibili. Ora il compilatore genera chiamate all'API di monitoraggio che includono informazioni sulle origini. (Ib0eb5)

    Per rimuovere queste chiamate e le informazioni di origine associate da una release build, aggiungi la seguente regola Proguard:

      -assumenosideeffects public class androidx.compose.runtime.ComposerKt {
          boolean isTraceInProgress();
          void traceEventStart(int,java.lang.String);
          void traceEventEnd();
      }
    
  • Aggiungi InternalComposeScope per consentire agli strumenti di identificare un composable durante le ricostruzioni. (I07a3f)

Versione 1.2.0-alpha02

26 gennaio 2022

androidx.compose.runtime:runtime-*:1.2.0-alpha02 viene rilasciato. La versione 1.2.0-alpha02 contiene questi commit.

Versione 1.2.0-alpha01

12 gennaio 2022

androidx.compose.runtime:runtime-*:1.2.0-alpha01 viene rilasciato. La versione 1.2.0-alpha01 contiene questi commit.

Modifiche all'API

  • È stato aggiunto il campo identity a CompositionData per generare ID invariati nell'ispettore layout. (Ic116e)

Aggiornamenti delle dipendenze

  • Ora dipende da Kotlin 1.6.10.

Versione 1.1

Versione 1.1.1

23 febbraio 2022

androidx.compose.runtime:runtime-*:1.1.1 viene rilasciato. La versione 1.1.1 contiene questi commit.

Correzioni di bug

  • Correggi NullPointerException il giorno androidx.compose.ui.platform.RenderNodeLayer.updateDisplayList (aosp/1947059, b/206677462)
  • È stato risolto l'arresto anomalo causato dai contenuti degli appunti durante la lettura dagli appunti su Android. (I06020, b/197769306)
  • È stato corretto il problema relativo alla formattazione RTL in LazyVerticalGrid (aosp/1931080, b/207510535)

Versione 1.1.0

9 febbraio 2022

androidx.compose.runtime:runtime-*:1.1.0 viene rilasciato. La versione 1.1.0 contiene questi commit.

Modifiche importanti dalla versione 1.0.0

  • Supporto stabile per l'effetto overscroll di Android 12
  • Miglioramenti alle dimensioni dei target di tocco
  • Tieni presente che, rispetto a Compose 1.0, i componenti Material espanderanno lo spazio del layout per soddisfare le linee guida sull'accessibilità di Material per le dimensioni del touch target. Ad esempio, il touch target del pulsante si espanderà fino a una dimensione minima di 48x48dp, anche se imposti una dimensione inferiore per il pulsante. In questo modo, Compose Material si allinea allo stesso comportamento dei componenti Material Design, garantendo un comportamento coerente se combini le visualizzazioni e Compose. Questa modifica garantisce inoltre che, quando crei l'interfaccia utente utilizzando i componenti Material di Compose, vengano soddisfatti i requisiti minimi per l'accessibilità dei touch target.
  • Supporto stabile per la barra di navigazione laterale
  • Passa a una versione stabile un certo numero di API precedentemente sperimentali
  • Supporto per le versioni più recenti di Kotlin

Versione 1.1.0-rc03

26 gennaio 2022

androidx.compose.runtime:runtime-*:1.1.0-rc03 viene rilasciato. La versione 1.1.0-rc03 contiene questi commit.

Correzioni di bug

  • Aggiornamento per il supporto di Compose Material 1.1.0-rc03

Versione 1.1.0-rc01

15 dicembre 2021

androidx.compose.runtime:runtime-*:1.1.0-rc01 viene rilasciato. La versione 1.1.0-rc01 contiene questi commit.

Versione 1.1.0-beta04

1° dicembre 2021

androidx.compose.runtime:runtime-*:1.1.0-beta04 viene rilasciato. La versione 1.1.0-beta04 contiene questi commit.

Nuove funzionalità

  • Aggiornata per essere compatibile con Kotlin 1.6.0

Versione 1.1.0-beta03

17 novembre 2021

androidx.compose.runtime:runtime-*:1.1.0-beta03 viene rilasciato. La versione 1.1.0-beta03 contiene questi commit.

Versione 1.1.0-beta02

3 novembre 2021

androidx.compose.runtime:runtime-*:1.1.0-beta02 viene rilasciato. La versione 1.1.0-beta02 contiene questi commit.

Modifiche all'API

  • Il codice dello snapshot è stato suddiviso in più file, ma tutti rimangono nella stessa classe JVM. (Ic6c98)

Versione 1.1.0-beta01

27 ottobre 2021

androidx.compose.runtime:runtime-*:1.1.0-beta01 viene rilasciato. La versione 1.1.0-beta01 contiene questi commit.

Versione 1.1.0-alpha06

13 ottobre 2021

androidx.compose.runtime:runtime-*:1.1.0-alpha06 viene rilasciato. La versione 1.1.0-alpha06 contiene questi commit.

Modifiche all'API

  • È stato rimosso InternalCompilerApi dai metodi Composer che devono essere chiamati tra moduli (I1aa0b)
  • Recomposer.state è stato ritirato e sostituito da Recomposer.currentState per modificarne il tipo in StateFlow (Ic2ab3, b/197773820)

Versione 1.1.0-alpha05

29 settembre 2021

androidx.compose.runtime:runtime-*:1.1.0-alpha05 viene rilasciato. La versione 1.1.0-alpha05 contiene questi commit.

Versione 1.1.0-alpha04

15 settembre 2021

androidx.compose.runtime:runtime-*:1.1.0-alpha04 viene rilasciato. La versione 1.1.0-alpha04 contiene questi commit.

Versione 1.1.0-alpha03

1° settembre 2021

androidx.compose.runtime:runtime-*:1.1.0-alpha03 viene rilasciato. La versione 1.1.0-alpha03 contiene questi commit.

Nuove funzionalità

  • Il compilatore di Compose ora supporta le versioni precedenti del runtime di Compose (1.0). Prima di questa modifica, il compilatore Compose era compatibile solo con il runtime Compose della stessa versione o successiva. Dopo questa modifica, il compilatore Compose è compatibile con una versione precedente del runtime Compose (1.0). (aosp/1796968)
  • Compose 1.1.0-alpha03 è stato aggiornato in modo da dipendere da Kotlin 1.5.30. (I74545)

Versione 1.1.0-alpha02

18 agosto 2021

androidx.compose.runtime:runtime-*:1.1.0-alpha02 viene rilasciato. La versione 1.1.0-alpha02 contiene questi commit.

Versione 1.1.0-alpha01

4 agosto 2021

androidx.compose.runtime:runtime-*:1.1.0-alpha01 viene rilasciato. La versione 1.1.0-alpha01 contiene questi commit.

Versione 1.0

Versione 1.0.5

3 novembre 2021

androidx.compose.runtime:runtime-*:1.0.5 viene rilasciato. La versione 1.0.5 contiene questi commit.

Correzioni di bug

  • È stato corretto un arresto anomalo durante il monitoraggio delle istanze derivedStateOf. (aosp/1792247)

Versione 1.0.4

13 ottobre 2021

androidx.compose.runtime:runtime-*:1.0.4 viene rilasciato. La versione 1.0.4 contiene questi commit.

Aggiornamenti delle dipendenze

  • Aggiornata per dipendere da Kotlin 1.5.31

Versione 1.0.3

29 settembre 2021

androidx.compose.runtime:runtime-*:1.0.3 viene rilasciato. La versione 1.0.3 contiene questi commit.

Aggiornamenti delle dipendenze

  • Aggiornata per dipendere da Kotlin 1.5.30

Versione 1.0.2

1° settembre 2021

androidx.compose.runtime:runtime-*:1.0.2 viene rilasciato. La versione 1.0.2 contiene questi commit.

Aggiornamento per supportare la release di Compose 1.0.2. Compose 1.0.2 è ancora compatibile con Kotlin 1.5.21.

Versione 1.0.1

4 agosto 2021

androidx.compose.runtime:runtime-*:1.0.1 viene rilasciato. La versione 1.0.1 contiene questi commit.

Aggiornamenti delle dipendenze

  • Aggiornato in modo da dipendere da Kotlin 1.5.21.

Versione 1.0.0

28 luglio 2021

androidx.compose.runtime:runtime-*:1.0.0 viene rilasciato. La versione 1.0.0 contiene questi commit.

Funzionalità principali della versione 1.0.0

Questa è la prima release stabile di Compose. Per ulteriori dettagli, consulta il blog ufficiale di Compose Release.

Problemi noti

  • Se utilizzi Android Studio Bumblebee Canary 4 o AGP 7.1.0-alpha04/7.1.0-alpha05, potresti riscontrare il seguente arresto anomalo:

      java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
    

    Per risolvere il problema, aumenta temporaneamente il valore minSdkVersion a 24 o versioni successive nel file build.gradle. Questo problema verrà risolto nella prossima versione di Android Studio Bumblebee e AGP 7.1. (b/194289155)

Versione 1.0.0-rc02

14 luglio 2021

androidx.compose.runtime:runtime-*:1.0.0-rc02 viene rilasciato. La versione 1.0.0-rc02 contiene questi commit.

  • Sono state corrette le condizioni di gara in SnapshotStateObserver che causavano NullPointerExceptions irregolari. (aosp/1763445, aosp/1758105, b/192677711)
  • Sono stati risolti i problemi relativi agli snapshot di runtime che causavano arresti anomali di java.lang.IllegalStateException: Reading a state that was created after the snapshot was taken or in a snapshot that has not yet been applied. (b/193006595, b/192570897)

Versione 1.0.0-rc01

1° luglio 2021

androidx.compose.runtime:runtime-*:1.0.0-rc01 viene rilasciato. La versione 1.0.0-rc01 contiene questi commit.

Versione 1.0.0-beta09

16 giugno 2021

androidx.compose.runtime:runtime-*:1.0.0-beta09 viene rilasciato. La versione 1.0.0-beta09 contiene questi commit.

Regole del profilo aggiunte

Questa release aggiunge regole del profilo ai seguenti moduli di composizione (I14ed6):

  • androidx.compose.animation
  • androidx.compose.animation-core
  • androidx.compose.foundation
  • androidx.compose.foundation-layout
  • androidx.compose.material
  • androidx.compose.material-ripple
  • androidx.compose.runtime
  • androidx.compose.ui
  • androidx.compose.ui.geometry
  • androidx.compose.ui.graphics
  • androidx.compose.ui.text
  • androidx.compose.ui.text
  • androidx.compose.ui.unit
  • androidx.compose.ui.util

Che cosa sono le regole del profilo?

  • Le regole del profilo per una raccolta sono specificate in un file di testo baseline-prof.txt situato nella directory src/main o equivalente. Il file specifica una regola per riga, dove una regola in questo caso è un pattern per la corrispondenza a metodi o classi nella libreria. La sintassi di queste regole è un superset del formato del profilo ART leggibile da persone che viene utilizzato quando si utilizza adb shell profman --dump-classes-and-methods .... Queste regole possono assumere una di due forme per scegliere come target metodi o classi.

  • Una regola del metodo avrà il seguente pattern:

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • Una regola della classe avrà il seguente pattern:

    <CLASS_DESCRIPTOR>
    
  • Qui <FLAGS> è uno o più dei caratteri H, S e P per indicare se questo metodo deve essere contrassegnato come "Hot", "Startup" o "Post Startup".

  • <CLASS_DESCRIPTOR> è il descrittore della classe a cui appartiene il metodo scelto come target. Ad esempio, la classe androidx.compose.runtime.SlotTable avrà un descrittore Landroidx/compose/runtime/SlotTable;.

  • <METHOD_SIGNATURE> è la firma del metodo e include il nome, i tipi di parametro e i tipi di ritorno del metodo. Ad esempio, il metodo fun isPlaced(): Boolean in LayoutNode ha la firma isPlaced()Z.

  • Questi pattern possono contenere caratteri jolly (**, * e ?) per consentire a una singola regola di includere più metodi o classi.

A cosa servono le regole?

  • Un metodo con il flag H indica che si tratta di un metodo "hot" e deve essere compilato in anticipo.

  • Un metodo che ha il flag S indica che si tratta di un metodo chiamato all'avvio e deve essere compilato in anticipo per evitare il costo della compilazione e dell'interpretazione del metodo all'avvio.

  • Un metodo con il flag P indica che si tratta di un metodo chiamato dopo l'avvio.

  • Una classe presente in questo file indica che viene utilizzata durante l'avvio e deve essere preallocata nell'heap per evitare il costo del caricamento della classe.

Come funziona?

  • Le librerie possono definire queste regole che verranno pacchettizzate negli elementi AAR. Quando viene compilata un'app che include questi elementi, le regole vengono unite e utilizzate per creare un profilo ART binario compatto specifico per l'app. ART può quindi sfruttare questo profilo quando l'app è installata sui dispositivi per compilare in anticipo un sottoinsieme specifico dell'applicazione al fine di migliorare il rendimento dell'applicazione, in particolare la prima esecuzione. Tieni presente che questo non avrà alcun effetto sulle applicazioni di debug.

Versione 1.0.0-beta08

2 giugno 2021

androidx.compose.runtime:runtime-*:1.0.0-beta08 viene rilasciato. La versione 1.0.0-beta08 contiene questi commit.

Modifiche all'API

  • State<T> è diventato State<out T> (I69049)
  • Modifica dell'API ControlledComposition per abilitare le modifiche di ricompozione in un singolo passaggio di ricompozione. (Iaafd1, b/184173932)

Versione 1.0.0-beta07

18 maggio 2021

androidx.compose.runtime:runtime-*:1.0.0-beta07 viene rilasciato. La versione 1.0.0-beta07 contiene questi commit.

Modifiche all'API

  • Sono state aggiunte nuove API del compilatore di composizione che consentono di rimuovere le informazioni sulle origini generate dal compilatore durante la minimizzazione del codice sorgente. (Ia34e6)
  • Viene introdotto ReusableContent, che tenterà di riutilizzare i nodi nei relativi contenuti anziché sostituirli quando la chiave viene modificata. Quando la chiave viene modificata, i valori precedenti nella tabella degli slot per i contenuti vengono ignorati, ad eccezione dei nodi generati e dei valori utilizzati per aggiornarli.

    Viene introdotto ReusableComposeNode, che riutilizza il nodo emesso anziché sostituirlo come avviene per ComposeNode. (I1dd86)

  • @ComposeCompilerApi non è più @RequiresOptIn (Iab690)

Correzioni di bug

  • Ora LazyColumn/Row manterrà attivi (non eliminati) fino a due elementi precedentemente visibili anche quando non sono visibili. In questo modo, il componente può riutilizzare le sottocomposizioni attive quando dobbiamo comporre un nuovo elemento, il che migliora le prestazioni di scorrimento. (Ie5555)

Versione 1.0.0-beta06

5 maggio 2021

androidx.compose.runtime:runtime-*:1.0.0-beta06 viene rilasciato. La versione 1.0.0-beta06 contiene questi commit.

Modifiche all'API

  • @ComposeCompilerApi non è più @RequiresOptIn (Iab690)

Versione 1.0.0-beta05

21 aprile 2021

androidx.compose.runtime:runtime-*:1.0.0-beta05 viene rilasciato. La versione 1.0.0-beta05 contiene questi commit.

Modifiche all'API

  • @InternalComposeApi rimosso per la registrazione delle letture e delle scritture degli snapshot (Id134d)

Correzioni di bug

  • I file AndroidManifest di ui-test-manifest e ui-tooling-data ora sono compatibili con Android 12 (I6f9de, b/184718994)

Versione 1.0.0-beta04

7 aprile 2021

androidx.compose.runtime:runtime-*:1.0.0-beta04 viene rilasciato. La versione 1.0.0-beta04 contiene questi commit.

Correzioni di bug

  • Prima di questa modifica, le funzioni composable locali erano ignorabili in base ai relativi parametri. Dopo questa modifica, nessuna funzione composable locale verrà saltata. Questa modifica viene apportata perché è normale e previsto che le funzioni locali acquisiscano i parametri dall'elemento principale e il loro salto è una fonte comune di bug.

    Per riepilogare, considera l'esempio:

    @Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) {
      @Composable fun ShowCount() { Text("Count: $count") }
      ShowCount()
      Button(onClick={ onCountChange(count + 1) }) {
        Text("Increment")
      }
    }
    

    Prima di questa modifica, la funzione composable ShowCount veniva sempre ignorata, anche dopo l'aggiornamento del parametro count. Abbiamo deciso, tuttavia, di non dare seguito a questa misura. (I5648a)

  • È stato risolto il problema relativo al ripristino del vecchio valore di rememberSaveable() quando utilizzato con i parametri di input (I1b110, b/182403380)

Versione 1.0.0-beta03

24 marzo 2021

androidx.compose.runtime:runtime-*:1.0.0-beta03 viene rilasciato. La versione 1.0.0-beta03 contiene questi commit.

Modifiche all'API

  • DefaultMonotonicFrameClock è deprecato. La chiamata a withFrameNanos o Recomposer.runRecomposeAndApplyChanges senza MonotonicFrameClock ora genera un errore IllegalStateException. (I4eb0d)

Versione 1.0.0-beta02

10 marzo 2021

androidx.compose.runtime:runtime-*:1.0.0-beta02 viene rilasciato. La versione 1.0.0-beta02 contiene questi commit.

Correzioni di bug

  • Applicare limitazioni all'utilizzo pubblico delle API sperimentali (I6aa29, b/174531520)
  • Correzione del problema relativo a rememberSaveable { mutableStateOf(0) } quando viene utilizzato all'interno di una destinazione di navigazione-composizione. (I1312b, b/180042685, b/180701630)

Versione 1.0.0-beta01

24 febbraio 2021

androidx.compose.runtime:runtime-*:1.0.0-beta01 viene rilasciato. La versione 1.0.0-beta01 contiene questi commit.

Questa è la prima release di Compose 1.0.0 Beta.

Modifiche all'API

  • Aggiungi l'Recomposer.runRecomposeConcurrentlyAndApplyChanges API sperimentale per ricomporre le composizioni non valide al di fuori del loop del frame principale. (I342d0)
  • Tutti i composabili contrassegnati con @ReadOnlyComposable ora vengono convalidati in fase di compilazione per garantire che effettuino chiamate solo ad altri @ReadOnlyComposable (I58961)
  • Il valore defaultFactory per compositionLocalOf e staticCompositionLocalOf ora è obbligatorio anziché facoltativo.

    Queste modifiche rimuovono un potenziale errore di tipo per i tipi non nulli in cui non è stata fornita una fabbrica predefinita. In precedenza, questo forniva un riferimento null per un tipo non null.

    Per i tipi nullable, ti consigliamo di fornire { null } come factory predefinita.

    Sconsigliamo di utilizzare variabili locali con tipi non null se non è possibile fornire un valore predefinito ragionevole. Se non esiste un valore predefinito ragionevole, la funzione lambda defaultFactory deve generare un'eccezione. Tuttavia, se viene lanciata un'eccezione, i consumatori della locale avranno una dipendenza implicita dalla sua indicazione che non viene applicata dal sistema di tipi. (Ifbd2a)

  • I simboli obsoleti sono stati rimossi dal runtime di composizione (I3252c)

  • L'API deprecata emptyContent() è stata rimossa. Utilizza invece {}. (Idb33f, b/179432510)

  • Providers è stato rinominato in CompositionLocalProvider

    • Il costruttore Composition non accetta più un parametro chiave ed è stato ritirato.
    • currentCompositeKeyHash è stata trasformata in una proprietà di primo livello componibile anziché in una funzione di primo livello componibile.
    • CompositionData e CompositionGroup sono stati spostati nello spazio dei nomi androidx.compose.runtime.tooling
    • ComposableLambda è stata creata come interfaccia anziché come classe concreta e non ha più parametri di tipo.
    • ComposableLambdaN è stata creata come interfaccia anziché come classe concreta e non ha più parametri di tipo.
    • La funzione snapshotFlow è stata spostata nello spazio dei nomi androidx.compose.runtime
    • Il metodo di unione di SnapshotMutationPolicy non è più sperimentale
    • La funzione clearRoots di primo livello @TestOnly è stata rimossa. Non è più necessario.
    • Le funzioni keySourceInfoOf e resetSourceInfo sono state rimosse. Non sono più necessari.
    • La funzione Composer.collectKeySourceInformation è stata rimossa. Non è più necessario.
    • I metodi isJoinedKey, joinedKeyLeft e joinedKeyRight sono stati rimossi. Non sono più necessari.
    • Diverse API di primo livello sono state spostate e riorganizzate in file diversi. A causa della semantica della classe file di Kotlin, la compatibilità binaria verrà interrotta, ma non la compatibilità con il codice sorgente, 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 precedentemente ritirate (Ice5da, b/178633932)

  • Sono state apportate le seguenti modifiche all'API Material:

    • È stato aggiunto il parametro contentPadding a Top/BottomAppBar per consentire la personalizzazione del padding predefinito.
    • I parametri in BackdropScaffold sono stati riordinati in modo da rispettare le linee guida dell'API relative alla precedenza dei parametri obbligatori rispetto a quelli facoltativi.
    • Il parametro icon in BottomNavigationItem è stato spostato dopo selected e onClick.
    • Il parametro alwaysShowLabels in BottomNavigationItem è stato rinominato in alwaysShowLabel.
    • I parametri bodyContent in alcuni componenti sono stati rinominati in content.
    • Parametri riordinati in ButtonDefaults.buttonColors(). Tieni presente che, poiché il tipo di parametri non è cambiato, non verrà generato un errore nel codice. Assicurati di utilizzare parametri denominati o di aggiornare l'ordinamento manualmente, altrimenti il codice non funzionerà come in precedenza.
    • Parametro secondaryVariant aggiunto a darkColors(). Questo colore è in genere uguale a secondary nel tema scuro, ma viene aggiunto per coerenza e ulteriore personalizzazione.
    • Sono stati rimossi ElevationDefaults e animateElevation() dall'API pubblica perché non erano di uso comune / utili.
    • onValueChangeEnd in Slider è stato rinominato in onValueChangeFinished e impostato come nullable.
    • Il parametro text in Snackbar è stato rinominato in content per coerenza.
    • È stato aggiunto il parametro contentPadding a DropdownMenuItem per consentire la personalizzazione del padding predefinito e content è stato reso un'estensione di RowScope.
    • ModalDrawerLayout rinominato in ModalDrawer.
    • BottomDrawerLayout rinominato in BottomDrawer.
    • (I1cc66)

Versione 1.0.0-alpha12

10 febbraio 2021

androidx.compose.runtime:runtime-*:1.0.0-alpha12 viene rilasciato. La versione 1.0.0-alpha12 contiene questi commit.

Modifiche all'API

  • Il supporto di ViewGroups è stato rimosso da UiApplier. I composabili emitView obsoleti sono stati rimossi. (Ifb214)
  • CompositionReference rinominato in CompositionContext (I53fcb)
  • ComponentActivity.setContent è stato spostato in androidx.activity.compose.setContent nel modulo androidx.activity:activity-compose. (Icf416)
  • L'API Snapshot è stata aggiornata per essere più coerente con le linee guida dell'API e per nascondere le classi di implementazione interna dall'API pubblica. (Id9e32)
  • Gli ambienti sono stati rinominati in modo che corrispondano alla ridenominazione di Ambient -> CompositionLocal. Gli ambienti in precedenza si chiamavano AmbientFoo, ora i CompositionLocals si chiamano LocalFoo. (I2d55d)
  • rinominati rispettivamente in Ambient e ambientOf / staticAmbientOf in compositionLocal e compositionLocalOf / staticCompositionLocalOf. Questa modifica contribuisce a chiarire lo scopo di CompositionLocal: un meccanismo per fornire / recuperare valori locali di una composizione. Le istanze di CompositionLocal devono avere il prefisso Local, ad esempio val LocalFoo = compositionLocalOf { Foo() }. (Ia55b6)
  • takeMutableSnapshot e takeSnapshot sono stati trasferiti come metodi complementari di Snapshot. (I91f19)
  • @ComposableContract è 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)

  • snapshotFlow e withMutableSnapshot non sono più sperimentali (I6a45f)

  • Ora i ricostruttori possono essere chiusi. I ricostruttori chiusi continueranno la ricostituzione fino al completamento delle coroutine secondarie di composizione. Recomposer.shutDown è stato rinominato in cancel per distinguerlo da close. (Ib6d76)

  • L'elemento compose:runtime-dispatch è stato ritirato. MonotonicFrameClock ora si trova in compose:runtime e AndroidUiDispatcher in compose:ui. (Ib5c36)

  • L'API di destinazione del plug-in del compilatore Compose è stata sottoposta a refactoring per utilizzare un'interfaccia anziché una classe concreta. Inoltre, l'interfaccia non utilizza più un parametro di tipo.

    Si tratta di una modifica interna che non dovrebbe influire sulla compatibilità del codice sorgente, ma è una modifica che comporta la rottura del codice binario. (I3b922, b/169406779)

  • È stato introdotto SnapshotMutableState (Icfd03)

  • DisposableEffectDisposable è stato rinominato in DisposaleEffectResult (Ica7c6)

  • È stato rimosso Recomposer.current(). [Abstract]ComposeView ora utilizza per impostazione predefinita i Recomposer basati su ambito finestra creati in modo lazy e gestiti da ViewTreeLifecycleOwner per la finestra. I tick di animazione basati su recomposition e withFrameNanos vengono messi in pausa quando il ciclo di vita dell'host è interrotto. (I38e11)

  • Recomposer.runningRecomposers ora offre un StateFlow globale di RecomposerInfo di sola lettura per osservare lo stato della composizione in corso nel processo. Utilizza questa API anziché Recomposer.current(), che ora è stata ritirata. (If8ebe)

  • DisposableEffectDisposable è stato rinominato in DisposaleEffectResult (I3ea68)

Versione 1.0.0-alpha11

28 gennaio 2021

androidx.compose.runtime:runtime-*:1.0.0-alpha11 viene rilasciato. La versione 1.0.0-alpha11 contiene questi commit.

Modifiche all'API

  • onCommit, onDispose e onActive sono stati ritirati a favore delle API SideEffect e DisposableEffect (If760e)
  • L'API emit() e tutti i relativi sovraccarichi sono stati ritirati e rinominati in ComposeNode. Le API sono identiche, ma hanno un nome diverso per rispettare le convenzioni di denominazione di Compose (I4137b)
  • invalidate e compositionReference() sono ora deprecati a favore di currentRecomposeScope e rememberCompositionReference rispettivamente. (I583a8)
  • RememberObserver sostituisce CompositionLifecycleObserver e CompositionLifecycleObserver è ora deprecato.

    RememberObserver sostituisce CompositionLifecycleObserver con semantica modificata e metodi rinominati. Il passaggio alla nuova API può essere eseguito meccanicamente per gli oggetti che vengono ricordati solo una volta, che è la prassi consigliata e continuerà a esserlo. Tuttavia, se un riferimento è stato memorizzato più volte in una composizione, onRemembered viene chiamato per ogni riferimento, mentre onEnter viene chiamato una sola volta. onEnter è stato chiamato più volte se l'oggetto è stato utilizzato in sottocomposizioni, come WithConstraints e Scaffold, rendendo inaffidabile la singola chiamata onEnter, che è stata rimossa per RememberObserver.

    RememberObserver aggiunge onAbandoned, che viene chiamato se l'istanza RememberObserver viene restituita dal callback passato a remember, ma non è stata memorizzata nello stato della composizione e, pertanto, non verrà mai chiamato onRemembered. Ciò può accadere se un'eccezione termina la composizione prima del completamento o se la composizione viene ignorata perché lo stato per cui è stata prodotta non è più attuale o non è più necessario. Se l'istanza di RememberObserver che segue il singolo consiglio di riferimento riportato sopra monitora una risorsa esterna, sia onForgotten che onAbandoned indicano che la risorsa non è più necessaria. Se l'oggetto monitora il lavoro avviato o le risorse allocate in onRemembered, onAbandoned può essere ignorato perché non verrà chiamato se viene chiamato onRemembered. (I02c36)

  • Non contrassegnare le funzioni collectAsState() come in linea (Ia73e4)

Correzioni di bug

  • Con vincoli è stato rielaborato come BoxWithConstraints e spostato in foundation.layout. (I9420b, b/173387208)
  • Utilizza TestCoroutineDispatcher nei test (I532b6)

Versione 1.0.0-alpha10

13 gennaio 2021

androidx.compose.runtime:runtime-*:1.0.0-alpha10 viene rilasciato. La versione 1.0.0-alpha10 contiene questi commit.

Modifica che provoca un errore

  • La ristrutturazione dell'API del compilatore interno consente di raggruppare le modifiche ai nodi generati come risultato della composizione nella fase di composizione "Applica modifiche", dopo il completamento di tutte le funzioni @Composable.

    Si tratta di una modifica di interruzione del comportamento che potrebbe influire sul codice dell'applicazione, poiché i nodi non sono più disponibili dalle API interne ed sperimentali fino a quando le modifiche non sono state applicate. Di solito, questo problema può essere risolto circondando il codice con queste dipendenze in un composable SideEffect per posticipare l'esecuzione del codice fino a dopo la creazione e l'inizializzazione dei nodi. (I018da)

Modifiche all'API

  • È stato aggiunto un modo per monitorare se il recomposer ha applicato modifiche. (I1b3e2)
  • Espandi le API [Abstract]ComposeView per consentire il riciclo delle visualizzazioni basate su Compose, eliminando la loro composizione per ricrearle nuovamente in un secondo momento. Aggiungi API per installare e rilevare Recomposers basati su finestra e CompositionReference per creare composizioni secondarie.

    Aggiungi ViewCompositionStrategy per configurare la strategia di eliminazione della composizione di [Abstract]ComposeViews. Il comportamento predefinito è l'eliminazione al distacco della finestra. (I860ab)

Correzioni di bug

  • Ora Recomposer espone un flusso del suo stato attuale, consentendo di monitorare la sua attività e quella degli effetti associati. (Ifb2b9)
  • Ora è possibile accedere all'evento keyEvent nativo tramite keyEvent.nativeKeyEvent (I87c57, b/173086397)

Versione 1.0.0-alpha09

16 dicembre 2020

androidx.compose.runtime:runtime-*:1.0.0-alpha09 viene rilasciato. La versione 1.0.0-alpha09 contiene questi commit.

Modifiche all'API

  • Sono stati rimossi SlotTable, SlotReader e SlotWriter dall'API pubblica. In precedenza erano contrassegnati come InternalComposeAPI. Ora sono interne al modulo di composizione.

    CompositionData e CompositionGroup sono stati aggiunti come sostituzione dell'API ui-tooling da utilizzare per estrarre le informazioni sulla composizione. Sono pubblici, ma non sono destinati all'uso al di fuori dell'API ui-tooling, in quanto forniscono le informazioni non elaborate interpretate dall'API ui-tooling (I31a9c)

  • La classe Applier non è più considerata un (Id85b0)

  • L'interfaccia Applier è cambiata per semplificare la creazione degli alberi dal basso verso l'alto anziché dal basso verso l'alto.

    Il metodo insert() è stato rinominato in insertTopDown().

    È stato aggiunto un nuovo metodo, insertBottomUp().

    Un applicatore inserisce i nodi nell'albero in modifica utilizzando insertTopDown() o insertBottomUp(), a seconda di quale ha un rendimento migliore.

    Alcuni alberi, come LayoutNode e View, sono molto più efficienti da creare dal basso verso l'alto rispetto a quelli dall'alto verso il basso. Prima di questa modifica, era necessario un insieme di inserimenti per implementare il metodo dal basso verso l'alto, che doveva essere copiato in ogni applicatore che aveva bisogno di una costruzione dal basso verso l'alto per le prestazioni. Con questa modifica, un Applier sostituisce insertBottomUp() per creare un albero dal basso verso l'alto e insertTopDown() per creare l'albero dall'alto verso il basso. (Icbdc2)

  • Compose supporta i getter delle proprietà che possono eseguire invocazioni composable. Il supporto di questa funzionalità non verrà rimosso, ma la sintassi per dichiarare un getter della proprietà come @Composable sta cambiando.

    La sintassi ora non più supportata per farlo consisteva nell'annotare la proprietà stessa:

        @Composable val someProperty: Int get() = ...
    

    La sintassi ora corretta per farlo è annotare il getter della proprietà:

       val someProperty: Int @Composable get() = ...
    

    Entrambe le sintassi funzioneranno per un po' di tempo, ma la sintassi precedente ritirata diventerà eventualmente un errore di compilazione. (Id9197)

Correzioni di bug

  • AndroidOwner impostato come interno (Ibcad0, b/170296980)
  • La funzione subcomposeInto(LayoutNode) è stata resa interna (Id724a)

Versione 1.0.0-alpha08

2 dicembre 2020

androidx.compose.runtime:runtime-*:1.0.0-alpha08 viene rilasciato. La versione 1.0.0-alpha08 contiene questi commit.

Modifiche all'API

  • È stato aggiunto il controllo lint per il nome e la posizione dei parametri lambda componibili, per verificare la coerenza con le linee guida di Compose. È stata eseguita la migrazione di alcune API che utilizzano children come nome per la funzione lambda finale a content, in base alle indicazioni e al controllo lint. (Iec48e)
  • Recomposer non accetta più un contesto EmbeddingContext. Le dipendenze di pianificazione richieste vengono ottenute dal contesto effectCoroutineContext. FrameManager è deprecato; le integrazioni della piattaforma devono inizializzare la propria gestione degli snapshot globali. (I02369)
  • La funzione RestorableStateHolder.withRestorableState è stata rinominata in RestorableStateProvider (I66640)

Correzioni di bug

  • Sono stati ritirati gli ambienti con il suffisso Ambient e sostituiti con nuove proprietà con prefisso Ambient, seguendo le linee guida per gli altri ambienti e l'API Compose. (I33440)
  • Rimuovi il vecchio modulo ui-test e i relativi stub (I3a7cb)

Versione 1.0.0-alpha07

11 novembre 2020

androidx.compose.runtime:runtime-*:1.0.0-alpha07 viene rilasciato. La versione 1.0.0-alpha07 contiene questi commit.

Nuove funzionalità

Modifiche all'API

  • L'annotazione @UnionType è stata ritirata (I57cde)
  • provideDefault è stato aggiunto come alternativa a provide per fornire ambienti e può essere utilizzato per specificare valori di ambiente che verranno impostati solo se non è già stato fornito un valore di ambiente. (Id6635, b/171024925)
  • LaunchedTask è stato rinominato in LaunchedEffect per coerenza con le API SideEffect e DisposableEffect. Per promuovere le best practice, non è consentito LaunchedEffect senza parametri subject. (Ifd3d4)
  • Applier ora dispone di callback onBeginChanges/onEndChanges che vengono invocati quando un Composer inizia/termina di applicare le modifiche all'albero. Se necessario, possono essere utilizzati per la gestione delle risorse in batch. (Icf476)
  • Ora Recomposer richiede un contesto coroutine durante la costruzione (Ic4610)
  • Modifiche all'implementazione interna di SlotTable che non dovrebbero influire sull'API pubblica. (If9828)
  • Sono stati rimossi gli adattatori rxjava2 non più supportati che non prendono il valore iniziale (Idb72f)

Correzioni di bug

  • foundation.Text è stato ritirato e sostituito con material.Text. Per un'API di testo di base senza opinioni che non utilizza i valori di un tema, consulta androidx.compose.foundation.BasicText. (If64cb)
  • BaseTextField è stato ritirato. Utilizza invece BasicTextField. (I896eb)
  • Diversi simboli relativi al layout sono stati spostati da androidx.compose.ui ad androidx.compose.layout.ui. (I0fa98, b/170475424)

Contributo esterno

  • È stato aggiunto il modulo runtime-rxjava3 per la composizione. Simile a runtime-rxjava2 (I02cbf)

Versione 1.0.0-alpha06

28 ottobre 2020

androidx.compose.runtime:runtime-*:1.0.0-alpha06 viene rilasciato. La versione 1.0.0-alpha06 contiene questi commit.

Modifiche all'API

  • Recomposer ora è un CompositionReference e un elemento composizione padre valido. Ora il ricomposimetro esplicito è obbligatorio in meno punti. (I4036f)
  • È stata aggiunta l'API corrispondente DisposableEffect a SideEffect, che svolge il ruolo di onCommit-with-params, ma con un onDispose obbligatorio.
    • È stata aggiunta l'API rememberUpdatedState per pubblicare i dati della ricomposi- one in processi in corso o di lunga durata come DisposableEffects o LaunchedTasks.
    • (Id50b9)
  • MutableVector ora implementa RandomAccess (I85d73, b/170461551)
  • È stato aggiunto il composable SideEffect per applicare gli effetti collaterali della composizione agli oggetti gestiti dalla composizione. SideEffect è pensato per sostituire il composable onCommit. (Ia77c2)
  • Nuova API sperimentale RestorableStateHolder. Consente di salvare lo stato definito con [savedInstanceState] e [rememberSavedInstanceState] per il sottoalbero prima di eliminarlo per consentirne la successiva composizione con lo stato ripristinato. (I66884, b/166586419)

Correzioni di bug

  • Attiva le transizioni in ComposeTestRule; rimuovi l'opzione per attivare il cursore lampeggiante da ComposeTestRule. (If0de3)

Versione 1.0.0-alpha05

14 ottobre 2020

androidx.compose.runtime:runtime-*:1.0.0-alpha05 viene rilasciato. La versione 1.0.0-alpha05 contiene questi commit.

Modifiche all'API

  • Modificatore di input sperimentale Modifier.pointerInput che sospende l'input (Ia77d2)
  • Le prestazioni di scorrimento di LazyColumn/Row sono migliorate riducendo il lavoro nella composizione secondaria a ogni scorrimento. Il nuovo metodo hasInvalidations() è stato aggiunto per la classe Composition. Il metodo hasPendingChanges() di Recomposer è stato rinominato in hasInvalidations() (Ib2f32, b/168293643, b/167972292, b/165028371)
  • Aggiungi l'API produceState per avviare le coroutine dalla composizione che aggiornano un singolo valore State<T> nel tempo (Id4a57)
  • launchInComposition è stato rinominato in LaunchedTask per allinearsi alle linee guida dell'API Compose (I99a8e)
  • L'ordine delle chiamate place() nei layout personalizzati ora definisce l'ordine di disegno per gli elementi secondari (Ibc9f6)

Versione 1.0.0-alpha04

1° ottobre 2020

androidx.compose.runtime:runtime-*:1.0.0-alpha04 viene rilasciato. La versione 1.0.0-alpha04 contiene questi commit.

Modifiche all'API

  • È stato aggiunto OwnerScope per consentire la raccolta degli ambiti di osservazione del layout e dei disegni una volta che non sono più validi. (Ic4cf8)
  • È stata aggiunta l'API derivedStateOf per creare oggetti State in base a un calcolo che può leggere (e derivare da) altri oggetti State (If758b)
  • È stata aggiunta l'API TestOnly per SnapshotStateObserver (I6e2a9)

Correzioni di bug

  • foundation.Box è stato ritirato. Utilizza invece foundation.layout.Box. (Ie5950, b/167680279)

Versione 1.0.0-alpha03

16 settembre 2020

androidx.compose.runtime:runtime-*:1.0.0-alpha03 viene rilasciato. La versione 1.0.0-alpha03 contiene questi commit.

Modifiche all'API

  • CompositionCoroutineScope non implementa più MonotonicFrameClock. Gli utenti che chiamano withFrameNanos devono importare esplicitamente la funzione di primo livello. (Icb642, b/166778123)

Correzioni di bug

  • Le funzioni di test globali come onNode o waitForIdle sono ora ritirate. Esegui la migrazione alle nuove controparti definite in ComposeTestRule (I7f45a).
  • launchInComposition non avvia più le coroutine non inviate (Ief6af, b/166486000)

Versione 1.0.0-alpha02

2 settembre 2020

androidx.compose.runtime:runtime-*:1.0.0-alpha02 viene rilasciato. La versione 1.0.0-alpha02 contiene questi commit.

Modifiche all'API

  • Aggiungi le API snapshotFlow e withMutableSnapshot per utilizzare e produrre modifiche ai dati degli istantanei. (I3e722)
  • La convenzione di chiamata per le funzioni componibili è stata modificata. Si tratta di una modifica che provoca un errore in formato binario. Tutte le librerie devono essere ricompilate per funzionare con questa versione del plug-in del compilatore di compose.

    Questa modifica non crea una modifica che comporta una rottura a livello di codice sorgente, in quanto le uniche API che sono state modificate sono le API del compilatore che richiedono un'attivazione esplicita. (I7afd2, b/158123185)

  • Sono stati rimossi i metodi di pianificazione da EmbeddingContext (I7b9be)

  • onPreCommit è deprecato; ora onCommit ha il comportamento di onPreCommit.

    onCommit e onActive ora vengono eseguiti nello stesso frame del coreografo in cui vengono apportate le modifiche alla composizione, anziché all'inizio del frame del coreografo successivo. (I70403)

Versione 1.0.0-alpha01

26 agosto 2020

androidx.compose.runtime:runtime-*:1.0.0-alpha01 viene rilasciato. La versione 1.0.0-alpha01 contiene questi commit.

Versione 0.1.0-dev

Versione 0.1.0-dev17

19 agosto 2020

androidx.compose.runtime:runtime-*:0.1.0-dev17 viene rilasciato. La versione 0.1.0-dev17 contiene questi commit.

Modifiche all'API

  • Ora le emissioni personalizzate possono dichiarare che uno o più dei relativi settaggi possono essere ignorati e ricomposti indipendentemente dall'emissione. (Ibbd13)
  • Sono state rimosse le chiamate FrameManager deprecate.

    Le API di composizione interna sono state modificate per ridurre il carico aggiuntivo per monitorare gli oggetti di stato come mutableStateof() (I80ba6)

  • Il composable state { ... } è stato ritirato a favore di chiamate esplicite a remember { mutableStateOf(...) } per maggiore chiarezza. Ciò riduce la superficie complessiva dell'API e il numero di concetti per la gestione dello stato e corrisponde al pattern by mutableStateOf() per la delega delle proprietà della classe. (Ia5727)

  • Ora Flow.collectAsState determina il gestore predefinito dalla composizione stessa anziché utilizzare per impostazione predefinita Dispatchers.Main. (I9c1d9)

  • È stato corretto l'arresto anomalo che si verificava quando all'interno del ciclo for veniva utilizzato qualcosa che salvava lo stato. Ora è consentita la stessa chiave in savedInstanceState(), l'API di UiSavedStateRegistry è ora adattata a questo nuovo requisito (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561)

Correzioni di bug

  • emitView è stato deprecato. Se possibile, utilizza AndroidView per emettere le visualizzazioni all'interno di Compose. Tieni presente che la composizione diretta di View e ViewGroup non sarà supportata in futuro, a meno che non si tratti di nodi foglia nell'albero di composizione, nel qual caso è possibile utilizzare AndroidView. (I29b1e, b/163871221)

Versione 0.1.0-dev16

5 agosto 2020

androidx.compose.runtime:runtime-*:0.1.0-dev16 viene rilasciato. La versione 0.1.0-dev16 contiene questi commit.

Modifiche all'API

  • Il criterio di mutazione predefinito di mutableStateOf(), ambientOf() e savedInstanceStateOf() è diventato structuralEqualityPolicy() anziché referentialEqualityPolicy().

    Il valore predefinito per decidere se un nuovo valore assegnato a un'istanza mutableStateOf() è considerato una modifica ora è l'utilizzo di == anziché ===.

    Vedi https://kotlinlang.org/docs/reference/equality.html

    ambientOf() e savedInstanceStateOf() utilizzano mutableStateOf() nelle loro implementazioni, pertanto sono stati modificati in modo da essere coerenti con mutableStateOf().

    L'utilizzo dell'uguaglianza strutturale soddisfa maggiormente le aspettative degli sviluppatori.

    Ad esempio,

    val state = mutableStateOf(1f)
    

    seguito da,

    state.value = 1f
    

    non verrà più considerata una modifica a state e gli utilizzi di state durante la composizione non dovranno più essere ricomposti.

    Si tratta di una modifica che comporta una interruzione del servizio, ma nella maggior parte dei casi (ad esempio quando si utilizzano classi che non sostituiscono equals()), non avrà un effetto significativo su un'applicazione.

    I tipi che sostituiscono equals(), come i tipi data, potrebbero registrare un calo delle prestazioni poiché i relativi metodi equals() ora, per impostazione predefinita, vengono chiamati quando assegnati a un mutableStateOf().

    Il comportamento precedente può essere ripristinato aggiungendo il parametro policy = referentialEqualityPolicy() delle norme alle chiamate a mutableStateOf(), ambientOf() e savedInstanceStateOf(). (Ic21a7)

  • Row e Column ora sono funzioni in linea che riducono notevolmente il sovraccarico di utilizzo. (I75c10)

Correzioni di bug

  • setViewContent è stato deprecato. Utilizza setContent. (I7e497, b/160335130)
  • È stato aggiunto MonotonicFrameAnimationClock che ti consente di utilizzare un MonotonicFrameClock come AnimationClockObservable per colmare il divario tra i nuovi orologi basati su coroutine e le API che utilizzano ancora i vecchi orologi basati su callback.

    L'equivalente di MonotonicFrameClock di ManualAnimationClock ora è ManualFrameClock. (I111c7, b/161247083)

  • Modifier.stateDraggable è stato completamente rielaborato e rinominato in Modifier.swipeable. È stata introdotta una nuova classe SwipeableState e DrawerState e BottomDrawerState sono stati sottoposti a refactoring per ereditarlo. [Modal/Bottom]DrawerLayout non accetta più un parametro onStateChange. (I72332, b/148023068)

  • Modifier.plus è deprecato. Utilizza Modifier.then. "Poi" indica più chiaramente l'ordine, ma impedisce anche di digitare Modifier.padding().background() + anotherModifier, che interrompe la catena ed è più difficile da leggere (Iedd58, b/161529964)

  • SubcomposeLayout viene aggiunto. Si tratta di una primitiva di basso livello che consente di comporre gli elementi secondari durante la misurazione se vogliamo utilizzare alcuni valori disponibili solo in un secondo momento durante la misurazione per la composizione del sottoalbero. Ad esempio, WithConstraints non è implementato utilizzando SubcomposeLayout. (I25cc8)

  • Material FilledTextField è stato rinominato in TextField e la funzionalità di base TextField è stata rinominata in BaseTextField per rendere più semplice la scoperta e l'utilizzo dell'API più semplice (Ia6242, b/155482676)

  • Modifier.drawBackground è stato rinominato in Modifier.background (I13677)

Versione 0.1.0-dev15

22 luglio 2020

androidx.compose.runtime:runtime-*:0.1.0-dev15 viene rilasciato. La versione 0.1.0-dev15 contiene questi commit.

Aggiornamento delle dipendenze

  • Per utilizzare la versione 0.1.0-dev15 di Compose, devi aggiornare le dipendenze in base ai nuovi snippet di codice mostrati sopra in Dichiarazione delle dipendenze.

Modifiche all'API

  • L'annotazione @Model è stata ritirata. Utilizza state e mutableStateOf come alternative. Questa decisione di ritiro è stata presa dopo un'attenta discussione.

    Giustificazione

    La motivazione include, a titolo esemplificativo:

    • Riduce la superficie dell'API e i concetti che dobbiamo insegnare
    • Maggiore allineamento con altri kit di strumenti paragonabili (Swift UI, React, Flutter)
    • Decisione reversibile. Possiamo sempre ripristinare @Model in un secondo momento.
    • Rimuove l'utilizzo di casi limite e le domande difficili da rispondere sulla configurazione di @Model come elementi che dobbiamo gestire
    • Classi di dati @Model, uguale, hashcode e così via.
    • Come faccio ad avere alcune proprietà "osservate" e altre no?
    • Come faccio a specificare l'uguaglianza strutturale rispetto a quella referenziale da utilizzare nell'osservazione?
    • Riduce la "magia" nel sistema. Ridurrebbe la probabilità che qualcuno presuma che il sistema sia più intelligente di quanto non sia (ad es. che sappia confrontare un elenco)
    • Rende la granularità dell'osservazione più intuitiva.
    • Migliora la possibilità di eseguire il refactoring da variabile a proprietà nella classe
    • Potrebbe aprire la possibilità di eseguire ottimizzazioni specifiche per stato create manualmente
    • Si allinea di più al resto dell'ecosistema e riduce l'ambiguità rispetto allo stato immutabile o all'approccio "abbracciamo lo stato mutabile"

    Note sulla migrazione

    Quasi tutti gli utilizzi esistenti di @Model possono essere trasformati in uno dei due modi seguenti. L'esempio seguente contiene una classe @Model con due proprietà solo per fare un esempio e viene utilizzata in un composable.

    @Model class Position(
     var x: Int,
     var y: Int
    )
    
    @Composable fun Example() {
     var p = remember { Position(0, 0) }
     PositionChanger(
       position=p,
       onXChange={ p.x = it }
       onYChange={ p.y = it }
     )
    }
    

    Alternativa 1: utilizza State<OriginalClass> e crea copie.

    Questo approccio è semplificato con le classi di dati di Kotlin. In sostanza, trasforma tutte le proprietà var precedenti in proprietà val di una classe di dati, quindi utilizza state anziché remember e assegna il valore dello stato alle copie clonate dell'originale utilizzando il metodo di utilità copy(...) della classe di dati.

    È importante notare che questo approccio funziona solo se le uniche mutazioni a quella classe sono state eseguite nello stesso ambito in cui viene creata l'istanza State. Se la classe si sottopone a mutazioni interne al di fuori dell'ambito di utilizzo e ti basi sull'osservazione di questo comportamento, il seguente approccio è quello che ti consigliamo di utilizzare.

    data class Position(
     val x: Int,
     val y: Int
    )
    
    @Composable fun Example() {
     var p by state { Position(0, 0) }
     PositionChanger(
       position=p,
       onXChange={ p = p.copy(x=it) }
       onYChange={ p = p.copy(y=it) }
     )
    }
    

    Alternativa 2: utilizza mutableStateOf e i delegati delle proprietà

    Questo approccio è semplificato con i delegati delle proprietà di Kotlin e l'API mutableStateOf che consente di creare istanze di MutableState al di fuori della composizione. In sostanza, sostituisci tutte le proprietà var della classe originale con proprietà var con mutableStateOf come delegato della proprietà. Il vantaggio è che l'utilizzo della classe non cambierà affatto, solo la sua implementazione interna. Tuttavia, il comportamento non è completamente identico all'esempio originale, poiché ora ogni proprietà viene osservata/sottoscritta singolarmente, pertanto le ricostruzioni che vedi dopo questa riorganizzazione potrebbero essere più limitate (un bene).

    class Position(x: Int, y: Int) {
     var x by mutableStateOf(x)
     var y by mutableStateOf(y)
    }
    
    // source of Example is identical to original
    @Composable fun Example() {
     var p = remember { Position(0, 0) }
     PositionChanger(
       position=p,
       onXChange={ p.x = it }
       onYChange={ p.y = it }
     )
    }
    

    (I409e8, b/152050010, b/146362815, b/146342522, b/143413369, b/135715219, b/143263925, b/139653744)

  • Modifica la strategia di generazione del codice del compilatore di Compose. Prima della modifica, il compilatore di composizione trasformava le chiamate in funzioni componibili. Con questa modifica, ora trasformiamo il corpo di una funzione composable e lasciamo invariato il sito di chiamata (per lo più).

    Ciò significa che la maggior parte della logica di comunicazione con il runtime di composizione avviene all'inizio del corpo della funzione, anziché nel sito di chiamata.

    Questa dovrebbe essere una modifica compatibile con la sorgente per tutti gli utilizzi di compose. La maggior parte degli utenti di compose non dovrebbe dover aggiornare alcun codice a seguito di questa modifica.

    Per supportare questo lavoro, la firma JVM di tutte le funzioni composable è cambiata. Una funzione componibile che accetta un singolo parametro viene trasformata in una funzione che accetta 3 parametri, i parametri aggiuntivi sono il compositore, un numero intero "chiave" e un numero intero con maschera di bit utilizzato per propagare i metadati tramite le chiamate.

    Ora Compose trasforma anche gli argomenti predefiniti in una funzione componibile. Ciò avviene senza introdurre un sovraccarico predefinito sintetico aggiuntivo della funzione stessa, pertanto questa modifica comporterà la definizione di un numero inferiore di funzioni.

    Modifiche comportamentali intenzionali note derivanti da quanto segue:

    1. Alcune chiamate verranno ignorate, mentre in precedenza non sarebbe stato così
    2. Le espressioni componibili nelle espressioni degli argomenti predefiniti ora vengono sottoscritte e gestite correttamente

    Questo lavoro ha incluso alcune ottimizzazioni: 1. Il risultato dei confronti dei parametri viene propagato tramite il grafo delle chiamate ad altre funzioni composable. Ciò comporterà meno confronti in fase di esecuzione, una riduzione delle dimensioni della tabella degli slot e un maggiore salto delle funzioni componibili che in precedenza non venivano saltate. 2 I parametri che vengono determinati come "statici" in fase di compilazione non vengono più confrontati o memorizzati in fase di runtime. In questo modo si riduce il numero di confronti e le dimensioni della tabella degli slot. 3. La struttura del flusso di controllo del corpo delle funzioni viene utilizzata per ridurre al minimo il numero di gruppi generati. In questo modo si riducono le dimensioni della tabella degli slot e il lavoro per il runtime 4. I parametri di invio e di ricezione inutilizzati per le funzioni non sono inclusi nel determinare la possibilità di saltare la funzione se non vengono utilizzati all'interno del corpo della funzione.

    La maggior parte delle modifiche non compatibili riguarda le API di destinazione del compilatore e l'utilizzo tipico di compose non sarà interessato: 1. Composer::startExpr è stato rimosso 2. Composer::endExpr è stato rimosso 3. Composer::call è stato ritirato 4. Le sovraccaricamenti non varargs di key sono stati rimossi. Utilizza la versione vararg in futuro. 5. L'annotazione Pivotal è stata ritirata. Utilizza key come sostituto. 6. ScopeUpdateScope::updateScope è stato modificato in modo da attendere una funzione 3 anziché una funzione 1 7. restartableFunction e restartableFunctionN sono stati aggiornati per includere parametri aggiuntivi in fase di compilazione (I60756, b/143464846)

  • Aggiunti sortWith e removeRange a MutableVector (Icccf7)

  • Sono state aggiunte implementazioni del metodo predefinito per CompositionLifecycleObserver (I24289)

  • Applier ora richiede un metodo clear() per eliminare le composizioni (Ibe697)

  • È stato aggiunto asMutableList() a MutableVector per consentirne il passaggio all'API pubblica senza dover copiare l'intero elenco. (I298df)

  • È stato aggiunto rememberCoroutineScope() per ottenere un CoroutineScope gestito nella composizione per l'avvio di job in risposta a eventi. (I0e264)

  • MutableVector è una nuova raccolta che non implementa alcuna interfaccia Collection standard. Questa raccolta offre una velocità superiore agli altri requisiti ed è pensata per essere utilizzata solo nelle implementazioni interne. (I8ebd6)

  • StableMutableList e StableMutableMap sono stati rimossi temporaneamente per evitare un problema nella versione di Kotlin compose richiesta. Queste interfacce verranno reintrodotte non appena Compose verrà aggiornato a una versione di Kotlin che non presenta il problema.

    SnapshotStateList e SnapshotStateMap sono ora pubblici, ma verranno ritirati al termine del ripristino di StableMutableList e StableMutableMap. (Ia7769)

  • Aggiunta della funzione di primo livello withFrameNanos per la durata dell'animazione (Ie34c5)

  • L'annotazione @Untracked è stata ritirata. Sostituire con @ComposableContract(tracked=false) (Id211e)

  • RestartableFunction e le API associate sono state rinominate in ComposableLambda e così via. Queste API erano target solo del compilatore, pertanto in genere non dovrebbero influire sulla compatibilità a livello di codice sorgente. La ridenominazione è stata eseguita principalmente per comunicare meglio la funzione di questa classe quando viene visualizzata nelle tracce dello stack (I7eb25)

  • L'annotazione @Composable non è più valida per le classi (Ia5f02)

  • Ambient<T> ora è @Stable anziché @Immutable (I0b4bb)

  • Prima di questa modifica, il plug-in del compilatore di Compose intercettava in modo non banale le chiamate ai costruttori all'interno di una funzione @Composable se era presente un (I5205a, b/158123804)

  • Il composable Recompose non è più un'astrazione utile. La maggior parte delle ricostruzioni dovrebbe avvenire a seguito delle assegnazioni di MutableState. Per qualsiasi altro caso, ti consigliamo di utilizzare la funzione invalidate per attivare una ricostituzione dell'ambito corrente. (Ifc992)

  • Observe non è più un'astrazione utile. Se devi replicarla, la sua implementazione può essere replicata semplicemente creando una funzione componibile che esegue un parametro lambda componibile. Ad esempio, @Composable fun Observe(body: @Composable () -> Unit) = body() (I40d37)

  • @Direct è stato ritirato a favore di @ComposableContract(restartable=false) (If4708)

  • È stato aggiunto un'opzione per StateFlow, introdotta di recente, che consente di precompilare il valore iniziale in modo che lo stato restituito non sia null (I61dd8, b/156233789)

  • È stato aggiunto un'opzione di adattamento per Flow. Esempio di utilizzo: valore val tramite flow.collectAsState() (If2198, b/153375923)

  • [Mutabile]Gli operatori di delega della proprietà stato sono stati spostati nelle estensioni per supportare le ottimizzazioni della delega della proprietà di Kotlin 1.4. Gli utenti che chiamano devono aggiungere importazioni per continuare a utilizzare by state { ... } o by 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 deprecato. Utilizza invece setContent o setViewContent. Compose.disposeComposition è stato ritirato. Utilizza invece il metodo dispose su Composition restituito da setContent. androidx.compose.Compose.subcomposeInto è stato spostato in androidx.ui.core.subcomposeInto ComponentNode#emitInsertAt è stato rinominato in ComponentNode#insertAt ComponentNode#emitRemoveAt è stato rinominato in ComponentNode#removeAt ComponentNode#emitMode è stato rinominato in ComponentNode#move (Idef00)

  • È stato aggiornato il flag ComposeFlags.COMPOSER_PARAM in true, il che comporterà la modifica della strategia di generazione del codice per il plug-in di composizione. A un livello generale, questo fa sì che le funzioni @Composable vengano generate con un parametro sintetico aggiuntivo, che viene trasmesso alle chiamate @Composable successive affinché il runtime possa gestire correttamente l'esecuzione. Si tratta di una modifica significativa che comporta la rottura del codice binario, ma dovrebbe preservare la compatibilità a livello di codice sorgente in tutti gli utilizzi consentiti di compose. (I7971c)

  • Modifiche non compatibili all'API Ambient. Per informazioni dettagliate, consulta il log e la documentazione di Ambient<T> (I4c7ee, b/143769776)

  • È stato aggiunto ui-livedata, un nuovo elemento con un'entità di LiveData. Esempio di utilizzo: valore val tramite liveData.observeAsState() (Ie9e8c, b/150465596)

  • Gli adattatori Rx senza valore iniziale esplicito sono deprecati. L'utilizzo di null non è sempre il valore predefinito migliore, ad esempio quando hai un elenco è meglio iniziare con emptyList() o qualsiasi altro valore predefinito ragionevole (I00025, b/161348384)

  • È stato aggiunto ui-rxjava2, un nuovo elemento con adattatori per RxJava2. Esempio di utilizzo: valore val tramite observable.subscribeAsState() (Ifab4b, b/153369097)

  • savedInstanceState() ora può essere utilizzato con tipi nullable (I6847f, b/153532190)

  • Nuovi metodi listSaver() e mapSaver() per semplificare la scrittura di oggetti Saver personalizzati (I8cf68, b/152331508)

  • Nuove funzioni: savedInstanceState() e rememberSavedInstanceState(). Sono simili a state() e remember(), ma hanno un supporto integrato per lo stato dell'istanza salvato (If1987, b/152025209)

Correzioni di bug

  • runOnIdleCompose è stato rinominato in runOnIdle (I83607)
  • È stata creata l'API sperimentale LayoutNode (I4f2e9)
  • androidx.ui.foundation.TextFieldValue e androidx.ui.input.EditorValue sono deprecati. Anche i composabili TextField, FilledTextField e CoreTextField che utilizzano questo tipo sono deprecati. Utilizza invece androidx.ui.input.TextFieldValue (I4066d, b/155211005)
  • È stata rimossa l'API DrawBackground ritirata a favore delle API di estensione drawBackground su Modifier. È stato eseguito il refactoring delle implementazioni di colore, pennello e drawBackground per ridurre i percorsi di codice e rimuovere il requisito di creazione di Modifier nell'ambito della composizione. (I0343a)
  • API compose di livello superiore aggiornate che espongono un Canvas per esporre CanvasScope. In questo modo, i consumatori non dovranno più gestire i propri oggetti Paint. I consumatori che hanno ancora bisogno di accedere a un Canvas possono utilizzare il metodo drawCanvas dell'estensione, che fornisce un callback per emettere comandi di disegno con il Canvas di base. (I80afd)
  • L'API lambda finale WithConstraints è stata modificata. Ora, anziché due parametri, ha un ambito del ricevitore che, oltre a constraints e layoutDirection, fornisce le proprietà minWidth, maxWidth, minHeight e maxHeight in Dp (I91b9a, b/149979702)
  • È stato aggiunto il modificatore di spaziatura simmetrica. (I39840)
  • Aggiornati wrapContentWidth e wrapContentHeight in modo che prevedano l'allineamento verticale o orizzontale anziché qualsiasi allineamento. Il modificatore di gravità è stato aggiornato in modo da accettare l'allineamento verticale o orizzontale. Le opzioni Riga, Colonna e Serie sono state aggiornate per supportare gli allineamenti continui personalizzati. (Ib0728)
  • Il modulo ui-text viene rinominato ui-text-core (I57dec)
  • Miglioramento dell'API DrawModifier:
    • È stato creato l'ambito del ricevente per draw() ContentDrawScope
    • Sono stati rimossi tutti i parametri in draw()
    • DrawScope ha la stessa interfaccia dell'ex CanvasScope
    • ContentDrawScope ha il metodo drawContent() (Ibaced, b/152919067)
  • ColoredRect è stato deprecato. Utilizza invece Box(Modifier.preferredSize(width, height).drawBackground(color)). (I499fa, b/152753731)
  • Operatore Modificatore più sostituito con funzioni di estensione di fabbrica (I225e4)
  • I membri RowScope e ColumnScope sono ora accessibili al di fuori di Riga e Colonna. (I3a641)
  • LayoutFlexible è stato rinominato LayoutWeight. Il parametro tight è stato rinominato in fill. (If4738)
  • WithConstraints ha ricevuto il parametro LayoutDirection (I6d6f7)
  • Lo sfondo è stato rinominato in DrawBackground e viene memorizzato per impostazione predefinita (Ia0bd3)
  • È stato sostituito ButtonStyle con funzioni distinte ed è stato rimosso il sovraccarico di testo (stringa). Consulta i sample aggiornati per informazioni sull'utilizzo. (If63ab, b/146478620, b/146482131)
  • runOnIdleCompose e runOnUiThread ora sono funzioni globali invece di metodi su ComposeTestRule. (Icbe8f)

Contributo esterno

  • Rimuovere le API non necessarie, come Looper e Handler, dal livello di porting del runtime di Compose (I6847d)
  • È stata ritirata la funzionalità Flow<T>.collectAsState() senza valore iniziale. Utilizza StateFlow<T> o passa un valore iniziale esplicito. (I63f98, b/157674865)