Runtime di scrittura

Componenti di base fondamentali del modello di programmazione e della gestione dello stato di Compose, nonché del runtime di base per il plug-in di Compose Compiler da utilizzare come target.
Aggiornamento più recente Release stabile Candidato per la release Versione beta Release alpha
17 aprile 2024 1.6.6 - - 1.7.0-alpha07

Struttura

Compose è una combinazione di 7 ID gruppo Maven all'interno di androidx. Ogni gruppo contiene un sottoinsieme specifico di funzionalità, ciascuna con il proprio set di note di rilascio.

Questa tabella illustra i gruppi e fornisce i link a ciascun insieme di note di rilascio.

RaggruppaDescrizione
compose.animationCreare animazioni nelle applicazioni Jetpack Compose per arricchire l'esperienza utente.
compose.compilerTrasforma le funzioni @Composable e abilita le ottimizzazioni con un plug-in di compilazione Kotlin.
compose.foundationScrivi applicazioni Jetpack Compose con componenti di base pronti all'uso ed estendi le basi per creare i componenti del tuo sistema di progettazione.
compose.materialCrea UI di Jetpack Compose con componenti Material Design pronti per l'uso. Si tratta del punto di accesso di livello superiore di Compose, progettato per fornire componenti corrispondenti a quelli descritti su www.material.io.
compose.material3Crea UI di Jetpack Compose con i componenti di Material Design 3, la prossima evoluzione di Material Design. Material 3 include temi e componenti aggiornati e funzionalità di personalizzazione di Material You, come il colore dinamico, ed è progettato per essere coerente con il nuovo stile visivo e la UI di sistema di Android 12.
compose.runtimeComponenti di base fondamentali del modello di programmazione e della gestione dello stato di Compose, nonché del runtime di base per il plug-in di Compose Compiler da utilizzare come target.
compose.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 su Compose, devi aggiungere il Repository Maven di Google al tuo progetto. Per ulteriori informazioni, consulta il Repository Maven di Google.

Aggiungi le dipendenze per gli artefatti necessari nel file build.gradle per l'app o il modulo:

Trendy

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

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.12"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

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

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.12"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Per ulteriori informazioni sulle dipendenze, vedi Aggiungere dipendenze build.

Feedback

Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se rilevi nuovi problemi o hai idee per migliorare la libreria. Dai un'occhiata ai problemi esistenti in questa libreria prima di crearne una nuova. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.

Crea un nuovo problema

Per ulteriori informazioni, consulta la documentazione di Issue Tracker.

Tracciamento runtime versione 1.0

Versione 1.0.0-beta01

29 novembre 2023

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

Versione 1.0.0-alpha05

15 novembre 2023

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

Correzioni di bug

  • Blocca le dipendenze alle versioni stabili supportate più basse (ad es.Composer-runtime e tracing-perfetto). Consente di risolvere un problema per cui il tracciamento del runtime di Compose permetteva di inserire nell'app una versione più recente del runtime di Composer.

Versione 1.0.0-alpha04

23 agosto 2023

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

Nuove funzionalità

  • Compatibile con le ultime versioni di Benchmark e Tracciamento Perfetto, abilitando il supporto per il tracciamento della composizione all'avvio dell'app (avvio a freddo), ad esempio in AndroidX Benchmark e Android Studio (a partire da Hedgehog Beta 2).

Modifiche alle API

  • Rinominato androidx.tracing.perfetto.Trace in androidx.tracing.perfetto.PerfettoSdkTrace. (I44af8).
  • Rendere le API dell'SDK Tracciamento Perfetto coerenti con android.os.Trace. (I73ba0, b/282199917)
  • Prerequisiti per il tracciamento all'avvio dell'app. (Iad890)
  • Sono stati uniti i file API pubblici e sperimentali (I0f2e1, b/278769092)

Versione 1.0.0-alpha02

8 febbraio 2023

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

Nuove funzionalità

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

Versione 1.0.0-alpha01

7 settembre 2022

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

Nuove funzionalità

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

Versione 1.7

Versione 1.7.0-alpha07

17 aprile 2024

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

Nuove funzionalità

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

Modifiche alle API

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

Correzioni di bug

  • È stata corretta l'unione di readObserver negli snapshot nidificati. Di conseguenza, gli stati derivati nidificati potrebbero non essere considerati validi se utilizzati all'interno di un elemento 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

  • Correggi l'invio di singoli valori per la gestione di providesDefault (538f45)
  • Evita un deadlock nel ricompositore che accede all'orologio del frame (07e5c6).

Versione 1.7.0-alpha05

20 marzo 2024

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

Correzioni di bug

  • Cancella le modifiche recenti alla composizione disattivata (5950bc)

Versione 1.7.0-alpha04

6 marzo 2024

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

Miglioramenti del rendimento

  • Chiama Snapshot.current una volta per ogni valutazione dello stato derivato (ee7daf)
  • Leggi currentRecord una volta per osservazione nella composizione (b882b2)
  • Rimuovi l'allocazione accidentale dell'iteratore in snapshotFlow (231e56)
  • Abilita nonSkippingGroupOptimization per le librerie di scrittura. Questo fa sì che il codice generato per tutte le funzioni componibili non riavviabili in Androidx sia più efficiente. In futuro prevediamo di abilitare questa funzionalità per impostazione predefinita. I(acbc08)

Versione 1.7.0-alpha03

21 febbraio 2024

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

Modifiche alle API

  • Introduci un gruppo di sostituzione per migliorare il rilevamento delle modifiche (0941b5)

Miglioramenti del rendimento

  • Migliora l'allocazione della memoria durante il rilevamento delle modifiche (53e7fd)
  • Correzione di una perdita di memoria nel compositore (0e097d)
  • Utilizza ScopeMap per superare le invalidazioni durante la ricomposizione (e19a7e)
  • Mappa delle invalidazioni di Optimize per mantenere solo gli stati derivati (f11c44)
  • Sostituisci gli utilizzi di IdentityArraySet 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

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

Miglioramenti del rendimento

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

Versione 1.7.0-alpha01

24 gennaio 2024

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

Ottimizzazioni del rendimento

  • Aggiungere la possibilità di creare slot dopo aver aggiunto un gruppo secondario (b5960c)
  • Ottimizza la registrazione delle modifiche degli stati delle istantanee (28c3fe)
  • Attiva modalità Ignora forte (ed1766)

Correzioni di bug

  • Tieni in considerazione il meta parametro predefinito in intrinse ricorda (096665)
  • Rendi currentCompoundHashKey unico in più casi (d4a872)
  • Realizza i gruppi all'uscita dalla chiamata di funzione in linea (2a90fc)

Versione 1.6

Versione 1.6.6

17 aprile 2024

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

Versione 1.6.5

3 aprile 2024

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

Versione 1.6.4

20 marzo 2024

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

Versione 1.6.3

6 marzo 2024

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

Versione 1.6.2

21 febbraio 2024

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

Versione 1.6.1

7 febbraio 2024

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

Correzioni di bug

  • Chiama il callback onRelease nello stesso ordine usato per 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à

  • Ripeti la generazione delle eccezioni ingerite durante il loop di ricomposizione (4dff9a)

Ottimizzazioni del rendimento

  • Ottimizza la registrazione delle modifiche degli stati delle istantanee (28c3fe)
  • Ottimizza rememberSaveable (f01d79)
  • Rimanda la rilettura degli stati derivati fino alla registrazione delle modifiche (f38099)
  • Migliora la fornitura dei valori locali della composizione (a337ea)

Correzioni di bug

  • Correggi la perdita di memoria della tabella degli slot (73fcfe)
  • Salta la ricomposizione delle sottocomposizioni che verranno rimosse. (Ieeb99, b/254645321).
  • Attiva RememberObserver cicli di vita solo quando è archiviato nel calcolo del promemoria. (f6b4dc)
  • Limita l'acquisizione di $dirty alle lambda in linea. (acfca0)
  • Correggi i contenuti spostabili a volte che ricevono composizioni errate. (035cd6)

Versione 1.6.0-rc01

10 gennaio 2024

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

Versione 1.6.0-beta03

13 dicembre 2023

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

Versione 1.6.0-beta02

29 novembre 2023

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

Versione 1.6.0-beta01

15 novembre 2023

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

Modifiche alle API

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

Correzioni di bug

  • Utilizza la norma di riferimento per lo stato dell'ambito locale della composizione nel contesto. (83361c)
  • Limita l'acquisizione $dirty alle lambda in linea. (acfca0)
  • Correggi i contenuti spostabili a volte che ricevono composizioni errate. (035cd6)
  • Utilizza mappe hash più veloci senza allocazione in RecomposeScopeImpl. (D79494)
  • Usa ObjectIntMap in DerivedState. (21862e)
  • Usa IntRef per l'intero 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 RememberObserver cicli di vita solo quando è archiviato nel calcolo del promemoria. (f6b4dc)
  • Migliora le allocazioni nell'ordinamento degli elenchi di invalidità. (954d63)
  • Utilizza le nuove mappe senza allocazione in SnapshotStateObserver. (4303ce)
  • Cancella invalidazioni quando la composizione è disattivata. (e001be).

Versione 1.6.0-alpha07

4 ottobre 2023

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

Modifiche alle API

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

Versione 1.6.0-alpha06

20 settembre 2023

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

Versione 1.6.0-alpha05

6 settembre 2023

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

Versione 1.6.0-alpha04

23 agosto 2023

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

Nuove funzionalità

  • Ripeti la generazione delle eccezioni ingerite durante il loop di ricomposizione (4dff9a)

Modifiche alle API

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

Versione 1.6.0-alpha03

9 agosto 2023

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

Correzioni di bug

  • Correggi la nuova ottimizzazione di CompositionLocalProvider (3118e88)
  • Correggi il modo in cui i nodi di contenuti spostabili vengono disassemblati. (5e3d59b).

Versione 1.6.0-alpha02

26 luglio 2023

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

Nuove funzionalità e miglioramenti delle prestazioni

  • Ottimizza rememberSaveable (f01d79)
  • Rimanda la rilettura degli stati derivati fino alla registrazione delle modifiche (f38099)
  • Migliora la fornitura dei valori locali della composizione (a337ea)
  • SideEffect è contrassegnato come @ExplicitGroupsComposable per evitare di generare un gruppo. (I74815)
  • Evita di confrontare la composizione di mappe locali quando vengono riutilizzate (782071)

Modifiche alle API

  • È stato aggiunto un sovraccarico di casi speciali per CompositionLocalProviders che evita l'overhead utilizzato per velocizzare la fornitura di più valori, ma comporta l'overhead se si fornisce un singolo valore. (I6d640, b/288169379)

Correzioni di bug

  • Correggi la perdita di memoria della tabella degli slot (73fcfe)
  • Correggi la modalità di ripristino di rememberSaveable 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 ricomposizione delle sottocomposizioni che verranno rimosse. (Ieeb99, b/254645321).
  • Allocazioni ridotte durante l'applicazione degli snapshot. (I65c09)
  • Evita 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 alle API

  • Allocazioni rimosse nella ricomposizione, nelle animazioni dei colori e in AndroidComposeView. (Ib2bfa)
  • È stata aggiunta un'annotazione @StateFactoryMarker per contrassegnare le funzioni che creano stati e devono essere incluse in una chiamata remember. (I64550)
  • Aggiungi versioni primitive di State e MutableState (fb3d89)
  • Aggiunto Snapshot.isApplyObserverNotificationPending (I672a5)
  • Sono state aggiunte versioni primitive dell'API State, che consentono il monitoraggio di valori Int, Long, Float e Double negli oggetti State senza penalità per l'autoboxing. Per usarli, usa i nuovi metodi di fabbrica mutableIntState(Int), mutableFloatStateOf(Float) e così via. (I48e43).

Correzioni di bug

  • Salta la ricomposizione delle sottocomposizioni che verranno rimosse. (Ieeb99, b/254645321).
  • Non conservare il riferimento dello snapshot in ComposerImpl (0206f7)
  • Non applicare la composizione due volte (f5791b)
  • Assicurati l'annullamento della convalida per i valori dello stato derivato non inizializzato (aa2a92)
  • Chiama onEndChanges durante l'eliminazione della composizione. (62cc8c)
  • Risoluzione del problema dello spostamento di contenuti in una sottocomposizione (4beb41)
  • Correggi potenziali deadlock (c1a425 e 8edce0)
  • Il ricompositore creato per una finestra Android bloccherà ora le chiamate a withFrameNanos anziché a tutte le composizioni quando riceve una notifica ON_STOP. Questo significa che le finestre associate alle attività interrotte continueranno a ricomporsi per le modifiche ai dati, ma le animazioni o qualsiasi altro chiamante di withFrameNanos verranno bloccate. (Id9e7f, b/240975572).
  • Esegui i callback di disattivazione per LayoutNode prima di eliminare gli effetti 3784073
  • Risolvere il problema dei flag modificati per le lambda riavviate ea81df9
  • Correggi la regressione della modifica in tempo reale per Composable con nodi 73fd4d8
  • ON_STOP deve mettere in pausa la trasmissione dell'orologio al frame anziché la composizione ae276f1
  • Annulla gli ambiti SnapshotStateObserver per gli stati derivati non modificati 84d9b1c
  • Risolvere il potenziale deadlock durante lo smaltimento delle composizioni 28761fc
  • Risolvere il problema dello spostamento di contenuti in una sottocomposizione 92d4156
  • Correggere i flag modificati per le lambda riavviate (8a03e9)
  • Esegui i callback di disattivazione per LayoutNode prima di eliminare gli effetti (8b0fa4)
  • Correggi endToMarker() quando termini i gruppi di nodi. (d71d980)
  • Usa il gruppo SlotWriter corrente per verificare la disattivazione (a0b518b)
  • Rimuovi il fill in SlotTable.moveSlotGapTo() e chiudilo in modo che sia chiuso (81f9935)
  • Correggere le invalidazioni mancanti durante lo spostamento di contenuti spostabili (1d7c024)
  • Correggere le invalidazioni immediate per i contenuti mobili spostati (8676618)

Miglioramenti del rendimento

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

Versione 1.5.0-rc01

26 luglio 2023

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

Correzioni di bug

  • Rimanda la rilettura degli stati derivati fino alla registrazione delle modifiche (f38099)

  • È disponibile un'ispezione facoltativa per consigliare di eseguire la migrazione delle chiamate di mutableStateOf() ai tipi specializzati corrispondenti per le primitive. L'ID lint è AutoboxingStateCreation. In precedenza, questa ispezione era abilitata per impostazione predefinita per tutti i progetti. Per visualizzare questo avviso nell'editor di Android Studio e negli output lint del progetto, cambia la gravità da informativa ad avviso (o superiore) 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 ricomposizione delle sottocomposizioni che verranno rimosse. (Ieeb99, b/254645321).

Versione 1.5.0-beta02

7 giugno 2023

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

Miglioramenti del rendimento

  • Evita di calcolare readableHash 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 alle API

  • Allocazioni rimosse nella ricomposizione, nelle animazioni a colori e in AndroidComposeView (Ib2bfa)
  • È stata aggiunta un'annotazione @StateFactoryMarker per contrassegnare le funzioni che creano stati e devono essere incluse in una chiamata remember. (I64550)
  • Aggiungi versioni primitive di State e MutableState (fb3d89)
  • Aggiunto Snapshot.isApplyObserverNotificationPending (I672a5)

Correzioni di bug

  • Allocazioni ridotte (I65c09, d7ea77, 727974 e 445808)
  • Non conservare il riferimento dello snapshot in ComposerImpl (0206f7)
  • Annullamento rapido di Scrivi CoroutineScopes (a55362 e bd382f)
  • Non applicare la composizione due volte (f5791b)
  • Assicurati l'annullamento della convalida per i valori dello stato derivato non inizializzato (aa2a92)
  • Chiama onEndChanges durante l'eliminazione della composizione. (62cc8c)
  • Risoluzione del problema dello spostamento di contenuti in una sottocomposizione (4beb41)
  • Correggi potenziali deadlock (c1a425
  • ON_STOP deve mettere in pausa la trasmissione dell'orologio al frame anziché la composizione (f4a2d1)
  • Correggere i flag modificati per le lambda riavviate (8a03e9)
  • Esegui i callback di disattivazione per LayoutNode prima di eliminare gli effetti (8b0fa4)

Contributi esterni

  • Aggiunto Snapshot.isApplyObserverNotificationPending (I672a5)

Versione 1.5.0-alpha04

10 maggio 2023

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

Modifiche alle API

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

Correzioni di bug

  • Chiama onEndChanges durante l'eliminazione della composizione. I nodi di stato attivo rimossi durante Composition.dispose si stanno iscrivendo a onEndChanges per reimpostare lo stato attivo.(03d4a47)

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

    La precedente logica di osservazione dello stato derivato in SnapshotStateObserver era in grado di eliminare le vecchie dipendenze e di leggere il nuovo valore. Ciò ha portato a una gara con l'annullamento della convalida in uno stato di cancellazione, in cui l'annullamento della convalida delle dipendenze non era registrato.

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

Versione 1.5.0-alpha03

19 aprile 2023

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

Modifiche alle API

  • Il ricompositore creato per una finestra Android bloccherà ora le chiamate a withFrameNanos anziché a tutte le composizioni quando riceve una notifica ON_STOP. Questo significa che le finestre associate alle attività interrotte continueranno a ricomporsi per le modifiche ai dati, ma le animazioni o qualsiasi altro chiamante di withFrameNanos verranno bloccate. (Id9e7f, b/240975572).

Correzioni di bug

  • Correggi il potenziale deadlock nell'elenco di snapshot e nella mappa 5c1a425
  • Esegui i callback di disattivazione per LayoutNode prima di eliminare gli effetti 3784073
  • Risolvere il problema dei flag modificati per le lambda riavviate ea81df9
  • Correggi la regressione della modifica in tempo reale per Composable con nodi 73fd4d8
  • ON_STOP deve mettere in pausa la trasmissione dell'orologio al frame anziché la composizione ae276f1
  • Annulla gli ambiti SnapshotStateObserver per gli stati derivati non modificati 84d9b1c
  • Risolvere il potenziale deadlock durante lo smaltimento delle composizioni 28761fc
  • Risolvere il problema dello spostamento di contenuti in una sottocomposizione 92d4156

Versione 1.5.0-alpha02

5 aprile 2023

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

Nuove funzionalità

  • L'operatore getValue di Kotlin ora può essere componibile (f174f6e)

Correzioni di bug, miglioramenti delle prestazioni

  • Sovrascrivi i record degli oggetti di stato con record di stato non accessibili (c986960)
  • Usa il compositore dell'ambito corretto quando realizzi i gruppi (9a5e5b6)
  • Correggi endToMarker() quando termini i gruppi di nodi. (d71d980)
  • Usa il gruppo SlotWriter corrente per verificare la disattivazione (a0b518b)
  • Utilizza IdentityArraySet per archiviare le invalidazioni delle istantanee (7f60cca)
  • Rimuovi il fill in SlotTable.moveSlotGapTo() e chiudilo in modo che sia chiuso (81f9935)
  • Correggere le invalidazioni mancanti durante lo spostamento di contenuti spostabili (1d7c024)
  • Correggere le invalidazioni immediate per i contenuti mobili spostati (8676618)
  • Riduci le allocazioni per le osservazioni degli snapshot (5bc535f)

Versione 1.5.0-alpha01

22 marzo 2023

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

Nuove funzionalità

  • Aggiunge Modifier.Node#coroutineScope per consentire a Modifier.Nodes di avviare 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

  • Correggi il potenziale deadlock nell'elenco di snapshot e nella mappa 2eb6570

  • L'aggiunta di contenuto a un SnapshotStateList o SnapshotStateMap può riscontrare un deadlock se la modifica è in corso con una scrittura diretta nel record di stato. Questa operazione è stata resa molto più probabile con le modifiche introdotte da 93fcae828b che utilizzano le scritture dirette per rilasciare i record inutilizzati.

  • I blocchi sono ora ordinati in modo che non si tenti di eseguire un blocco dell'istantanea quando viene mantenuto un blocco mappa o elenco.

Versione 1.4.1

5 aprile 2023

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

Correzioni di bug

  • Correggi endToMarker() quando termini i gruppi di nodi. d71d980

Versione 1.4.0

22 marzo 2023

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

Modifiche importanti dalla versione 1.3.0

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

Correzioni di bug e miglioramenti delle prestazioni

  • Cancella entrambi gli indici di ambito in SnapshotStateObserver 29f4a3e
  • Aggiunta dei gruppi necessari nel corpo degli annunci lambda non ignorabili 7d06752
  • Migliora le caratteristiche di riferimento della memoria dello stato degli snapshot 93fcae8
  • Rimuovere il pugilato nelle ricerche locali relative alle composizioni 0875717
  • Utilizza la chiave corretta per i gruppi di nodi non riutilizzabili 6388d8d
  • Proteggi SnapshotStateObserver dalle applicazioni ricorsive e simultanee 98cb6ba
  • È stato aggiunto un controllo dei limiti dell'indice di controllo nel metodo "get" di IdentityArraySet 35a77d3
  • Aggiorna il modulo di scrittura per utilizzare le estensioni ViewTreeLifecycleOwner 21c2122
  • Invia notifiche di applicazione al termine del frame per il ricompositore. 98f2641
  • Correggi l'arresto anomalo di un indice oltre i limiti durante l'annullamento del ricompositore 8f8656f
  • Forza sempre la ricomposizione se i fornitori principali di composizione hanno modificato 9526fcc
  • Tolleranza del ricompositore per i job annullati a55f7ed
  • Migliora la gestione delle invalidazioni per un numero elevato di compositori 9b7ed67
  • Risoluzione del problema durante la generazione dei gruppi di chiusura per i resi non locali b6f590c

Versione 1.4.0-rc01

8 marzo 2023

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

Correzioni di bug

Versione 1.4.0-beta02

22 febbraio 2023

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

Versione 1.4.0-beta01

8 febbraio 2023

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

Modifiche alle API

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

Correzioni di bug

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

Versione 1.4.0-alpha05

25 gennaio 2023

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

Modifiche alle API

  • Più tipo/nullabilità delle funzioni incorporate/deprecateed-hidden (I24f91)

Versione 1.4.0-alpha04

11 gennaio 2023

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

Modifiche alle API

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

Correzioni di bug

  • Proteggi SnapshotStateObserver dalle applicazioni ricorrenti e simultanee (d902fb)

Versione 1.4.0-alpha03

7 dicembre 2022

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

Modifiche alle API

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

Correzioni di bug

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

Versione 1.4.0-alpha02

9 novembre 2022

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

Versione 1.4.0-alpha01

24 ottobre 2022

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

Modifiche alle API

  • SnapshotStateList e SnapshotStateMap ora prevedono implementazioni esplicite di toList() e toMap() nel rispetto della privacy. Questi metodi restituiscono i contenuti attuali senza crearne una copia, in quanto restituiscono i dati interni immutabili utilizzati per archiviare i contenuti. Questo valore può essere utilizzato, ad esempio, per produrre un flusso di valori 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

  • Aggiornato per supportare androidx.compose.ui 1.3.2

Versione 1.3.1

9 novembre 2022

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

Versione 1.3.0

24 ottobre 2022

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

Modifiche importanti dalla versione 1.2.0

Gestione delle eccezioni / Assistenza per la modifica dal vivo

Tracciamento della composizione

API Composable Reflection

Correzioni runtime

Sistema 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

  • ArrayIndexOutOfBoundsException corretto proveniente dalla tabella degli slot (b/249076084)

Versione 1.3.0-beta03

21 settembre 2022

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

Cambiamento che provoca un'interruzione del comportamento

  • Il parametro in remember e rememberCoroutineScope è stato modificato in crossinline. Verrà segnalato un errore per i ritorni anticipati anziché consentire un resoconto anticipato che comporterà la segnalazione di un errore interno successivo.
  • Questa modifica può causare la segnalazione di nuovi errori del compilatore che richiedono la rimozione dei resi non locali dai lambda passati a queste funzioni. (Ibea62).

Versione 1.3.0-beta02

7 settembre 2022

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

Correzioni di bug

Versione 1.3.0-beta01

24 agosto 2022

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

Modifiche alle API

  • Un metodo find è stato aggiunto a CompositionData per consentire agli strumenti per sviluppatori che utilizzano questa API di trovare rapidamente un sottogruppo di composizioni usando la sua identità. (I5794f)

Versione 1.3.0-alpha03

10 agosto 2022

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

Versione 1.3.0-alpha02

27 luglio 2022

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

Modifiche alle API

  • ComposerKt.traceEventStart(Int, String) aggiunto nuovamente per la compatibilità con le versioni precedenti (I6e6de)

Versione 1.3.0-alpha01

29 giugno 2022

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

Modifiche alle API

  • Spostamento delle funzionalità dell'utilità al runtime (I4f729)

Versione 1.2

Versione 1.2.1

10 agosto 2022

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

Correzioni di bug

  • Perdita di memoria corretta: elimina gli snapshot nidificati creati da snapshot trasparenti b/239603305

Versione 1.2.0

27 luglio 2022

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

Modifiche importanti dal giorno 1.1.0

  • Compose Runtime ha introdotto alcune funzionalità nella versione 1.2.0, oltre a molte correzioni di bug di stabilizzazione. La nuova funzionalità più significativa è stata l'introduzione dell'movableContentOfAPI, che può essere utilizzata per consentire un'UX complessa, come le transizioni di elementi condivisi. L'API movableContentOf converte un lambda componibile in un lambda che sposta lo stato e i nodi corrispondenti in qualsiasi nuova località chiamata. Quando la chiamata precedente esce dalla composizione, lo stato viene temporaneamente conservato e se una nuova chiamata alla funzione lambda entra nella composizione, lo stato e i nodi associati vengono spostati nella posizione della nuova chiamata. Se non viene aggiunta alcuna nuova chiamata, lo stato viene rimosso definitivamente e ricorda che gli osservatori ricevono una notifica.

  • Se una funzione lambda movableContentOf viene chiamata più volte nella stessa composizione, vengono creati un nuovo stato e nodi per ogni chiamata e, man mano che le chiamate escono dalla composizione e le nuove chiamate entrano, lo stato viene spostato dalla prima chiamata in uscita a quella in entrata nell'ordine in cui vengono chiamate. Tutti gli stati non rivendicati dalle nuove chiamate vengono rimossi definitivamente.

  • Oltre a questa e ad altre nuove funzionalità, è stato dedicato molto tempo alla stabilizzazione del sistema dello stato di runtime e snapshot. Sono state rimosse diverse perdite di memoria e sono stati ottimizzati i percorsi di codice.

  • Di seguito è riportato un elenco riepilogativo delle modifiche:

Nuove funzionalità in 1.2

Rendimento a 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

  • Le osservazioni dello stato derivato sono state precedentemente rimosse incondizionatamente dall'ambito di ricomposizione e dalla composizione, il che ha rotto altri ambiti che potrebbero ancora osservare lo stato derivato. Questa modifica rimuove le istanze dello stato derivato solo se non è più osservata da altri ambiti. (b/236618362)

Versione 1.2.0-rc02

22 giugno 2022

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

Versione 1.2.0-rc01

15 giugno 2022

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

Modifiche alle API

  • Le interfacce nelle librerie di scrittura ora vengono create utilizzando i metodi di interfaccia predefinita jdk8 (I5bcf1)

Versione 1.2.0-beta03

1° giugno 2022

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

Versione 1.2.0-beta02

18 maggio 2022

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

Versione 1.2.0-beta01

11 maggio 2022

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

Nuove funzionalità

  • Questa è la prima versione beta 1.2.

Modifiche alle API

  • Snapshot.unsafeEnter/unsafeLeave sperimentale aggiunto (I108f3)
  • API Snapshot.asContextElement() sperimentale aggiunta (Iff072)
  • Ora è possibile utilizzare l'annotazione @ComposableTarget e le annotazioni contrassegnate da @ComposableTargetMarker nell'ambito del file utilizzando il prefisso @file. Se utilizzi un'annotazione di destinazione nell'ambito del file, il compilatore presumerà che tutte le funzioni componibili nel file siano destinate all'applicatore associato. Ad esempio, l'uso di @file:UiComposable dichiara che tutte le funzioni @Composable hanno come target l'applicatore dell'interfaccia utente di Compose. Una funzione che deve scegliere come target un altro applicatore deve fornire esplicitamente l'annotazione dell'indicatore di destinazione per l'applicatore desiderato. (I40804)

Versione 1.2.0-alpha08

20 aprile 2022

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

Modifiche alle API

  • Elemento TracingInProgress aggiunto all'interfaccia di CompositionTracer. (Ic6f12)
  • Aggiungi recomposeScopeIdentity a Composer (I0c873)
  • API di tracciamento limitate (Composer.setTracer) a OptIn(InternalComposeTracingApi). (I9187f)
  • È stato aggiunto ResuableContentHost, che consente un migliore controllo sulla durata dello stato creato per i contenuti riutilizzabili. Ad esempio, se una sottocomposizione non è temporaneamente in uso, il contenuto può essere disattivato, causando l'eliminazione di tutto lo stato memorizzato nella composizione e attivando, ad esempio, tutti gli effetti usa e getta. (I2c0f2, b/220322704).

Versione 1.2.0-alpha07

6 aprile 2022

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

Modifiche alle API

  • La nuova funzione Snapshot.withoutReadObservation { ... } è stata aggiunta. Consente agli utenti di eseguire il lambda passato senza iscriversi alle modifiche dei valori di stato letti durante questo blocco. Potrebbe esserti utile nei casi d'uso in cui vuoi trarre vantaggio dalla scrittura/lettura sicura per i thread basata su snapshot, ma vuoi poter leggere il valore senza causare una ricomposizione o una nuova misurazione inutili. (I9f365, b/214054486).

Versione 1.2.0-alpha06

23 marzo 2022

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

Versione 1.2.0-alpha05

9 marzo 2022

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

Contributi esterni

  • Aggiornato per utilizzare Kotlinx coroutines 1.6.0 (I3366d)

Versione 1.2.0-alpha04

23 febbraio 2022

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

Modifiche alle API

  • Sono stati aggiunti i criteri ComposableTarget, ComposableTargetMarker e ComposableOpenTarget che consentono di generare report in fase di compilazione per capire quando una funzione componibile viene chiamata come target di un'applicazione che non era stata progettata.

    Nella maggior parte dei casi le annotazioni possono essere dedotte dal plug-in di Composer, pertanto l'utilizzo diretto di queste annotazioni dovrebbe essere raro . I casi che non possono essere dedotti includono la creazione e l'utilizzo di un applicatore personalizzato, funzioni componibili astratte (ad esempio i metodi di interfaccia), campi o variabili globali che sono lambda componibili (vengono dedotte variabili e parametri locali) o l'utilizzo di ComposeNode o di funzioni componibili correlate.

    Per gli applicatori personalizzati, le funzioni componibili che chiamano ComposeNode o ReusableComposeNode devono aggiungere un'annotazione CompoableTarget per la funzione ed eventuali tipi di parametri lambda componibili. Tuttavia, è consigliabile creare un'annotazione che sia annotata con ComposableTargetMarker e poi utilizzare l'annotazione contrassegnata al posto direttamente di ComposableTarget. Un'annotazione componibile contrassegnata con ComposableTargetMarker equivale a una ComposbleTarget con il nome completo della classe dell'attributo come parametro applier. 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 alle API

  • È stato aggiunto un elemento movableContentOf, che converte un lambda componibile in un lambda che sposta lo stato e i nodi corrispondenti in qualsiasi nuova località chiamata. Quando la chiamata precedente esce dalla composizione, lo stato viene temporaneamente conservato e se una nuova chiamata al lambda entra nella composizione, lo stato e i nodi associati vengono spostati nella posizione della nuova chiamata. Se non viene aggiunta alcuna nuova chiamata, lo stato viene rimosso definitivamente e ricorda che gli osservatori vengono avvisati.

    Se una lambda movableContentOf viene chiamata più volte nella stessa composizione, vengono creati un nuovo stato e nodi per ogni chiamata e, man mano che le chiamate escono dalla composizione e entrano nuove chiamate, lo stato viene spostato dalla prima chiamata in uscita a quella in entrata nell'ordine in cui vengono chiamate. Tutti gli stati non rivendicati dalle nuove chiamate vengono rimossi definitivamente. (Ib4850)

  • È stata aggiunta un'API di tracciamento alla composizione per abilitare gli strumenti per fornire un tracciamento più dettagliato delle funzioni componibili. Il compilatore ora genera chiamate all'API di tracciamento che includono informazioni di origine. (Ib0eb5).

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

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

Versione 1.2.0-alpha02

26 gennaio 2022

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

Versione 1.2.0-alpha01

12 gennaio 2022

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

Modifiche alle API

  • Campo identity aggiunto a CompositionData per la generazione di ID invarianti in Layout Inspector. (Ic116e)

Aggiornamenti delle dipendenze

  • Ora dipende da Kotlin 1.6.10.

Versione 1.1

Versione 1.1.1

23 febbraio 2022

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

Correzioni di bug

  • Correggi NullPointerException all'indirizzo 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)
  • RTL corretto in LazyVerticalGrid (aosp/1931080, b/207510535)

Versione 1.1.0

9 febbraio 2022

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

Modifiche importanti dalla versione 1.0.0

  • Supporto stabile per l'effetto scorrimento orizzontale di Android 12
  • Miglioramenti alle dimensioni del touch target
  • Tieni presente che, rispetto a Compose 1.0, i componenti Material espanderanno lo spazio di layout in modo da rispettare le linee guida sull'accessibilità di Material per le dimensioni del touch target. Ad esempio, il touch target del pulsante si espanderà fino a una dimensione minima di 48x48dp, anche se hai impostato le dimensioni del pulsante su un valore inferiore. In questo modo Compose Material allo stesso comportamento dei componenti di Material Design, offrendo un comportamento coerente se combini le visualizzazioni e Compose. Inoltre, questa modifica garantisce che quando crei la tua UI utilizzando i componenti di Compose Material, verranno soddisfatti i requisiti minimi per l'accessibilità del touch target.
  • Supporto stabile per Navigazione
  • Assegna una serie di API precedentemente sperimentali alla versione stabile
  • Supporto per versioni più recenti di Kotlin

Versione 1.1.0-rc03

26 gennaio 2022

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

Correzioni di bug

  • Aggiornamento per supportare il materiale di Compose 1.1.0-rc03

Versione 1.1.0-rc01

15 dicembre 2021

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

Versione 1.1.0-beta04

1° dicembre 2021

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

Nuove funzionalità

  • Aggiornato per essere compatibile con Kotlin 1.6.0

Versione 1.1.0-beta03

17 novembre 2021

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

Versione 1.1.0-beta02

3 novembre 2021

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

Modifiche alle API

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

Versione 1.1.0-beta01

27 ottobre 2021

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

Versione 1.1.0-alpha06

13 ottobre 2021

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

Modifiche alle API

  • InternalCompilerApi rimosso dai metodi Composer che devono essere chiamati cross-module (I1aa0b)
  • Recomposer.state è stato deprecato e sostituito da Recomposer.currentState per cambiare il proprio tipo in StateFlow (Ic2ab3, b/197773820)

Versione 1.1.0-alpha05

29 settembre 2021

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

Versione 1.1.0-alpha04

15 settembre 2021

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

Versione 1.1.0-alpha03

1° settembre 2021

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

Nuove funzionalità

  • Il compilatore di Compose ora supporta le versioni precedenti del runtime di Compose (1.0). Prima di questa modifica, il compilatore di Compose era compatibile solo con il runtime di Compose della stessa versione o successiva. Dopo questa modifica, il compilatore di Compose è compatibile con una versione precedente di Compose Runtime (1.0). (aosp/1796968).
  • Scrittura 1.1.0-alpha03 aggiornata in modo che dipendesse da 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

  • Risolto il problema di monitoraggio degli arresti anomali delle istanze derivateStateOf. (aosp/1792247)

Versione 1.0.4

13 ottobre 2021

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

Aggiornamenti delle dipendenze

  • Aggiornato in modo da dipendere da Kotlin 1.5.31

Versione 1.0.3

29 settembre 2021

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

Aggiornamenti delle dipendenze

  • Aggiornato in modo da dipendere da Kotlin 1.5.30

Versione 1.0.2

1° settembre 2021

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

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

Versione 1.0.1

4 agosto 2021

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

Aggiornamenti delle dipendenze

  • Aggiornato in modo che dipende da Kotlin 1.5.21.

Versione 1.0.0

28 luglio 2021

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

Funzionalità principali della versione 1.0.0

Questa è la prima release stabile di Compose. Consulta il blog ufficiale di Compose Release per ulteriori dettagli.

Problemi noti

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

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

    Per risolvere il problema, aumenta temporaneamente il valore minSdkVersion a 24+ nel file build.gradle. Questo problema verrà risolto nella prossima versione di Android Studio Bumblebee e 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 SnapshotStateObservationr che causavano errori NullPointerExceptions. (aosp/1763445, aosp/1758105, b/192677711)
  • Risolti i problemi relativi agli snapshot di runtime che causano l'arresto di java.lang.IllegalStateException: Reading a state that was created after the snapshot was taken or in a snapshot that has not yet been applied. (b/193006595, b/192570897)

Versione 1.0.0-rc01

1° luglio 2021

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

Versione 1.0.0-beta09

16 giugno 2021

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

Regole del profilo aggiunte

In questa release sono state aggiunte regole del profilo ai seguenti moduli di composizione (I14ed6):

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

Che cosa sono le regole del profilo?

  • Le regole del profilo per una libreria sono specificate in un file di testo baseline-prof.txt che si trova in src/main o nella directory equivalente. Il file specifica una regola per riga, dove una regola in questo caso è un pattern per la corrispondenza con metodi o classi della libreria. La sintassi di queste regole è un soprainsieme del formato del profilo ART leggibile che viene utilizzato quando si utilizza adb shell profman --dump-classes-and-methods .... Queste regole assumono una delle due forme per il targeting di metodi o classi.

  • Una regola del metodo avrà il seguente pattern:

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

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

  • <CLASS_DESCRIPTOR> è il descrittore della classe a cui appartiene il metodo scelto come target. Ad esempio, la 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 restituiti del metodo. Ad esempio, il metodo fun isPlaced(): Boolean su LayoutNode ha la firma isPlaced()Z.

  • Questi pattern possono includere caratteri jolly (**, * e ?) in modo che una singola regola includa più metodi o classi.

A cosa servono le regole?

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

  • Un metodo con il flag S indica che si tratta di un metodo che viene richiamato all'avvio e deve essere compilato in anticipo per evitare i costi di compilazione e interpretazione del metodo all'avvio.

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

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

Come funziona?

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

Versione 1.0.0-beta08

2 giugno 2021

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

Modifiche alle API

  • State<T> ora è State<out T> (I69049)
  • Modifica dell'API ControlledComposition per abilitare la ricomposizione delle modifiche in una ricomposizione single pass. (Iaafd1, b/184173932).

Versione 1.0.0-beta07

18 maggio 2021

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

Modifiche alle API

  • Sono state aggiunte nuove API di compilazione di Composer che consentono di rimuovere le informazioni di origine generate dal compilatore durante la minimizzazione della sorgente. (Ia34e6).
  • Introduce ReusableContent, che tenterà di riutilizzare i nodi nei suoi contenuti invece di sostituirli quando la chiave viene modificata. Quando la chiave viene modificata, i valori precedenti nella tabella degli slot per i contenuti vengono ignorati, ad eccezione dei nodi generati e dei valori utilizzati per aggiornare i nodi.

    Introduce ReusableComposeNode che riutilizzerà il nodo emesso invece di sostituirlo come avviene per ComposeNode. (I1dd86).

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

Correzioni di bug

  • LazyColumn/Row ora manterrà attivi fino a 2 elementi precedentemente visibili (non eliminati) anche quando l'elemento viene già fatto scorrere. In questo modo il componente può riutilizzare le sottocomposizioni attive quando dovremo comporre un nuovo elemento per migliorare le prestazioni dello scorrimento. (Ie5555)

Versione 1.0.0-beta06

5 maggio 2021

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

Modifiche alle API

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

Versione 1.0.0-beta05

21 aprile 2021

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

Modifiche alle API

  • Rimosso @InternalComposeApi per la registrazione di letture e scritture di snapshot (Id134d)

Correzioni di bug

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

Versione 1.0.0-beta04

7 aprile 2021

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

Correzioni di bug

  • Prima di questa modifica, le funzioni componibili locali erano ignorabili in base ai relativi parametri. Dopo questa modifica, le funzioni componibili locali non verranno ignorate. Questa modifica è stata apportata perché è normale che le funzioni locali acquisiscano i parametri dall'elemento padre, il che causa un numero maggiore di bug.

    Per riassumere, considera l'esempio:

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

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

  • Risolto il problema per cui rememberSaveable() ripristinava il valore precedente quando veniva utilizzato con i parametri di input (I1b110, b/182403380)

Versione 1.0.0-beta03

24 marzo 2021

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

Modifiche alle API

  • L'API DefaultMonotonicFrameClock è deprecata. La chiamata a withFrameNanos o Recomposer.runRecomposeAndApplyChanges senza MonotonicFrameClock ora genererà IllegalStateException. (I4eb0d).

Versione 1.0.0-beta02

10 marzo 2021

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

Correzioni di bug

  • Applicare restrizioni all'uso pubblico delle API sperimentali (I6aa29, b/174531520)
  • Correzione del problema di rememberSaveable { mutableStateOf(0) } quando utilizzato all'interno di una destinazione di navigazione-compose. (I1312b, b/180042685, b/180701630)

Versione 1.0.0-beta01

24 febbraio 2021

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

Questa è la prima release di Compose 1.0.0 beta.

Modifiche alle API

  • Aggiungi Recomposer.runRecomposeConcurrentlyAndApplyChanges l'API sperimentale per la ricomposizione di composizioni invalidate fuori dal loop del frame principale. (I342d0)
  • Tutti i componibili contrassegnati con @ReadOnlyComposable vengono ora convalidati in fase di compilazione per garantire che effettuino chiamate solo ad altri @ReadOnlyComposables (I58961)
  • I defaultFactory per compositionLocalOf e staticCompositionLocalOf sono ora obbligatori anziché facoltativi.

    Questa modifica rimuove un potenziale errore di tipo per i tipi non null in cui non è stato fornito alcun valore di fabbrica predefinito. In precedenza, veniva fornito un riferimento nullo per un tipo non nullo.

    Per i tipi di valori null, ti consigliamo di fornire { null } come valore di fabbrica predefinito.

    Non è consigliabile utilizzare locali con tipi non null, a meno che non sia possibile specificare un valore predefinito ragionevole. Se non esiste un valore predefinito ragionevole, la lambda defaultFactory dovrebbe generare un'eccezione. Tuttavia, la generazione di un'eccezione significa che i consumatori locali avranno una dipendenza implicita dal fatto che l'eccezione non è applicata dal sistema dei tipi. (Ifbd2a).

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

  • L'elemento emptyContent() deprecato è stato rimosso. Usa invece il criterio {}. (Idb33f, b/179432510).

  • I fornitori sono stati rinominati in ComposeLocalProvider

    • Il costruttore Composizione non accetta più un parametro chiave ed è stato ritirato.
    • currentCompositeKeyHash è stata trasformata in una proprietà componibile di primo livello invece che in una funzione componibile di primo livello.
    • ComposeData e ResolutionGroup sono stati spostati nello spazio dei nomi androidx.compose.runtime.tooling
    • ComposableLambda è stata trasformata in un'interfaccia anziché in una classe concreta e non ha più parametri di tipo.
    • ComposableLambdaN è stata trasformata in un'interfaccia anziché in una classe concreta e non ha più parametri di tipo.
    • La funzione snapshotFlow è stata spostata nello spazio dei nomi androidx.compose.runtime
    • il metodo di unione di SnapshotMutationPolicy non è più sperimentale
    • La funzione di primo livello @TestOnly ClearRoots è stata rimossa. Non è più necessario.
    • Le funzioni keySourceInfoOf e resetSourceInfo sono state rimosse. Non sono più necessari.
    • Composer.collectKeySourceInformation è stato rimosso. Non è più necessario.
    • i metodi isjoinedKey, joinedKeyLeft e joinedKeyRight sono stati rimossi. Non sono più necessari.
    • Varie API di primo livello sono state spostate e riorganizzate in file diversi. A causa della semantica della classe dei file di Kotlin, questo compromette la compatibilità binaria, ma non la compatibilità delle origini, quindi non dovrebbe essere un problema per la maggior parte degli utenti.
    • (I99b7d, b/177245490).
  • SnapshotStateObservationr non è più sperimentale (Id2e6a)

  • Eliminate alcune API deprecate in precedenza (Ice5da, b/178633932)

  • Apportate le seguenti modifiche all'API Material:

    • È stato aggiunto il parametro contentPadding a Top/BottomAppBar per consentire la personalizzazione della spaziatura interna predefinita.
    • I parametri in BackdropScaffold sono stati riordinati in modo da seguire le linee guida dell'API per i parametri obbligatori che devono precedere i parametri facoltativi.
    • Parametro icon spostato in BottomNavigatorItem perché sia successivo a selected e onClick.
    • Parametro alwaysShowLabels rinominato in BottomNavigatorItem in alwaysShowLabel.
    • Parametri bodyContent rinominati in alcuni componenti in content.
    • Parametri riordinati in ButtonDefaults.buttonColors(). Tieni presente che, poiché il tipo dei parametri non è cambiato, questo non causerà un errore nel tuo codice. Assicurati di utilizzare parametri denominati o di aggiornare l'ordinamento manualmente, altrimenti il codice non funzionerà come in precedenza.
    • Parametro secondaryVariant aggiunto a darkColors(). Questo colore solitamente corrisponde a secondary nel tema scuro, ma garantisce coerenza e un'ulteriore personalizzazione.
    • Sono stati rimossi ElevationDefaults e animazioniElevation() dalla piattaforma API pubblica perché non erano di uso comune / non utili.
    • Il nome onValueChangeEnd in Slider è stato rinominato in onValueChangeFinished e l'elemento è nullo.
    • Parametro text rinominato in Snackbar in content per coerenza.
    • Il parametro contentPadding è stato aggiunto a DropdownMenuItem per consentire la personalizzazione della spaziatura interna predefinita e ha reso content un'estensione su RowScope.
    • Rinominato ModalDrawerLayout in ModalDrawer.
    • Rinominato BottomDrawerLayout 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 alle API

  • Il supporto per ViewGroups è stato rimosso da UiApplier. Gli elementi componibili emitView deprecati sono stati rimossi. (Ifb214)
  • ComposizioneReference rinominato in ComposeContext (I53fcb)
  • ComponenteActivity.setContent è stato spostato in androidx.activity.compose.setContent nel modulo androidx.activity:activity-compose. (Icf416)
  • L'API Snapshot è stata aggiornata per essere più coerente con le linee guida dell'API, oltre a nascondere le classi di implementazione interne dall'API pubblica. (Id9e32)
  • La ridenominazione degli ambienti Ambient è stata rinominata -> ComposeLocal. Gli ambienti un tempo si chiamavano AmbientFoo, ora i ComposeLocals si chiamavano LocalFoo. (I2d55d).
  • Sono stati rinominati Ambient in ComposeLocal e ambientOf / staticAmbientOf in solutionLocalOf / staticResolutionLocalOf. Questa modifica contribuisce a rendere più chiaro lo scopo di ComposeLocal: un meccanismo per fornire / recuperare valori locali di una composizione. Le istanze di ComposizioneLocal devono avere come prefisso Local, ad esempio val LocalFoo = solutionLocalOf { Foo() }. (Ia55b6)
  • takeMutableSnapshot e takeSnapshot sono diventati metodi companion di Snapshot. (I91f19).
  • @ComposableContract è stato ritirato e sostituito con tre annotazioni più specifiche.

    @ComposableContract(restartable = false) è diventato @NonRestartableComposable @ComposableContract(readonly = true) è diventato @ReadOnlyComposable @ComposableContract(preventCapture = true) è diventato @DisallowComposableCalls @ComposableContract(tracked = true) è stato rimosso. (I60a9d)

  • Le utilità emptyContent() e (@Composable () -> Unit).orEmpty() sono state ritirate in quanto non hanno più alcun impatto o valore positivo sulle prestazioni (I0484d)

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

  • Ora i ricompositori possono essere chiusi. I ricompositori chiusi continueranno a ricomporre fino al completamento delle coroutine secondarie della composizione. Recomposer.shutDown è stato rinominato per annullare il contrasto con la chiusura. (Ib6d76).

  • L'elemento compose:runtime-dispatch è ora deprecato. MonotonicFrameClock è ora disponibile in Composer:runtime e AndroidUiDispatcher in Composer:ui. (Ib5c36).

  • L'API target del plug-in di compilazione Compose è stata modificata in modo da utilizzare un'interfaccia anziché una classe concreta. Inoltre, l'interfaccia non usa più un parametro di tipo.

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

  • Lancio di SnapshotMutableState (Icfd03)

  • DisposableEffectDisposable è stato rinominato DisposaleEffectResult (Ica7c6)

  • Rimosso Recomposer.current(). [Abstract]ComposeView ora utilizza per impostazione predefinita i ricompositori con ambito a finestre creati in modo lento e gestiti dal ViewTreeLifecycleOwner per la finestra. I segni di graduazione dell'animazione basati su Ricomposizione e conFrameNanos vengono messi in pausa mentre il ciclo di vita dell'host viene interrotto. (I38e11).

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

  • DisposableEffectDisposable è stato rinominato DisposaleEffectResult (I3ea68)

Versione 1.0.0-alpha11

28 gennaio 2021

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

Modifiche alle API

  • onCommit, onDispose e onActive sono stati deprecati a favore delle API SideEffect e DisposableEffect (If760e)
  • L'API emit() e tutti gli overload sono stati deprecati e rinominati in ComposeNode. Le API sono identiche, ma solo un nome diverso per seguire le convenzioni di denominazione di Compose (I4137b)
  • invalidate e comScoreReference() ora sono deprecati a favore di currentRecomposeScope e promemoriaComposeReference. (I583a8)
  • RicordaOsservatore sostituisce ComposeLifecycleObservationr e ResolutionLifecycleEventsr che ora sono deprecati.

    RememberObserver 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, cosa che è e continua a essere la pratica consigliata. Tuttavia, se un riferimento è stato ricordato più di una volta in una composizione, onRemembered viene chiamato per ogni riferimento dove onEnter viene chiamato una sola volta. onEnter è stato chiamato più volte se l'oggetto è stato utilizzato in sottocomposizioni, ad esempio WithConstraints e Scaffold, rendendo la singola chiamata onEnter garantita inaffidabile ed è stato rimosso per RememberObserver.

    RememberObserver aggiunge onAbandoned che viene chiamato se l'istanza RememberObserver viene restituita dal callback passato a remember ma non è stato memorizzato nello stato di composizione e, di conseguenza, non riceverà mai la chiamata onRemembered. Ciò può verificarsi se un'eccezione termina la composizione prima del completamento o se la composizione viene eliminata perché lo stato sta producendo una composizione non è più attuale o non è più necessaria. Se l'istanza di RememberObserver che segue il suggerimento di riferimento singolo riportato sopra monitora una risorsa esterna, onForgotten e onAbandoned indicano entrambi che la risorsa non è più necessaria. Se l'oggetto sta monitorando i lavori avviati o le risorse allocate in onRemembered, onAbandoned può essere ignorato in quanto non verrà chiamato con la chiamata di onRemembered. (I02c36).

  • Non contrassegnare le funzioni di collectAsState() come incorporate (Ia73e4)

Correzioni di bug

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

Versione 1.0.0-alpha10

13 gennaio 2021

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

Grande cambiamento

  • La ristrutturazione dell'API di compilazione interna consente di raggruppare le modifiche ai nodi generati a seguito della composizione nella fase di applicazione delle modifiche, dopo il completamento di tutte le funzioni @Composable.

    Si tratta di una modifica che provoca un errore di comportamento, che potrebbe influire sul codice dell'applicazione poiché i nodi non sono più disponibili nelle API interne e sperimentali fino a quando non sono state applicate le modifiche. In genere, si può risolvere questo problema racchiudendo il codice con queste dipendenze in un componibile SideEffect per posticipare l'esecuzione del codice fino a quando i nodi non sono stati creati e inizializzati. (I018da)

Modifiche alle API

  • È stato aggiunto un modo per controllare se il ricompositore ha applicato le modifiche. (I1b3e2).
  • Espandi le API [Abstract]ComposeView per consentire il riciclo delle viste basate su Compose, smaltindo la loro composizione per ricrearla di nuovo in un secondo momento. Aggiungi API per l'installazione e il rilevamento di ricompositori con ambito a finestre e ComposeReferences per la creazione di composizioni figlio.

    Aggiungi ViewComposizioneStrategy per configurare la strategia di eliminazione della composizione di [Abstract]ComposeViews. Il comportamento predefinito è "Elimina allo scollegamento della finestra". (I860ab)

Correzioni di bug

  • Il ricompositore ora espone un flusso del suo stato attuale, consentendo di monitorarne l'attività e l'attività degli effetti associati. (Ifb2b9)
  • È ora possibile accedere all'evento keyEvent nativo tramite keyEvent.nativeKeyEvent (I87c57, b/173086397)

Versione 1.0.0-alpha09

16 dicembre 2020

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

Modifiche alle API

  • Sono stati rimossi SlotTable, SlotReader e SlotWriter dall'API pubblica. Questi sono stati contrassegnati come InternalComposeAPI in precedenza. Ora sono interne al modulo Compose.

    ComposeData e ResolutionGroup sono stati aggiunti come sostituzione dell'API ui-toolsing da utilizzare per estrarre le informazioni di composizione. Questi sono pubblici, ma non sono destinati a essere utilizzati al di fuori dell'API ui-tooling, in quanto forniscono le informazioni non elaborate che l'API ui-tooling interpreta (I31a9c)

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

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

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

    È stato aggiunto un nuovo metodo, insertBottomUp().

    Un applicatore inserisce nodi nella struttura ad albero modificata utilizzando insertTopDown() o insertBottomUp() a seconda di quale ha il rendimento migliore.

    Alcuni alberi, come LayoutNode e View, sono molto più efficienti da costruire dal basso verso l'alto. Prima di questa modifica, era necessario uno stack di inserti per implementare il modello dal basso verso l'alto, che doveva essere copiato in ogni applicatore che richiedeva una costruzione dal basso verso l'alto per migliorare le prestazioni. Con questa modifica, un Applier esegue l'override di 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 di proprietà che possono effettuare chiamate componibili. Il supporto per questo aspetto non verrà interrotto, ma la sintassi per dichiarare un getter di proprietà come @Composable sta cambiando.

    La sintassi ora deprecata per farlo era l'annotazione della proprietà stessa:

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

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

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

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

Correzioni di bug

  • AndroidProprietario inviato come interno (Ibcad0, b/170296980)
  • subcomposeInto(LayoutNode) è stato reso interno (Id724a)

Versione 1.0.0-alpha08

2 dicembre 2020

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

Modifiche alle API

  • È stato aggiunto il controllo lint per la denominazione e la posizione dei parametri lambda componibili, per verificare la coerenza con le linee guida di Compose. È stata anche eseguita la migrazione di alcune API utilizzando children come nome del lambda finale in content, secondo le indicazioni e il controllo del lint. (Iec48e).
  • Il ricompositore non accetta più un EmbeddingContext; le dipendenze di pianificazione richieste vengono ottenute da effettiCoroutineContext. FrameManager è deprecato; le integrazioni della piattaforma devono inizializzare la propria gestione globale degli snapshot. (I02369)
  • La funzione RestorableStateholder.withRestorableState è stata rinominata in RestorableStateProvider (I66640)

Correzioni di bug

  • Gli Ambient obsoleti hanno come suffisso il nome Ambient e sono stati sostituiti con nuove proprietà con prefisso Ambient, in base ad altre linee guida relative all'API Ambient e Compose. (I33440)
  • Rimuovi il vecchio modulo ui-test e i relativi stub (I3a7cb)

Versione 1.0.0-alpha07

11 novembre 2020

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

Nuove funzionalità

Modifiche alle API

  • L'annotazione @UnionType è stata deprecata (I57cde)
  • fornireDefault è stato aggiunto in alternativa per fornire gli ambienti e può essere utilizzato per specificare i valori ambientali che verranno impostati solo quando non è già stato fornito un valore ambient. (Id6635, b/171024925)
  • LaunchedTask è stato rinominato in LaunchedEffect per coerenza con le API SideEffect e DisposableEffect. LaunchedEffect senza parametri per il soggetto non è consentito per incoraggiare le best practice. (Ifd3d4)
  • L'applicazione ora dispone di callback onIniziaChanges/onEndChanges che vengono richiamati quando un Composer inizia/termina l'applicazione delle modifiche alla struttura. Questi possono essere utilizzati per la gestione delle risorse in batch, se necessario. (Icf476)
  • Il ricompositore ora richiede un CoroutineContext in fase di costruzione (Ic4610)
  • Modifiche all'implementazione SlotTable interna che non dovrebbero influire sull'API pubblica. (If9828)
  • Sono stati rimossi gli adattatori rxjava2 deprecati che non utilizzano il valore iniziale (Idb72f)

Correzioni di bug

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

Contributi esterni

  • Modulo runtime-rxjava3 aggiunto per la scrittura. Simile 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 alle API

  • Il ricompositore è ora un valore di ResolutionReference e un elemento padre della composizione valido. Ora il ricompositore esplicito è necessario in meno posizioni. (I4036f)
  • È stata aggiunta l'API di controparte DisposableEffect a SideEffect, con il ruolo di onCommit-with-params ma con un valore onDispose obbligatorio.
    • È stata aggiunta l'API keepUpdatedState per pubblicare i dati dalla ricomposizione a processi in corso o di lunga durata come DisposableEffects o LaunchedTasks.
    • (Id50b9)
  • MutableVector ora implementa RandomAccess (I85d73, b/170461551)
  • Aggiunta dell'elemento componibile SideEffect per applicare gli effetti collaterali della composizione agli oggetti gestiti dalla composizione. SideEffect è pensato per sostituire il componibile onCommit. (Ia77c2).
  • Nuova API sperimentale RestorableStateholder. Consente di salvare lo stato definito con [saveInstanceState] e [rememberSavedInstanceState] per il sottoalbero prima di smaltirlo per consentire la composizione della stessa la prossima volta con lo stato ripristinato. (I66884, b/166586419)

Correzioni di bug

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

Versione 1.0.0-alpha05

14 ottobre 2020

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

Modifiche alle API

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

Versione 1.0.0-alpha04

1° ottobre 2020

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

Modifiche alle API

  • È stato aggiunto SubjectScope per consentire la raccolta di ambiti di osservazione layout e di disegno una volta che non sono più validi. (Ic4cf8)
  • Aggiunta l'API derivaStateOf per creare oggetti State in base a un calcolo che può leggere (e derivare) altri oggetti State (If758b)
  • Aggiunta l'API TestOnly per SnapshotStateObservationr (I6e2a9)

Correzioni di bug

  • Foundation.Box è stata deprecata. Utilizza Foundation.layout.Box. (Ie5950, b/167680279)

Versione 1.0.0-alpha03

16 settembre 2020

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

Modifiche alle API

  • CompositionCoroutineScope non implementa più MonotonicFrameClock. I chiamanti di 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 su ComposeTestRule (I7f45a)
  • launchInComposition non lancia più le coroutine non inviate (Ief6af, b/166486000)

Versione 1.0.0-alpha02

2 settembre 2020

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

Modifiche alle API

  • Aggiungi le API snapshotFlow e withMutableSnapshot per utilizzare e generare le modifiche ai dati degli snapshot. (I3e722).
  • La convenzione di chiamata per le funzioni componibili è cambiata. Questa è una modifica che provoca un errore di codice binario. Tutte le librerie devono essere ricompilate per poter funzionare con questa versione del plug-in di compilazione Composer.

    Questa modifica non crea una modifica che provoca un errore a livello di origine, in quanto le uniche API che sono state modificate sono API di compilazione con un'attivazione esplicita. (I7afd2, b/158123185).

  • Metodi di pianificazione rimossi da EmbeddingContext (I7b9be)

  • Il comportamento di onCommit è ora deprecato, onCommit ora ha il comportamento onPreCommit.

    onCommit e onActive ora vengono eseguiti nello stesso frame del coreografo in cui cambia la composizione anziché all'inizio del successivo frame del coreografo. (I70403)

Versione 1.0.0-alpha01

26 agosto 2020

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

Versione 0.1.0-dev

Versione 0.1.0-dev17

19 agosto 2020

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

Modifiche alle API

  • Le emit personalizzate ora possono dichiarare che uno o più dei suoi setter possono essere ignorati e ricomposti indipendentemente dall'emissione. (Ibbd13).
  • Chiamate FrameManager deprecate rimosse.

    Le API di scrittura interne sono state modificate per ridurre l'overhead per monitorare oggetti di stato come mutableStateof() (I80ba6)

  • Per chiarezza, l'elemento componibile state { ... } è stato ritirato a favore di chiamate esplicite a remember { mutableStateOf(...) }. In questo modo si riduce la superficie API complessiva e il numero di concetti per la gestione dello stato e corrisponde al pattern by mutableStateOf() per la delega delle proprietà di classe. (Ia5727)

  • Flow.collectAsState ora determina il supervisore predefinito dalla composizione stessa anziché impostare come valore predefinito Dispatchers.Main. (I9c1d9).

  • Si è verificato un arresto anomalo quando un elemento che salva lo stato utilizzato all'interno del ciclo for è stato risolto. Ora che è consentita la stessa chiave in savedInstanceState(), l'API di UiSavedStateRegistry è adattata a questo nuovo requisito (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561)

Correzioni di bug

  • emitView è stato deprecato. Se possibile, utilizza AndroidView per l'emissione di visualizzazioni all'interno di Compose. Tieni presente che la scrittura diretta di visualizzazioni e gruppi di visualizzazioni non sarà supportata in futuro a meno che non si tratti di foglie nell'albero di composizione, nel caso in cui questa operazione possa essere eseguita utilizzando AndroidView. (I29b1e, b/163871221).

Versione 0.1.0-dev16

5 agosto 2020

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

Modifiche alle API

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

    Per impostazione predefinita, per decidere se un nuovo valore assegnato a un'istanza mutableStateOf() è considerato una modifica, l'impostazione predefinita è == anziché ===.

    Consulta la pagina https://kotlinlang.org/docs/reference/equality.html

    ambientOf() e savedInstanceStateOf() utilizzano mutableStateOf() nelle implementazioni, pertanto sono state modificate per garantire la coerenza con mutableStateOf().

    L'uso di uguaglianza strutturale corrisponde più alle aspettative degli sviluppatori.

    Ad esempio,

    val state = mutableStateOf(1f)
    

    e poi

    state.value = 1f
    

    non prenderà più in considerazione una modifica a state e gli utilizzi di state durante la composizione non dovranno più essere ricomposti.

    Si tratta di una modifica che provoca un errore, ma nella maggior parte dei casi (ad esempio, quando utilizzi classi che non eseguono l'override di equals()), non ci saranno effetti evidenti su un'applicazione.

    Le classi che eseguono l'override di equals(), ad esempio le classi data, potrebbero riscontrare un peggioramento delle prestazioni poiché i loro metodi equals() vengono ora, per impostazione predefinita, richiamati quando vengono assegnati a un mutableStateOf().

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

  • Row e Column sono ora funzioni incorporate per ridurre in modo significativo l'overhead associato al loro utilizzo. (I75c10)

Correzioni di bug

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

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

  • Modifier.stateTrascinagable è stato completamente rielaborato e rinominato Modifier.scrawlable. È stata introdotta una nuova classe SwipeableState e DrawerState e BottomDrawerState sono state sottoposte a refactoring per ereditarle. [Modal/Bottom]DrawerLayout non utilizza più un parametro onStateChange. (I72332, b/148023068)

  • Modifier.plus è stato ritirato. Usa invece Modifier.then. "Quindi" ha un segnale di ordinamento più forte, mentre vieta di digitare Modifier.padding().background() + anotherModifier, il che spezza la catena e più difficile da leggere (Iedd58, b/161529964)

  • SubcomposeLayout è stato aggiunto. Si tratta di una primitiva di basso livello che consente di comporre i figli durante la misurazione se vogliamo utilizzare alcuni valori disponibili solo in seguito durante la misura per la composizione del sottoalbero. Ad esempio, WithConstraints non viene implementato utilizzando SubcomposeLayout. (I25cc8)

  • Material FilledTextField è stato rinominato TextField e il Foundational TextField è stato rinominato BaseTextField per rendere più semplice l'individuazione e l'utilizzo dell'API desiderata (Ia6242, b/155482676)

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

Versione 0.1.0-dev15

22 luglio 2020

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

Aggiornamento delle dipendenze

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

Modifiche alle API

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

    Giustificazione

    La motivazione include, a titolo esemplificativo:

    • Riduce l'area della superficie delle API e i concetti che dobbiamo insegnare
    • Si allinea maggiormente con altri toolkit simili (Swift UI, React, Flutter)
    • Decisione reversibile. Possiamo sempre ripristinare @Model in un secondo momento.
    • Rimuove l'uso eccessivo e le domande difficili sulla configurazione di @Model in quanto dobbiamo gestire
    • @Model classi di dati, uguale, hashcode e così via.
    • Come posso avere alcune proprietà "osservate" e altre no?
    • Come posso specificare l'uguaglianza strutturale e referenziale da utilizzare nell'osservazione?
    • Riduce la "magia" del sistema. Diminuirà la probabilità che un utente supponga che un sistema sia più intelligente di quello che è (ad esempio, sapere come distinguere un elenco)
    • Rende più intuitiva la granularità dell'osservazione.
    • Migliora il refactoring della variabile -> proprietà nella classe
    • Potenzialmente, offre la possibilità di eseguire ottimizzazioni manuali specifiche per lo stato
    • Si allinea più da vicino con il resto dell'ecosistema e riduce l'ambiguità nei confronti di uno stato immutabile o di "adottare uno stato mutabile" a noi

    Note sulla migrazione

    Quasi tutti gli utilizzi esistenti di @Model si trasformano in modo abbastanza banale in uno dei due modi seguenti. L'esempio seguente ha una classe @Model con due proprietà solo a fini di esempio e viene utilizzata in un componibile.

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

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

    Questo approccio è reso più semplice con le classi di dati di Kotlin. Essenzialmente, trasforma tutte le precedenti proprietà var nelle proprietà val di una classe di dati, quindi utilizza state anziché remember e assegna il valore dello stato alle copie clonate dell'originale usando il metodo di convenienza copy(...) della classe dei dati.

    È importante notare che questo approccio funziona solo quando le uniche modifiche a quella classe sono state apportate nello stesso ambito in cui è stata creata l'istanza State. Se la classe sta mutando internamente al di fuori dell'ambito di utilizzo e ti basi sull'osservazione di ciò, l'approccio successivo è quello da utilizzare.

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

    Alternativa 2: utilizza mutableStateOf e delegati della proprietà

    Questo approccio è reso più semplice dai delegati alle proprietà di Kotlin e dall'API mutableStateOf che ti consente di creare istanze MutableState al di fuori della composizione. In sostanza, sostituisci tutte le proprietà var della classe originale con proprietà var con mutableStateOf come delegato della proprietà. Questo presenta il vantaggio che l'utilizzo della classe non cambierà affatto, ma solo la sua implementazione interna. Tuttavia, il comportamento non è completamente identico all'esempio originale, poiché ora ogni proprietà è osservata/iscritta singolarmente, quindi le ricomposizioni che vedi dopo questo refactoring potrebbero essere più ristrette (aspetto positivo).

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

    (I409e8, b/152050010, b/146362815, b/146342522, b/143413369, b/135715219, b/73}14, 143263b/743263)

  • Modifica la strategia di generazione del codice del compilatore di Compose. Prima della modifica, il compilatore del compositore trasformava le chiamate in funzioni componibili. Con questa modifica, ora trasformiamo il corpo di una funzione componibile e lasciamo il sito di chiamata inalterato (soprattutto).

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

    Questa modifica dovrebbe essere compatibile con il codice sorgente per tutti gli utilizzi di Compose. A seguito di questa modifica, la maggior parte degli utenti di Scrivi non dovrebbe dover aggiornare alcun codice.

    Per supportare questa operazione, la firma della JVM di tutte le funzioni componibili è stata modificata. Una funzione componibile che accetta un singolo parametro viene trasformata in una funzione che accetta 3 parametri. I parametri aggiuntivi sono Composer, un numero intero "chiave", un numero intero della maschera di bit utilizzato per propagare i metadati tramite le chiamate.

    Compose ora trasforma anche gli argomenti predefiniti in una funzione componibile. Lo fa senza introdurre un ulteriore sovraccarico sintetico predefinito della funzione stessa, quindi questa modifica comporterà la definizione di un numero inferiore di funzioni.

    Modifiche comportamentali intenzionali note derivanti da:

    1. Alcune chiamate salteranno dove non sarebbe stato possibile in precedenza
    2. Le espressioni componibili nelle espressioni di argomenti predefinite vengono ora sottoscritte e gestite correttamente

    Questo lavoro ha incluso alcune ottimizzazioni: 1. Il risultato dei confronti di parametri viene propagato attraverso il grafico delle chiamate ad altre funzioni componibili. Ciò comporterà un minor numero di confronti in fase di runtime, una riduzione delle dimensioni della tabella degli slot e una maggiore possibilità di ignorare le funzioni componibili che in precedenza non erano state ignorate 2. I parametri che vengono determinati come "statici" al momento della compilazione non vengono più confrontati né archiviati nel runtime. In questo modo ridurrai il numero di confronti e le dimensioni della tabella degli slot. 3. La struttura del flusso di controllo del corpo delle funzioni viene utilizzata per ridurre al minimo il numero di gruppi generati. In questo modo si riducono le dimensioni della tabella degli slot e si riduce il lavoro per il runtime 4. I parametri di invio e ricevitore inutilizzati delle funzioni non sono inclusi nel determinare la possibilità di ignorare la funzione se non vengono utilizzati all'interno del corpo della funzione.

    La maggior parte delle modifiche che provocano errori riguardava le API scelte direttamente dal compilatore e il tipico utilizzo dell'interfaccia di composizione non sarà interessato: 1. Composer::startExpr è stato rimosso 2. Composer::endExpr è stato rimosso 3. Composer::call è stato deprecato 4. Gli overload non varargs di key sono stati rimossi. D'ora in poi, utilizza la versione vararg. 5. L'annotazione Pivotal è stata ritirata. Utilizza key in sostituzione. 6. ScopeUpdateScope::updateScope è stato modificato per prevedere una Function3 anziché una Function1 7. rebootableFunction e rampableFunctionN sono stati aggiornati per includere ulteriori parametri di tempo di compilazione (I60756, b/143464846)

  • Sono stati aggiunti sortWith e removeRange a MutableVector (ICCf7)

  • Sono state aggiunte implementazioni dei metodi predefiniti per ComposeLifecycleObservationr (I24289)

  • L'applicatore ora richiede un metodo clear() per smaltire le composizioni (Ibe697)

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

  • È stato aggiunto promemoriaCoroutineScope() per ottenere un CoroutineScope gestito nella composizione per il lancio di lavori in risposta agli eventi. (I0e264).

  • MutableVector è una nuova raccolta che non implementa nessuna dell'interfaccia Raccolta standard. Questa raccolta offre una velocità superiore ad altri requisiti e è pensata per essere utilizzata solo nelle implementazioni interne. (I8ebd6).

  • Sono stati rimossi temporaneamente StableMutableList e StableMutableMap per evitare un problema nella versione di Kotlin di scrittura richiesta. Queste interfacce verranno reintrodotte dopo l'aggiornamento dell'interfaccia di scrittura a una versione di Kotlin che non presenta il problema.

    SnapshotStateList e SnapshotStateMap sono ora pubblici, ma verranno ritirati una volta ripristinati StableMutableList e StableMutableMap. (Ia7769)

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

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

  • RiavviabileFunction e le API associate sono state rinominate in ComposableLambda e così via. Queste API sono state scelte come target solo dal compilatore, quindi questo non dovrebbe influire normalmente sulla compatibilità a livello di origine. La ridenominazione è stata effettuata principalmente per comunicare che cosa è migliore questa classe quando viene visualizzata nelle analisi dello stack (I7eb25)

  • L'annotazione @Composable non è più valida per i corsi (Ia5f02)

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

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

  • L'elemento Ricomponi componibile non è più un'astrazione utile. La maggior parte della ricomposizione avviene a seguito delle assegnazioni MutableState. Per qualsiasi cosa oltre questo limite, ti consigliamo di utilizzare la funzione invalidate per attivare una ricomposizione dell'ambito corrente. (Ifc992).

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

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

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

  • È stato aggiunto un adattatore per Flow. Esempio di utilizzo: val value by flow.collectAsState() (If2198, b/153375923)

  • [Mutable]Gli operatori delegati per le proprietà statali sono stati spostati nelle estensioni per supportare le ottimizzazioni dei delegati di proprietà Kotlin 1.4. I chiamanti devono aggiungere importazioni per continuare a utilizzare by state { ... } o by mutableStateOf(...). (I5312c)

  • androidx.compose.ViewComposer è stato spostato in androidx.ui.node.UiComposer androidx.compose.Emittable rimosso. È stato ridondante con ComponentiNode. androidx.compose.ViewAdapters è stato rimosso. Non rappresentano più un caso d'uso supportato. Compose.composeInto è stato deprecato. Usa invece setContent o setViewContent. Compose.disposeCompose è stato deprecato. Usa invece il metodo dispose sul Composition restituito da setContent. androidx.compose.Compose.subcomposeInto è stato spostato in androidx.ui.core.subcomposeInto ComponenteNode#emitInsertAt è stato rinominato in ComponenteNode#insertAt ComponenteNode#emitRemoveAt è stato rinominato in ComponenteNode#removeAt ComponenteNode#emitMode

  • È stato aggiornato il flag ComposeFlags.COMPOSER_PARAM in modo che sia true. Questa operazione cambierà la strategia di generazione del codice per il plug-in di composizione. A livello generale, questo fa sì che le funzioni @Composable vengano generate con un parametro sintetico aggiuntivo, che viene trasmesso alle successive chiamate @Composable per consentire al runtime di gestire correttamente l'esecuzione. Si tratta di una modifica significativa che provoca un'interruzione del programma binario, tuttavia dovrebbe garantire la compatibilità a livello di origine in tutti gli utilizzi sanzionati di Compose. (I7971c)

  • Interruzione delle modifiche all'API Ambient. Per informazioni dettagliate, consulta la documentazione relativa al log e a Ambient<T> (I4c7ee, b/143769776)

  • Aggiunto ui-livedata, nuovo artefatto con un adattatore per LiveData. Esempio di utilizzo: val value di liveData.observeAsState() (Ie9e8c, b/150465596)

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

  • Aggiunto ui-rxjava2, un nuovo artefatto con adattatori per RxJava2. Esempio di utilizzo: val value di observable.subscribeAsState() (Ifab4b, b/153369097)

  • Ora è possibile utilizzare savedInstanceState() con i tipi di valori null (I6847f, b/153532190)

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

  • Nuove funzioni: savedInstanceState() e promemoriaInstanceState() simili a state() e promemoria(), ma con un'istanza salvata che supporta lo stato (If1987, b/152025209).

Correzioni di bug

  • runOnIdleCompose rinominato in runOnIdle (I83607)
  • API sperimentale Made LayoutNode (I4f2e9)
  • androidx.ui.foundation.TextFieldValue e androidx.ui.input.EditorValue sono deprecati. Anche i componibili TextField, FilledTextField e CoreTextField che utilizzano questo tipo sono deprecati. Utilizza invece androidx.ui.input.TextFieldValue (I4066d, b/155211005)
  • È stata rimossa l'API DrawBackground deprecata a favore delle API di estensione DrawBackground su Modifier. Il refactoring delle implementazioni di disegnoBackground di colori, pennelli e colori per ridurre i percorsi di codice e rimuovere il requisito della creazione di Modificatore come parte della composizione. (I0343a)
  • Sono state aggiornate le API di composizione di livello superiore che espongono CanvasScope per esporre CanvasScope. In questo modo, i consumatori non dovranno più gestire i propri oggetti Paint. I consumatori che devono comunque accedere a Canvas possono utilizzare il metodo dell'estensione disegnoCanvas, che offre un callback per inviare i comandi di disegno con Canvas sottostante. (I80afd)
  • L'API WithConstraints finale lambda è stata modificata. Ora, invece di due parametri, ha un ambito ricevitore che, oltre a vincoli e layoutDirection, fornisce le proprietà minwidth, maxwidth, minHeight e maxHeight in Dp (I91b9a, b/149979702).
  • Aggiunto il modificatore di spaziatura interna simmetrica. (I39840)
  • Sono stati aggiornati i valori di wrapContentLarghezza e wrapContentAltezza per l'allineamento verticale o orizzontale, anziché dell'allineamento. Il modificatore di gravità è stato aggiornato in modo da accettare l'allineamento verticale o orizzontale. Righe, colonne e stack sono stati aggiornati per supportare gli allineamenti continui personalizzati. (Ib0728)
  • il modulo ui-text viene rinominato come ui-text-core (I57dec)
  • Migliora l'API DrawModifier:
    • È stato impostato l'ambito del destinatario perDraw() ContentDrawScope
    • Rimossi tutti i parametri in disegno()
    • DrawScope ha la stessa interfaccia del precedente CanvasScope
    • ContentDrawScope ha il metodoDrawContent() (Ibaced, b/152919067)
  • L'API ColoredRect è stata ritirata. Usa invece il criterio Box(Modifier.preferredSize(width, height).drawBackground(color)). (I499fa, b/152753731).
  • Operatore di Modificatore più sostituito con funzioni di estensione di fabbrica (I225e4)
  • I membri RowScope e ColumnScope ora sono accessibili all'esterno di Row e Column. (I3a641)
  • È stato cambiato il nome LayoutFlessibile in LayoutWeight. Rinominato parametro stretto per riempire. (If4738)
  • Parametro WithConstraints ottenuto da LayoutDirection (I6d6f7)
  • Lo sfondo è stato rinominato in DrawBackground e deve essere memorizzato per impostazione predefinita (Ia0bd3)
  • Sostituire il valore ButtonStyle con funzioni distinte e rimuovere il sovraccarico di testo (stringa). Consulta gli esempi aggiornati per le informazioni sull'utilizzo. (If63ab, b/146478620, b/146482131).
  • runOnIdleCompose e runOnUiThread sono ora funzioni globali anziché metodi su ComposeTestRule. (Icbe8f)

Contributi esterni

  • Rimuovi le API non necessarie, come Looper e Handler, dal livello di portabilità del runtime di Compose (I6847d)
  • Depreca Flow<T>.collectAsState() senza valore iniziale. Utilizza StateFlow<T> o trasmetti un valore iniziale esplicito. (I63f98, b/157674865)