Compose Runtime
Elementos fundamentais do modelo de programação e do gerenciamento de estado do Compose e do ambiente de execução principal do plug-in Compose Compiler.
Atualização mais recente Versão estável Versão candidata a lançamento Versão Beta Versão Alfa
26 de junho de 2024 1.6.8 - 1.7.0-beta04 (link em inglês) -

Estrutura

O Compose é uma combinação de sete IDs de grupos do Maven no androidx. Os grupos contêm um subconjunto direcionado de funcionalidades, cada um com um conjunto próprio de notas da versão.

Esta tabela explica os grupos e contém links para cada conjunto de notas da versão.

GrupoDescrição
compose.animationCrie animações nos aplicativos Jetpack Compose para enriquecer a experiência do usuário.
compose.compilerTransforme funções @Composable e ative otimizações com um plug-in do compilador Kotlin.
compose.foundationCrie aplicativos do Jetpack Compose com elementos básicos prontos que podem ser usados para criar suas próprias peças de sistema de design.
compose.materialCrie IUs do Jetpack Compose com componentes do Material Design prontos para uso. Este é o ponto de entrada de nível mais alto do Compose, projetado para fornecer componentes que correspondam aos descritos em www.material.io.
compose.material3Crie IUs do Jetpack Compose usando componentes do Material Design 3, a nova versão do Material Design. O Material 3 inclui temas e componentes atualizados, além de recursos de personalização do Material You, como cores dinâmicas, e foi desenvolvido para ser coeso com o novo estilo visual do Android 12 e com a interface do sistema.
compose.runtimeElementos fundamentais do modelo de programação e do gerenciamento de estado do Compose e do ambiente de execução principal do plug-in Compose Compiler.
compose.uiComponentes fundamentais do Compose UI necessários para interagir com o dispositivo, incluindo layout, desenho e entrada.

Declarar dependências

Para adicionar uma dependência ao Compose, adicione o repositório Maven do Google ao seu projeto. Leia Repositório Maven do Google para mais informações.

Adicione as dependências dos artefatos necessários ao arquivo build.gradle do seu app ou módulo:

Groovy

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

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.14"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

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

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.14"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Para mais informações sobre dependências, consulte Adicionar dependências de build.

Feedback

Seu feedback ajuda a melhorar o Jetpack. Avise se você descobrir novos problemas ou tiver ideias para melhorar esta biblioteca. Consulte os problemas conhecidos nesta biblioteca antes de criar um novo. Adicione seu voto a um problema clicando no botão de estrela.

Criar novo problema

Consulte a documentação do Issue Tracker para saber mais.

Runtime Tracing: versão 1.0

Versão 1.0.0-beta01

29 de novembro de 2023

Lançamento de androidx.compose.runtime:runtime-tracing:1.0.0-beta01. A versão 1.0.0-beta01 contém estas confirmações.

Versão 1.0.0-alpha05

15 de novembro de 2023

Lançamento de androidx.compose.runtime:runtime-tracing:1.0.0-alpha05. A versão 1.0.0-alpha05 contém estas confirmações.

Correções de bugs

  • Dependências fixadas nas versões estáveis mais baixas com suporte (ou seja, compose-runtime e trace-perfetto). Foi corrigido um problema em que o compose-runtime-tracing trazia uma versão mais recente do compose-runtime ao app.

Versão 1.0.0-alpha04

23 de agosto de 2023

Lançamento de androidx.compose.runtime:runtime-tracing:1.0.0-alpha04. A versão 1.0.0-alpha04 contém estas confirmações.

Novos recursos

  • Compatível com as versões mais recentes do Benchmark e Tracing Perfetto, que oferece suporte ao rastreamento de composição na inicialização do app (inicialização a frio), por exemplo, no AndroidX Benchmark e no Android Studio (a partir do Hedgehog Beta 2).

Mudanças na API

  • androidx.tracing.perfetto.Trace foi renomeado como androidx.tracing.perfetto.PerfettoSdkTrace (I44af8).
  • As APIs de rastreamento do SDK do Perfetto agora são consistentes com o android.os.Trace. (I73ba0, b/282199917).
  • Pré-requisitos para o rastreamento na inicialização do app. (Iad890).
  • Arquivos de API públicos e experimentais mesclados (I0f2e1, b/278769092).

Versão 1.0.0-alpha02

8 de fevereiro de 2023

Lançamento de androidx.compose.runtime:runtime-tracing:1.0.0-alpha02. A versão 1.0.0-alpha02 contém estas confirmações.

Novos recursos

  • Nenhuma mudança funcional. Várias otimizações de desempenho em dependências downstream androidx.tracing:tracing-perfetto*.

Versão 1.0.0-alpha01

7 de setembro de 2022

Lançamento de androidx.compose.runtime:runtime-tracing:1.0.0-alpha01. A versão 1.0.0-alpha01 contém estas confirmações.

Novos recursos

  • A androidx.compose.runtime:runtime-tracing é uma biblioteca que permite o rastreamento estendido em um app do Compose, desde a presença de ferramentas com suporte a ela (em breve). Essa versão inicial é a 1.0.0-alpha01.

Versão 1.7

Versão 1.7.0-beta04

26 de junho de 2024

Lançamento de androidx.compose.runtime:runtime-*:1.7.0-beta04. A versão 1.7.0-beta04 contém estas confirmações.

Versão 1.7.0-beta03

12 de junho de 2024

Lançamento de androidx.compose.runtime:runtime-*:1.7.0-beta03. A versão 1.7.0-beta03 contém estas confirmações.

Versão 1.7.0-beta02

29 de maio de 2024

Lançamento de androidx.compose.runtime:runtime-*:1.7.0-beta02. A versão 1.7.0-beta02 contém estas confirmações.

Versão 1.7.0-beta01

14 de maio de 2024

Lançamento de androidx.compose.runtime:runtime-*:1.7.0-beta01. A versão 1.7.0-beta01 contém estas confirmações.

Versão 1.7.0-alpha08

1o de maio de 2024

Lançamento de androidx.compose.runtime:runtime-*:1.7.0-alpha08. A versão 1.7.0-alpha08 contém estas confirmações.

Versão 1.7.0-alpha07

17 de abril de 2024

Lançamento de androidx.compose.runtime:runtime-*:1.7.0-alpha07. A versão 1.7.0-alpha07 contém estas confirmações.

Novos recursos

  • Foi adicionada a capacidade de fornecer um local de composição que é calculado com base nos valores de outros locais de composição por padrão, usando compositionLocalWithComputedDefault() ou fornecendo um lambda a ser usado para calcular o valor usando providesComputed em vez de provides.
  • O valor de um local de composição pode ser obtido usando a propriedade currentValue do local de composição acessível de dentro do lambda que calcula o valor. Ela é usada em vez de current, que só é acessível em funções @Composable. (Iadbc0).

Mudanças na API

  • Objetos de estado recém-criados são imediatamente acessíveis a partir de outros snapshots, incluindo o snapshot global, com o estado inicial deles. Qualquer modificação subsequente não estará visível até que o snapshot em que o objeto foi criado seja aplicado.
  • O estado inicial de mutableStateOf(), assim como as versões primitivas, é o valor transmitido como um parâmetro para mutableStateOf(). O estado inicial de mutableStateListOf() e mutableStateMapOf() está vazio.
  • Foram adicionados Snapshot.isInSnapshot e Snapshot.PreexistingSnapshotId, que são usados para permitir que um objeto de estado ofereça suporte à possibilidade de acesso imediato pelo snapshot global após a criação dele.
  • Os objetos de estado personalizado podem oferecer suporte ao acesso imediato seguindo o padrão de alterações feitas nos objetos de snapshot integrados. (I84a17).

Correções de bugs

  • Correção da mesclagem de readObserver em snapshots aninhados. Isso fez com que os estados derivados aninhados fossem invalidados de forma insuficiente quando usados dentro de uma snapshotFlow. (Idf138).

Versão 1.7.0-alpha06

3 de abril de 2024

Lançamento de androidx.compose.runtime:runtime-*:1.7.0-alpha06. A versão 1.7.0-alpha06 contém estas confirmações.

Correções de bugs

  • Correção do fornecimento de valores únicos que processa providesDefault (538f45).
  • Evite um impasse no Recomposer ao acessar o relógio do frame (07e5c6).

Versão 1.7.0-alpha05

20 de março de 2024

Lançamento de androidx.compose.runtime:runtime-*:1.7.0-alpha05. A versão 1.7.0-alpha05 contém estas confirmações.

Correções de bugs

  • Limpar mudanças tardias na composição desativada (5950bc)

Versão 1.7.0-alpha04

6 de março de 2024

Lançamento de androidx.compose.runtime:runtime-*:1.7.0-alpha04. A versão 1.7.0-alpha04 contém estas confirmações.

Melhorias no desempenho

  • Chamar Snapshot.current uma vez por avaliação de estado derivado (ee7daf).
  • Ler currentRecord uma vez por observação na composição (b882b2).
  • Remoção da alocação acidental de iterador em snapshotFlow (231e56).
  • Ative o nonSkippingGroupOptimization para bibliotecas do Compose. Isso faz com que o código gerado para todas as funções combináveis não reiniciáveis no androidx seja mais eficiente. No futuro, planejamos ativar esse recurso por padrão. I(acbc08).

Versão 1.7.0-alpha03

21 de fevereiro de 2024

Lançamento de androidx.compose.runtime:runtime-*:1.7.0-alpha03. A versão 1.7.0-alpha03 contém estas confirmações.

Mudanças na API

  • Foram introduzidos grupos de substituição para melhorar a detecção de mudanças (0941b5).

Melhorias no desempenho

  • Melhoria na alocação de memória ao detectar mudanças (53e7fd).
  • Correção de um vazamento de memória no Composer (0e097d).
  • Uso de ScopeMap para transmitir invalidações ao recompor (e19a7e).
  • Otimize o mapa de invalidações para manter apenas estados derivados (f11c44).
  • Substituição dos usos de IdentityArraySet por ScatterSet (db572e).
  • Otimizar removeScope em ScopeMap (bb0530)

Versão 1.7.0-alpha02

7 de fevereiro de 2024

Lançamento de androidx.compose.runtime:runtime-*:1.7.0-alpha02. A versão 1.7.0-alpha02 contém estas confirmações.

Correções de bugs

  • Invalidar lambdas combináveis em subcomposições no mesmo frame. (98301c).
  • Chame o callback onRelease na mesma ordem que onForgotten. (2cd790).
  • Filtrar estados alterados que não são observados em snapshotFlow. (796b80).

Melhorias no desempenho

  • Modificar o observador de snapshots quando ele já estiver transparente. (f60f30).
  • Otimize o SnapshotIdSet.lowest(). (7ae149).
  • Use um fold() sem alocação em SnapshotIdSet. (532b7d).
  • Remoção da alocação de iterador (83f96b).

Versão 1.7.0-alpha01

24 de janeiro de 2024

Lançamento de androidx.compose.runtime:runtime-*:1.7.0-alpha01. A versão 1.7.0-alpha01 contém estas confirmações.

Otimizações de performance

  • Adição da capacidade de criar slots após a adição de um grupo filho (b5960c).
  • Otimização das modificações de registro dos estados do snapshot (28c3fe)
  • Ativar o modo de rejeição avançada (ed1766)

Correções de bugs

  • Foi contada a meta de parâmetro padrão no método de remember intrínseco (096665).
  • Tornar currentCompoundHashKey exclusivo em mais casos (d4a872).
  • Criação de grupos ao sair da chamada de função inline (2a90fc)

Versão 1.6

Versão 1.6.8

12 de junho de 2024

Lançamento de androidx.compose.runtime:runtime-*:1.6.8. A versão 1.6.8 contém estas confirmações.

Versão 1.6.7

1o de maio de 2024

Lançamento de androidx.compose.runtime:runtime-*:1.6.7. A versão 1.6.7 contém estas confirmações.

Versão 1.6.6

17 de abril de 2024

Lançamento de androidx.compose.runtime:runtime-*:1.6.6. Nenhuma mudança desde a última versão.

Versão 1.6.5

3 de abril de 2024

Lançamento de androidx.compose.runtime:runtime-*:1.6.5. A versão 1.6.5 contém estas confirmações.

Versão 1.6.4

20 de março de 2024

Lançamento de androidx.compose.runtime:runtime-*:1.6.4. A versão 1.6.4 contém estas confirmações.

Versão 1.6.3

6 de março de 2024

Lançamento de androidx.compose.runtime:runtime-*:1.6.3. A versão 1.6.3 contém estas confirmações.

Versão 1.6.2

21 de fevereiro de 2024

Lançamento de androidx.compose.runtime:runtime-*:1.6.2. A versão 1.6.2 contém estas confirmações.

Versão 1.6.1

7 de fevereiro de 2024

Lançamento de androidx.compose.runtime:runtime-*:1.6.1. A versão 1.6.1 contém estas confirmações.

Correções de bugs

  • Chame o callback onRelease na mesma ordem que onForgotten. (2cd790).
  • Filtrar estados alterados que não são observados em snapshotFlow. (796b80).

Versão 1.6.0

24 de janeiro de 2024

Lançamento de androidx.compose.runtime:runtime-*:1.6.0. A versão 1.6.0 contém estas confirmações.

Mudanças importantes desde a versão 1.5.0

Novos recursos

  • Gera novamente exceções que são ingeridas durante a repetição de recomposição (4dff9a).

Otimizações de performance

  • Otimização das modificações de registro dos estados do snapshot (28c3fe)
  • Otimizar rememberSaveable (f01d79)
  • Adiar a nova leitura de estados derivados até que as alterações sejam registradas (f38099).
  • Melhoria ao fornecer valores locais de composição (a337ea).

Correções de bugs

  • Correção do vazamento de memória da tabela de slots (73fcfe).
  • Ignora a recomposição de subcomposições que serão removidas. (Ieeb99, b/254645321).
  • Acione ciclos de vida de RememberObserver apenas quando ele for armazenado no cálculo de memória. (f6b4dc).
  • A captura $dirty foi restrita a lambdas inline. (acfca0).
  • Correção de conteúdo móvel que, às vezes, recebe os locais de composição errados. (035cd6).

Versão 1.6.0-rc01

10 de janeiro de 2024

Lançamento de androidx.compose.runtime:runtime-*:1.6.0-rc01. A versão 1.6.0-rc01 contém estas confirmações.

Versão 1.6.0-beta03

13 de dezembro de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.6.0-beta03. A versão 1.6.0-beta03 contém estas confirmações.

Versão 1.6.0-beta02

29 de novembro de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.6.0-beta02. A versão 1.6.0-beta02 contém estas confirmações.

Versão 1.6.0-beta01

15 de novembro de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.6.0-beta01. A versão 1.6.0-beta01 contém estas confirmações.

Mudanças na API

  • Propagar certos valores de estabilidade na anotação. (274a4c) (link em inglês)

Correções de bugs

  • Use a política referencial para o estado do escopo local da composição no contexto. (83361c) (link em inglês)
  • Captura $suja restrita a lambdas inline. (acfca0) (link em inglês)
  • Correção de conteúdo móvel que, às vezes, recebe os locais de composição errados. (035cd6) (link em inglês)
  • Use hashmaps sem alocação mais rápidos em RecomposeScopeImpl. (d79494) (link em inglês)
  • Usar ObjectIntMap em DerivedState. (21862e) (link em inglês)
  • Use IntRef para int SnapshotThreadLocal em DerivedState. (04eaf4) (link em inglês)

Versão 1.6.0-alpha08

18 de outubro de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.6.0-alpha08. A versão 1.6.0-alpha08 contém estas confirmações.

Correções de bugs

  • Acione ciclos de vida de RememberObserver apenas quando ele for armazenado no cálculo de memória. (f6b4dc).
  • Melhoria das alocações na classificação da lista de invalidações. (954d63).
  • Usar novos mapas não alocados em SnapshotStateObserver (4303ce).
  • Limpar invalidações quando a composição for desativada. (e001be).

Versão 1.6.0-alpha07

4 de outubro de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.6.0-alpha07. A versão 1.6.0-alpha07 contém estas confirmações.

Mudanças na API

  • SnapshotStateList agora está marcado como RandomAccess para permitir o uso da versão de indexação direta dos auxiliares de lista. (I5210c, b/219554654).

Versão 1.6.0-alpha06

20 de setembro de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.6.0-alpha06. A versão 1.6.0-alpha06 contém estas confirmações.

Versão 1.6.0-alpha05

6 de setembro de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.6.0-alpha05. A versão 1.6.0-alpha05 contém estas confirmações.

Versão 1.6.0-alpha04

23 de agosto de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.6.0-alpha04. A versão 1.6.0-alpha04 contém estas confirmações.

Novos recursos

  • Gera novamente exceções que são ingeridas durante a repetição de recomposição (4dff9a).

Mudanças na API

  • Adição de um método para desativar ReusableComposition, removendo observações, mas mantendo os nós no lugar. A composição desativada pode ser ativada novamente chamando setContent. (Ib7f31).
  • A interface ReusableComposition foi adicionada para gerenciar o ciclo de vida e a reutilização de subcomposições (I812d1, b/252846775).

Versão 1.6.0-alpha03

9 de agosto de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.6.0-alpha03. A versão 1.6.0-alpha03 contém estas confirmações.

Correções de bugs

  • Correção da nova otimização de CompositionLocalProvider (3118e88).
  • Corrigir como os nós de conteúdo móvel são desmontados. (5e3d59b).

Versão 1.6.0-alpha02

26 de julho de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.6.0-alpha02. A versão 1.6.0-alpha02 contém estas confirmações.

Novos recursos e melhorias de desempenho

  • Otimizar rememberSaveable (f01d79)
  • Adiar a nova leitura de estados derivados até que as alterações sejam registradas (f38099).
  • Melhoria ao fornecer valores locais de composição (a337ea).
  • SideEffect é marcado como @ExplicitGroupsComposable para evitar a geração de um grupo. (I74815).
  • Evite comparar mapas locais de composição na reutilização (782071).

Mudanças na API

  • Foi adicionada uma sobrecarga de caso especial para CompositionLocalProviders, que evita a sobrecarga usada para agilizar o fornecimento de vários valores, mas é sobreposta ao fornecer um único valor. (I6d640, b/288169379).

Correções de bugs

  • Correção do vazamento de memória da tabela de slots (73fcfe).
  • Foi corrigida a forma como restauramos rememberSaveable quando stateSaver retorna um valor nulo (90748c).

Versão 1.6.0-alpha01

21 de junho de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.6.0-alpha01. A versão 1.6.0-alpha01 contém estas confirmações.

Correções de bugs

  • Ignora a recomposição de subcomposições que serão removidas. (Ieeb99, b/254645321).
  • Alocações reduzidas ao aplicar snapshots. (I65c09).
  • Evite calcular readableHash em DerivedState se o snapshot não tiver sido modificado (68c565).

Versão 1.5

Versão 1.5.4

18 de outubro de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.5.4. A versão 1.5.4 contém estas confirmações.

Versão 1.5.3

4 de outubro de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.5.3. A versão 1.5.3 contém estas confirmações.

Versão 1.5.2

27 de setembro de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.5.2. A versão 1.5.2 contém estas confirmações.

Versão 1.5.1

6 de setembro de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.5.1. A versão 1.5.1 contém estas confirmações.

Versão 1.5.0

9 de agosto de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.5.0. A versão 1.5.0 contém estas confirmações.

Mudanças na API

  • As alocações foram removidas em recomposição, animações de cores e AndroidComposeView. (Ib2bfa).
  • Adição de uma anotação @StateFactoryMarker para marcar funções que criam estados e precisam ser unidas em uma chamada remember. (I64550).
  • Adição de versões primitivas de State e MutableState (fb3d89).
  • Adição de Snapshot.isApplyObserverNotificationPending (I672a5).
  • Adição de versões primitivas da API State, permitindo que valores Int, Long, Float e Double sejam rastreados em objetos State sem incorrer em penalidades para caixas automáticas. Use os novos métodos de fábrica mutableIntState(Int), mutableFloatStateOf(Float) etc. para usá-los. (I48e43).

Correções de bugs

  • Ignora a recomposição de subcomposições que serão removidas. (Ieeb99, b/254645321).
  • A referência do snapshot não é mantida em ComposerImpl (0206f7).
  • A composição não é aplicada duas vezes (f5791b).
  • Garantia de invalidação de valores de estado derivado não inicializados (aa2a92).
  • Chame onEndChanges durante o descarte da composição. (62cc8c).
  • O movimento de conteúdo para uma subcomposição foi corrigido (4beb41).
  • Correção de possíveis impasses (c1a425 e 8edce0).
  • O recompositor criado para uma janela do Android agora vai bloquear apenas chamadas para withFrameNanos em vez de toda a composição quando receber uma notificação ON_STOP. Isso significa que as janelas associadas a atividades interrompidas vão continuar sendo recompostas para mudanças de dados, mas as animações, ou qualquer outro autor de chamada de withFrameNanos, serão bloqueadas. (Id9e7f, b/240975572).
  • Executar callbacks de desativação para LayoutNode antes de descartar os efeitos 3784073.
  • Correção de sinalizações modificadas para lambdas reiniciadas ea81df9.
  • Correção da regressão da edição em tempo real para elemento combinável com nós 73fd4d8.
  • ON_STOP precisa pausar as transmissões do clock do frame em vez da composição ae276f1
  • Invalidar escopos do SnapshotStateObserver para estados derivados inalterados 84d9b1c
  • Correção de um possível impasse ao descartar composições 28761fc
  • Correção do movimento de conteúdo para uma subcomposição 92d4156.
  • As flags modificadas para lambdas reiniciadas foram corrigidas (8a03e9).
  • Executar callbacks de desativação para LayoutNode antes de descartar os efeitos (8b0fa4).
  • Correção de endToMarker() ao encerrar grupos de nós. (d71d980).
  • Uso do grupo SlotWriter atual para verificar a desativação (a0b518b).
  • Remova a fill em SlotTable.moveSlotGapTo() e mova-a para fechar (81f9935).
  • As invalidações ausentes durante a transferência de conteúdo móvel foram corrigidas (1d7c024).
  • Correção de invalidações imediatas para conteúdo móvel movido (8676618).

Melhorias no desempenho

  • Evite calcular readableHash em DerivedState se o snapshot não tiver sido modificado. (307102).
  • Alocações reduzidas (I65c09, d7ea77, 727974 e 445808).
  • Cancelamento rápido do CoroutineScopes do Compose (a55362 e bd382f).
  • Os registros de objetos de estado foram substituídos por registros de estado inacessíveis (c986960).
  • Uso do compositor do escopo correto ao criar grupos (9a5e5b6).
  • Usar IdentityArraySet para armazenar invalidações de snapshot (7f60cca).
  • Redução das alocações para observações de snapshots (5bc535f).

Versão 1.5.0-rc01

26 de julho de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.5.0-rc01. A versão 1.5.0-rc01 contém estas confirmações.

Correções de bugs

  • Adiar a nova leitura de estados derivados até que as alterações sejam registradas (f38099).

  • Uma inspeção opcional para recomendar a migração de chamadas mutableStateOf() para os tipos especializados correspondentes para primitivos está disponível. O ID do lint é AutoboxingStateCreation. Antes, essa inspeção era ativada por padrão para todos os projetos. Para que esse aviso apareça no editor do Android Studio e nas saídas do lint do seu projeto, mude a gravidade de informativo para aviso (ou maior) declarando warning "AutoboxingStateCreation" dentro da configuração build.gradle ou build.gradle.kts do módulo, conforme mostrado (I34f7e):

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

Versão 1.5.0-beta03

28 de junho de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.5.0-beta03. A versão 1.5.0-beta03 contém estas confirmações.

Correções de bugs

  • Ignora a recomposição de subcomposições que serão removidas. (Ieeb99, b/254645321).

Versão 1.5.0-beta02

7 de junho de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.5.0-beta02. A versão 1.5.0-beta02 contém estas confirmações.

Melhorias no desempenho

  • Evite calcular readableHash em DerivedState se o snapshot não tiver sido modificado. (307102).

Versão 1.5.0-beta01

24 de maio de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.5.0-beta01. A versão 1.5.0-beta01 contém estas confirmações.

Mudanças na API

  • Remoção de alocações em recomposição, animações de cores e AndroidComposeView (Ib2bfa).
  • Adição de uma anotação @StateFactoryMarker para marcar funções que criam estados e precisam ser unidas em uma chamada remember. (I64550).
  • Adição de versões primitivas de State e MutableState (fb3d89).
  • Adição de Snapshot.isApplyObserverNotificationPending (I672a5).

Correções de bugs

  • Alocações reduzidas (I65c09, d7ea77, 727974 e 445808).
  • A referência do snapshot não é mantida em ComposerImpl (0206f7).
  • Cancelamento rápido do CoroutineScopes do Compose (a55362 e bd382f).
  • A composição não é aplicada duas vezes (f5791b).
  • Garantia de invalidação de valores de estado derivado não inicializados (aa2a92).
  • Chame onEndChanges durante o descarte da composição. (62cc8c).
  • O movimento de conteúdo para uma subcomposição foi corrigido (4beb41).
  • Correção de possíveis impasses (c1a425).
  • ON_STOP precisa pausar as transmissões do clock do frame em vez da composição (f4a2d1).
  • As flags modificadas para lambdas reiniciadas foram corrigidas (8a03e9).
  • Executar callbacks de desativação para LayoutNode antes de descartar os efeitos (8b0fa4).

Contribuição externa

  • Adição de Snapshot.isApplyObserverNotificationPending (I672a5).

Versão 1.5.0-alpha04

10 de maio de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.5.0-alpha04. A versão 1.5.0-alpha04 contém estas confirmações.

Mudanças na API

  • Adição de versões primitivas da API State, permitindo que valores Int, Long, Float e Double sejam rastreados em objetos State sem incorrer em penalidades para caixas automáticas. Use os novos métodos de fábrica mutableIntState(Int), mutableFloatStateOf(Float) etc. para usá-los. (I48e43).

Correções de bugs

  • Chame onEndChanges durante o descarte da composição. Os nós de foco removidos durante Composition.dispose estão se inscrevendo em onEndChanges para redefinir o foco (03d4a47).

  • Garante a invalidação de valores de estado derivado não inicializados. Cada estado derivado é associado a uma lista de dependências no SnapshotStateObserver, usado para invalidar escopos associados ao estado derivado sempre que a dependência muda. A mudança de dependência é registrada no avanço do snapshot, o que pode acontecer após a leitura do estado derivado (devido à chamada para Snapshot.notifyObjectsInitialized()).

    A lógica de observação de estado derivado anterior em SnapshotStateObserver limpava dependências antigas e, em seguida, lia o novo valor. Isso resultou em uma disputa, em que a invalidação aconteceu em um estado limpo, em que a invalidação de dependência não foi registrada.

    Essa mudança reordena a leitura de estado derivado e a limpeza de dependências, garantindo que a invalidação sempre ocorra em um estado válido. (c472be6).

Versão 1.5.0-alpha03

19 de abril de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.5.0-alpha03. A versão 1.5.0-alpha03 contém estas confirmações.

Mudanças na API

  • O recompositor criado para uma janela do Android agora vai bloquear apenas chamadas para withFrameNanos em vez de toda a composição quando receber uma notificação ON_STOP. Isso significa que as janelas associadas a atividades interrompidas vão continuar sendo recompostas para mudanças de dados, mas as animações, ou qualquer outro autor de chamada de withFrameNanos, serão bloqueadas. (Id9e7f, b/240975572).

Correções de bugs

  • Correção de possível impasse na lista de snapshots e no mapa 5c1a425.
  • Executar callbacks de desativação para LayoutNode antes de descartar os efeitos 3784073.
  • Correção de sinalizações modificadas para lambdas reiniciadas ea81df9.
  • Correção da regressão da edição em tempo real para elemento combinável com nós 73fd4d8.
  • ON_STOP precisa pausar as transmissões do clock do frame em vez da composição ae276f1
  • Invalidar escopos do SnapshotStateObserver para estados derivados inalterados 84d9b1c
  • Correção de um possível impasse ao descartar composições 28761fc
  • Correção do movimento de conteúdo para uma subcomposição 92d4156.

Versão 1.5.0-alpha02

5 de abril de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.5.0-alpha02. A versão 1.5.0-alpha02 contém estas confirmações.

Novos recursos

  • O operador getValue do Kotlin agora pode ser combinável (f174f6e).

Correções de bugs e melhorias de desempenho

  • Os registros de objetos de estado foram substituídos por registros de estado inacessíveis (c986960).
  • Uso do compositor do escopo correto ao criar grupos (9a5e5b6).
  • Correção de endToMarker() ao encerrar grupos de nós. (d71d980).
  • Uso do grupo SlotWriter atual para verificar a desativação (a0b518b).
  • Usar IdentityArraySet para armazenar invalidações de snapshot (7f60cca).
  • Remova a fill em SlotTable.moveSlotGapTo() e mova-a para fechar (81f9935).
  • As invalidações ausentes durante a transferência de conteúdo móvel foram corrigidas (1d7c024).
  • Correção de invalidações imediatas para conteúdo móvel movido (8676618).
  • Redução das alocações para observações de snapshots (5bc535f).

Versão 1.5.0-alpha01

22 de março de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.5.0-alpha01. A versão 1.5.0-alpha01 contém estas confirmações.

Novos recursos

  • O Modifier.Node#coroutineScope foi adicionado para permitir que Modifier.Nodes inicie corrotinas (I76ef9).
  • Permita que Modifier.Nodes leia CompositionLocals implementando a interface CompositionLocalConsumerModifierNode. (Ib44df).

Versão 1.4

Versão 1.4.3

3 de maio de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.4.3 sem mudanças.

Versão 1.4.2

19 de abril de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.4.2. A versão 1.4.2 contém estas confirmações.

Correções de bugs

  • Correção de possível impasse na lista de snapshots e no mapa 2eb6570.

  • A adição de conteúdo a um SnapshotStateList ou SnapshotStateMap pode encontrar um impasse se a modificação for simultânea a uma gravação direta no registro de estado. Isso aumentou significativamente a probabilidade de que ele fosse encontrado com as alterações introduzidas por 93fcae828b, que usa gravações diretas para liberar registros não utilizados.

  • Os bloqueios agora estão ordenados de forma que nunca haja tentativa de obter um bloqueio de snapshot quando um bloqueio de mapa ou de lista é realizado.

Versão 1.4.1

5 de abril de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.4.1. A versão 1.4.1 contém estas confirmações.

Correções de bugs

  • Correção de endToMarker() ao encerrar os grupos de nós. d71d980

Versão 1.4.0

22 de março de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.4.0. A versão 1.4.0 contém estas confirmações.

Mudanças importantes desde a versão 1.3.0

  • Usar o valor inicializado de LiveData para a primeira composição 3680e25
  • ComposeNodeLifecycleCallback foi adicionado para observar o ciclo de vida dos nós do Compose. 8b6a258 (link em inglês)
  • Adicionar a propriedade parameterTypes a ComposableMethod 7b6c7ad

Correções de bugs e melhorias de desempenho

  • Limpar os dois índices de escopo em SnapshotStateObserver 29f4a3e
  • Adição de grupos necessários no corpo de lambdas não puláveis 7d06752
  • Melhorias nas características de referência de memória do estado do snapshot 93fcae8
  • Remoção de boxe nas pesquisas locais de composição 0875717
  • Use a chave correta para grupos de nós não reutilizáveis 6388d8d
  • Proteger SnapshotStateObserver de aplicações recursivas e simultâneas 98cb6ba
  • Adição de uma verificação de limites de índice de verificação ao método "get" do IdentityArraySet 35a77d3.
  • O módulo do Compose foi atualizado para usar as extensões ViewTreeLifecycleOwner 21c2122.
  • Envia notificações de aplicação depois que o Recomposer terminar o frame. 98f2641 (link em inglês)
  • Correção da falha de índice fora dos limites ao cancelar o Recomposer 8f8656f.
  • Sempre forçar a recomposição se os provedores pais de composição mudarem 9526fcc
  • Tolerância de recompositor para jobs cancelados a55f7ed
  • Melhoria no tratamento de invalidações para um grande número de compositores (9b7ed67).
  • Correção da geração de grupos de encerramento para retornos não locais b6f590c

Versão 1.4.0-rc01

8 de março de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.4.0-rc01. A versão 1.4.0-rc01 contém estas confirmações.

Correções de bugs

Versão 1.4.0-beta02

22 de fevereiro de 2023

Lançamento de androidx.compose.runtime:runtime:1.4.0-beta02 e androidx.compose.runtime:runtime-saveable:1.4.0-beta02. A versão 1.4.0-beta02 contém estas confirmações.

Versão 1.4.0-beta01

8 de fevereiro de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.4.0-beta01. A versão 1.4.0-beta01 contém estas confirmações.

Mudanças na API

  • Adição de ComposeNodeLifecycleCallback, que permite observar o ciclo de vida dos nós do Compose (I3731b).
  • @TestOnly foi adicionado a Composer.disableSourceInformation(), já que essa função só é segura para chamada em um teste. (I896c8).

Correções de bugs

  • Remoção do boxe nas pesquisas locais de composição (62f66a)
  • Melhoria das características de referência de memória do estado do snapshot (dfb451).

Versão 1.4.0-alpha05

25 de janeiro de 2023

Lançamento de androidx.compose.runtime:runtime:1.4.0-alpha05 e androidx.compose.runtime:runtime-saveable:1.4.0-alpha05. A versão 1.4.0-alpha05 contém estas confirmações.

Mudanças na API

  • Mais tipos/nulidade de funções inline/descontinuadas e ocultas (I24f91).

Versão 1.4.0-alpha04

11 de janeiro de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.4.0-alpha04. A versão 1.4.0-alpha04 contém estas confirmações.

Mudanças na API

  • TestMonotonicFrameClock agora usa a anotação experimental correta. (I95c9e).

Correções de bugs

  • Proteção de SnapshotStateObserver contra aplicações recursivas e simultâneas (d902fb).

Versão 1.4.0-alpha03

7 de dezembro de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.4.0-alpha03. A versão 1.4.0-alpha03 contém estas confirmações.

Mudanças na API

  • Adição de um novo método público à classe ComposableMethod análogo a java.lang.reflect.Method#getParameterTypes() (Iab0c3).

Correções de bugs

  • As notificações de captura de tela agora são enviadas depois que o Recomposer termina de aplicar as mudanças. (Iad6c0, b/222093277).

Versão 1.4.0-alpha02

9 de novembro de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.4.0-alpha02. A versão 1.4.0-alpha02 contém estas confirmações.

Versão 1.4.0-alpha01

24 de outubro de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.4.0-alpha01. A versão 1.4.0-alpha01 contém estas confirmações.

Mudanças na API

  • SnapshotStateList e SnapshotStateMap agora têm implementações explícitas de toList() e toMap(), respectivamente Esses métodos retornam o conteúdo atual sem fazer uma cópia, já que retornam os dados internos imutáveis usados para armazenar o conteúdo. Esse valor pode ser usado, por exemplo, para produzir um fluxo de valores usando snapshotFlow sem exigir a cópia dos dados. (Ica2bd).

Versão 1.3

Versão 1.3.3

11 de janeiro de 2023

Lançamento de androidx.compose.runtime:runtime-*:1.3.3. A versão 1.3.3 contém estas confirmações.

  • Nenhuma mudança desde a versão 1.3.2

Versão 1.3.2

7 de dezembro de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.3.2. A versão 1.3.2 contém estas confirmações.

Correções de bugs

  • Atualização para compatibilidade com androidx.compose.ui 1.3.2.

Versão 1.3.1

9 de novembro de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.3.1. A versão 1.3.1 contém estas confirmações.

Versão 1.3.0

24 de outubro de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.3.0. A versão 1.3.0 contém estas confirmações.

Mudanças importantes desde a versão 1.2.0

Suporte para edição em tempo real / processamento de exceções

Rastreamento de composição

APIs de reflexão de composição

Correções no ambiente de execução

Sistema de snapshots

Versão 1.3.0-rc01

5 de outubro de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.3.0-rc01. A versão 1.3.0-rc01 contém estas confirmações.

Correções de bugs

  • Correção de ArrayIndexOutOfBoundsException proveniente da tabela de slots (b/249076084).

Versão 1.3.0-beta03

21 de setembro de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.3.0-beta03. A versão 1.3.0-beta03 contém estas confirmações.

Mudança interruptiva de comportamento

  • O parâmetro para remember e rememberCoroutineScope mudou para crossinline. Isso informará um erro para retornos antecipados em vez de permitir um retorno antecipado, o que fará com que um erro interno posterior seja informado.
  • Essa mudança pode levar a novos erros do compilador a serem relatados, exigindo que retornos não locais sejam removidos dos lambdas transmitidos a essas funções. (Ibea62).

Versão 1.3.0-beta02

7 de setembro de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.3.0-beta02. A versão 1.3.0-beta02 contém estas confirmações.

Correções de bugs

  • Atualização da API (I64ca0).

Versão 1.3.0-beta01

24 de agosto de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.3.0-beta01. A versão 1.3.0-beta01 contém estas confirmações.

Mudanças na API

  • Um método find foi adicionado a CompositionData para permitir que as ferramentas para desenvolvedores que usam essa API encontrem rapidamente um subgrupo de composição usando a identidade dele. (I5794f).

Versão 1.3.0-alpha03

10 de agosto de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.3.0-alpha03. A versão 1.3.0-alpha03 contém estas confirmações.

Versão 1.3.0-alpha02

27 de julho de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.3.0-alpha02. A versão 1.3.0-alpha02 contém estas confirmações.

Mudanças na API

  • O ComposerKt.traceEventStart(Int, String) foi adicionado novamente para oferecer compatibilidade com versões anteriores (I6e6de).

Versão 1.3.0-alpha01

29 de junho de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.3.0-alpha01. A versão 1.3.0-alpha01 contém estas confirmações.

Mudanças na API

  • A funcionalidade utilitária foi movida para o ambiente de execução (I4f729).

Versão 1.2

Versão 1.2.1

10 de agosto de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.2.1. A versão 1.2.1 contém estas confirmações.

Correções de bugs

  • Correção de vazamento de memória: descarte de snapshots aninhados criados com base em snapshots transparentes (b/239603305).

Versão 1.2.0

27 de julho de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.2.0. A versão 1.2.0 contém estas confirmações.

Mudanças importantes desde 1.1.0

  • O Compose Runtime teve vários recursos introduzidos na versão 1.2.0, além de várias correções de bugs estabilizadores. O novo recurso mais significativo foi a introdução da movableContentOfAPI, que pode ser usada para permitir uma UX complexa, como transições de elementos compartilhados. A API movableContentOf converte um lambda combinável em um lambda que move o estado e os nós correspondentes para qualquer novo local em que ele é chamado. Quando a chamada anterior sai da composição, o estado é temporariamente preservado e, se uma nova chamada para a lambda entrar na composição, o estado e os nós associados serão movidos para o local da nova chamada. Se nenhuma nova chamada for adicionada, o estado será removido permanentemente, e os observadores serão notificados.

  • Se uma lambda movableContentOf for chamada várias vezes na mesma composição, novos estados e nós serão criados para cada chamada. À medida que as chamadas saem da composição e novas chamadas entram, o estado é movido das primeiras chamadas de saída para as chamadas de entrada na ordem em que são chamadas. Todo o estado não reivindicado por novas chamadas é removido permanentemente.

  • Além desse e de alguns outros recursos novos, muito tempo foi gasto na estabilização do ambiente de execução e do sistema de estado do snapshot. Vários vazamentos de memória foram removidos e os caminhos de código foram otimizados.

  • Confira abaixo uma lista resumida das mudanças:

Novos recursos no 1.2

Desempenho em 1.2

Correções de bugs em 1.2

Versão 1.2.0-rc03

29 de junho de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.2.0-rc03. A versão 1.2.0-rc03 contém estas confirmações.

Correções de bugs

  • Anteriormente, as observações de estado derivado eram removidas incondicionalmente do escopo de recomposição e da composição juntos, que quebravam outros escopos que ainda podiam estar observando o estado derivado. Essa mudança só remove instâncias de estado derivadas se elas não forem mais observadas por outros escopos. (b/236618362).

Versão 1.2.0-rc02

22 de junho de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.2.0-rc02. A versão 1.2.0-rc02 contém estas confirmações.

Versão 1.2.0-rc01

15 de junho de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.2.0-rc01. A versão 1.2.0-rc01 contém estas confirmações.

Mudanças na API

  • As interfaces em bibliotecas do Compose agora são criadas usando métodos de interface padrão do jdk8 (I5bcf1).

Versão 1.2.0-beta03

1º de junho de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.2.0-beta03. A versão 1.2.0-beta03 contém estas confirmações.

Versão 1.2.0-beta02

18 de maio de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.2.0-beta02. A versão 1.2.0-beta02 contém estas confirmações.

Versão 1.2.0-beta01

11 de maio de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.2.0-beta01. A versão 1.2.0-beta01 contém estas confirmações.

Novos recursos

  • Esta é a primeira versão Beta da 1.2.

Mudanças na API

  • Adição do Snapshot.unsafeEnter/unsafeLeave experimental (I108f3).
  • A API Snapshot.asContextElement() experimental foi adicionada (Iff072).
  • A anotação @ComposableTarget e as anotações marcadas por @ComposableTargetMarker agora podem ser usadas no escopo do arquivo com o prefixo @file. Usar uma anotação de destino no escopo do arquivo faz com que o compilador suponha que todas as funções combináveis do arquivo sejam destinadas ao aplicador associado. Por exemplo, o uso de @file:UiComposable declara que todas as funções @Composable segmentam o aplicador da interface do Compose. Uma função que precisa segmentar outro aplicador precisa fornecer explicitamente a anotação do marcador de destino para o aplicador desejado (I40804).

Versão 1.2.0-alpha08

20 de abril de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.2.0-alpha08. A versão 1.2.0-alpha08 contém estas confirmações.

Mudanças na API

  • TracingInProgress foi adicionado à interface CompositionTracer. (Ic6f12).
  • Adição de recomposeScopeIdentity ao Composer (I0c873).
  • Foram restritas APIs de rastreamento (Composer.setTracer) para OptIn(InternalComposeTracingApi). (I9187f).
  • Adição de ResuableContentHost, que permite melhor controle sobre o ciclo de vida do estado criado para conteúdo reutilizável Por exemplo, se uma subcomposição estiver temporariamente fora de uso, o conteúdo poderá ser desativado fazendo com que todo o estado memorizado da composição seja esquecido, acionando, por exemplo, todos os efeitos descartáveis. (I2c0f2, b/220322704).

Versão 1.2.0-alpha07

6 de abril de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.2.0-alpha07. A versão 1.2.0-alpha07 contém estas confirmações.

Mudanças na API

  • A nova função Snapshot.withoutReadObservation { ... } foi adicionada. Ela permite que os usuários executem a lambda transmitida sem se inscreverem nas mudanças de valores de estado lidos durante esse bloco. Ela pode ser útil em casos de uso quando você quiser se beneficiar das leituras/gravações seguras para linhas de execução baseadas em snapshots, mas quiser ler o valor sem causar uma recomposição ou uma nova medição desnecessárias (I9f365, b/214054486).

Versão 1.2.0-alpha06

23 de março de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.2.0-alpha06. A versão 1.2.0-alpha06 contém estas confirmações.

Versão 1.2.0-alpha05

9 de março de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.2.0-alpha05. A versão 1.2.0-alpha05 contém estas confirmações.

Contribuição externa

  • Atualização para usar as corrotinas Kotlinx 1.6.0 (I3366d).

Versão 1.2.0-alpha04

23 de fevereiro de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.2.0-alpha04. A versão 1.2.0-alpha04 contém estas confirmações.

Mudanças na API

  • Adicionados os elementos ComposableTarget, ComposableTargetMarker e ComposableOpenTarget, que permitem gerar relatórios sobre o tempo de compilação quando uma função combinável é chamada para um aplicador que não foi projetado para uso.

    Na maioria dos casos, as anotações podem ser inferidas pelo plug-in do compilador do Compose. Portanto, o uso direto delas é raro. Os casos que não podem ser inferidos incluem a criação e o uso de um applier personalizado, funções combináveis abstratas (como métodos de interface), campos ou variáveis globais que são lambdas combináveis (as variáveis locais e os parâmetros são inferidos) ou o uso de ComposeNode ou funções combináveis relacionadas.

    Para appliers personalizados, as funções combináveis que chamam ComposeNode ou ReusableComposeNode precisam adicionar uma anotação CompoableTarget à função e a qualquer tipo de parâmetro lambda combinável. No entanto, é recomendável criar uma anotação com ComposableTargetMarker e, em seguida, usar essa anotação marcada em vez de usar a ComposableTarget diretamente. Uma anotação combinável marcada com ComposableTargetMarker é equivalente a uma ComposbleTarget com o nome totalmente qualificado da classe de atributo como o parâmetro do applier. Para conferir um exemplo de como usar a ComposableTargetMarker, consulte anroidx.compose.ui.UiComposable (I38f11).

Versão 1.2.0-alpha03

9 de fevereiro de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.2.0-alpha03. A versão 1.2.0-alpha03 contém estas confirmações.

Mudanças na API

  • Adição do movableContentOf, que converte um lambda que pode ser composto em um que move o estado e os nós correspondentes para qualquer novo local em que ele é chamado. Quando a chamada anterior sai da composição, o estado é temporariamente preservado e, se uma nova chamada para o lambda entrar nela, o estado e os nós associados serão movidos para o local da nova chamada. Se nenhuma nova chamada for adicionada, o estado vai ser removido permanentemente e os observadores serão notificados.

    Se uma lambda movableContentOf é chamada várias vezes na mesma composição, novos estados e nós são criados para cada chamada. À medida que as chamadas saem da composição e novas entram, o estado é movido das primeiras chamadas de saída para as de entrada na ordem em que são chamadas. Remoção permanente de todos os estados não reivindicados por novas chamadas (Ib4850).

  • Adição de uma API de rastreamento à composição para permitir que as ferramentas forneçam um rastreamento mais detalhado de funções de composição. Agora, o compilador gera chamadas para a API de rastreamento que incluem informações de origem (Ib0eb5).

    Para remover essas chamadas e as informações de origem associadas de um build de lançamento, adicione a seguinte regra do Proguard:

      -assumenosideeffects public class androidx.compose.runtime.ComposerKt {
          boolean isTraceInProgress();
          void traceEventStart(int,java.lang.String);
          void traceEventEnd();
      }
    
  • Adição de InternalComposeScope, que dá às ferramentas a capacidade de identificar um elemento combinável durante as recomposições (I07a3f).

Versão 1.2.0-alpha02

26 de janeiro de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.2.0-alpha02. A versão 1.2.0-alpha02 contém estas confirmações.

Versão 1.2.0-alpha01

12 de janeiro de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.2.0-alpha01. A versão 1.2.0-alpha01 contém estas confirmações.

Mudanças na API

  • O campo identity foi adicionado a CompositionData para gerar IDs invariáveis no Layout Inspector (Ic116e).

Atualizações de dependência

  • Agora depende do Kotlin 1.6.10.

Versão 1.1

Versão 1.1.1

23 de fevereiro de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.1.1. A versão 1.1.1 contém estas confirmações.

Correções de bugs

  • A NullPointerException em androidx.compose.ui.platform.RenderNodeLayer.updateDisplayList foi corrigida (aosp/1947059, b/206677462).
  • A falha causada pelo conteúdo da área de transferência durante a leitura no Android foi corrigida (I06020, b/197769306).
  • RTL corrigido no elemento LazyVerticalGrid (aosp/1931080, b/207510535).

Versão 1.1.0

9 de fevereiro de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.1.0. A versão 1.1.0 contém estas confirmações.

Mudanças importantes desde a versão 1.0.0

  • Versão estável do efeito de rolagem do Android 12.
  • Melhorias no dimensionamento da área de toque.
  • Em relação ao Compose 1.0, os componentes do Material Design aumentam o espaço de layout para atender ao tamanho da área de toque das diretrizes de acessibilidade (em inglês) do Material Design. Por exemplo, a área de toque do botão será expandida para um tamanho mínimo de 48x48dp, mesmo que você defina um tamanho menor. Isso alinha o Compose Material ao mesmo comportamento dos componentes do Material Design para que haja consistência caso você combine visualizações e o Compose. Essa mudança também garante que, ao criar a interface usando os componentes do Compose Material, os requisitos mínimos para a acessibilidade da área de toque sejam atendidos.
  • Versão estável da coluna de navegação.
  • Upgrade de várias APIs anteriormente experimentais para a versão estável.
  • Compatibilidade com as versões mais recentes do Kotlin.

Versão 1.1.0-rc03

26 de janeiro de 2022

Lançamento de androidx.compose.runtime:runtime-*:1.1.0-rc03. A versão 1.1.0-rc03 contém estas confirmações.

Correções de bugs

  • Atualização para oferecer suporte ao Compose Material 1.1.0-rc03.

Versão 1.1.0-rc01

15 de dezembro de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.1.0-rc01. A versão 1.1.0-rc01 contém estas confirmações.

Versão 1.1.0-beta04

1º de dezembro de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.1.0-beta04. A versão 1.1.0-beta04 contém estas confirmações.

Novos recursos

  • Foi adicionada compatibilidade com o Kotlin 1.6.0.

Versão 1.1.0-beta03

17 de novembro de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.1.0-beta03. A versão 1.1.0-beta03 contém estas confirmações.

Versão 1.1.0-beta02

3 de novembro de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.1.0-beta02. A versão 1.1.0-beta02 contém estas confirmações.

Mudanças na API

  • O código do snapshot foi dividido em vários arquivos, mas todos ainda estão na mesma classe JVM (Ic6c98).

Versão 1.1.0-beta01

27 de outubro de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.1.0-beta01. A versão 1.1.0-beta01 contém estas confirmações.

Versão 1.1.0-alpha06

13 de outubro de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.1.0-alpha06. A versão 1.1.0-alpha06 contém estas confirmações.

Mudanças na API

  • Remoção da InternalCompilerApi dos métodos do Composer que precisam ser chamados entre módulos (I1aa0b).
  • Recomposer.state foi descontinuado e substituído pelo Recomposer.currentState para mudar o tipo para um StateFlow (Ic2ab3, b/197773820).

Versão 1.1.0-alpha05

29 de setembro de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.1.0-alpha05. A versão 1.1.0-alpha05 contém estas confirmações.

Versão 1.1.0-alpha04

15 de setembro de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.1.0-alpha04. A versão 1.1.0-alpha04 contém estas confirmações.

Versão 1.1.0-alpha03

1º de setembro de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.1.0-alpha03. A versão 1.1.0-alpha03 contém estas confirmações.

Novos recursos

  • O Compose Compiler agora oferece suporte a versões mais antigas do Compose Runtime (1.0). Antes dessa mudança, o Compose Compiler era compatível apenas com versões iguais ou mais recentes do Compose Runtime. Agora, o Compose Compiler é compatível com uma versão mais antiga do Compose Runtime (1.0) (aosp/1796968).
  • O Compose 1.1.0-alpha03 foi atualizado para depender do Kotlin 1.5.30 (I74545).

Versão 1.1.0-alpha02

18 de agosto de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.1.0-alpha02. A versão 1.1.0-alpha02 contém estas confirmações.

Versão 1.1.0-alpha01

4 de agosto de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.1.0-alpha01. A versão 1.1.0-alpha01 contém estas confirmações.

Versão 1.0

Versão 1.0.5

3 de novembro de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.0.5. A versão 1.0.5 contém estas confirmações.

Correções de bugs

  • Uma falha de rastreamento de instâncias derivedStateOf foi corrigida (aosp/1792247).

Versão 1.0.4

13 de outubro de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.0.4. A versão 1.0.4 contém estas confirmações.

Atualizações de dependência

  • Atualização para depender do Kotlin 1.5.31.

Versão 1.0.3

29 de setembro de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.0.3. A versão 1.0.3 contém estas confirmações.

Atualizações de dependência

  • Atualização para depender do Kotlin 1.5.30.

Versão 1.0.2

1º de setembro de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.0.2. A versão 1.2.0 contém estas confirmações.

Atualização para aceitar a versão 1.0.2 do Compose. O Compose 1.0.2 ainda é compatível com o Kotlin 1.5.21.

Versão 1.0.1

4 de agosto de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.0.1. A versão 1.0.1 contém estas confirmações.

Atualizações de dependência

  • Atualização para depender do Kotlin 1.5.21.

Versão 1.0.0

28 de julho de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.0.0. A versão 1.0.0 contém estas confirmações.

Principais recursos da versão 1.0.0

Esta é a primeira versão estável do Compose. Confira mais detalhes na postagem do blog oficial sobre o lançamento do Compose (link em inglês).

Problemas conhecidos

  • Se você está usando o Android Studio Bumblebee Canary 4 ou o AGP 7.1.0-alpha04/7.1.0-alpha05, pode encontrar esta falha:

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

    Para corrigi-la, aumente temporariamente a minSdkVersion para 24+ no arquivo build.gradle. Esse problema será corrigido na próxima versão do Android Studio Bumblebee e no AGP 7.1 (b/194289155).

Versão 1.0.0-rc02

14 de julho de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.0.0-rc02. A versão 1.0.0-rc02 contém estas confirmações.

  • Correção de disputas em SnapshotStateObserver que causavam NullPointerExceptions esporádicas (aosp/1763445, aosp/1758105, b/192677711).
  • Correção de problemas com snapshots do ambiente de execução que causavam falhas 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).

Versão 1.0.0-rc01

1º de julho de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.0.0-rc01. A versão 1.1.0-rc01 contém estas confirmações.

Versão 1.0.0-beta09

16 de junho de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.0.0-beta09. A versão 1.0.0-beta09 contém estas confirmações.

Regras de perfil adicionadas

Nesta versão, adicionamos as regras de perfil aos seguintes módulos do Compose (I14ed6):

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

O que são as regras de perfil?

  • As regras de perfil para uma biblioteca são especificadas em um arquivo de texto baseline-prof.txt localizado no diretório src/main ou equivalente. O arquivo especifica uma regra por linha. Nesse caso, uma regra é um padrão para a correspondência de métodos ou classes na biblioteca. A sintaxe dessas regras é um superconjunto do formato de perfil do ART legível que é usado junto com adb shell profman --dump-classes-and-methods .... Essas regras podem ter uma das duas formas destinadas a métodos ou classes.

  • Uma regra de método tem o seguinte padrão:

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • E uma regra de classe tem o seguinte padrão:

    <CLASS_DESCRIPTOR>
    
  • Aqui, <FLAGS> é um ou mais dos caracteres H, S e P, para indicar se esse método precisa ser sinalizado como "Hot" (frequente), "Startup" (de inicialização) ou "Post Startup" (pós-inicialização).

  • O <CLASS_DESCRIPTOR> é o descritor da classe à qual o método desejado pertence. Por exemplo, a classe androidx.compose.runtime.SlotTable teria o descritor Landroidx/compose/runtime/SlotTable;.

  • A <METHOD_SIGNATURE> é a assinatura do método e inclui o nome, os tipos de parâmetro e os tipos de retorno do método. Por exemplo, o método fun isPlaced(): Boolean em LayoutNode tem a assinatura isPlaced()Z.

  • Esses padrões podem ter caracteres curinga (**, * e ?) para que uma única regra inclua vários métodos ou classes.

O que as regras fazem?

  • Um método com a flag H indica que ele é um método "hot" (frequente) e precisa ser compilado com antecedência.

  • Um método com a flag S indica que ele é chamado na inicialização e precisa ser compilado com antecedência para evitar o custo da compilação e interpretação dele no momento da inicialização.

  • Um método com a flag P indica que ele é chamado após a inicialização.

  • A presença de uma classe nesse arquivo indica que ela é usada durante a inicialização e precisa ser pré-alocada no heap para evitar o custo do carregamento dela.

Como isso funciona?

  • As bibliotecas podem definir essas regras que serão empacotadas nos artefatos do AAR. Quando um app é criado com esses artefatos, essas regras são mescladas e usadas para criar um perfil do ART binário, compacto e específico para o app. O ART poderá usar esse perfil quando o app for instalado em dispositivos para compilar antecipadamente um subconjunto específico do app e melhorar o desempenho dele, especialmente a primeira execução. Isso não terá efeito nos aplicativos depuráveis.

Versão 1.0.0-beta08

2 de junho de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.0.0-beta08. A versão 1.0.0-beta08 contém estas confirmações.

Mudanças na API

  • O valor State<T> agora é State<out T> (I69049).
  • Mudança na API ControlledComposition para permitir que alterações sejam recompostas em uma única transmissão de recomposição (Iaafd1, b/184173932).

Versão 1.0.0-beta07

18 de maio de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.0.0-beta07. A versão 1.0.0-beta07 contém estas confirmações.

Mudanças na API

  • Novas APIs do Compose Compiler que permitem que as informações de origem geradas pelo compilador sejam removidas durante a minificação da origem foram adicionadas (Ia34e6).
  • Introdução de ReusableContent, que tentará reutilizar os nós no conteúdo em vez de substituí-los quando a chave for alterada. Quando a chave for alterada, os valores anteriores na tabela de slot do conteúdo serão ignorados, exceto os nós gerados e os valores usados para atualizar os nós.

    Introdução de ReusableComposeNode que reutilizará o nó emitido em vez de substituí-lo, como feito para o ComposeNode (I1dd86).

  • @ComposeCompilerApi não precisa mais da anotação @RequiresOptIn (Iab690).

Correções de bugs

  • LazyColumn/Row manterá até dois itens visíveis anteriormente ativos (não descartados), mesmo quando eles já tiverem rolado para fora da tela. Isso permite que o componente reutilize as subcomposições ativas quando precisarmos compor um novo item, o que melhora o desempenho de rolagem (Ie5555).

Versão 1.0.0-beta06

5 de maio de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.0.0-beta06. A versão 1.0.0-beta06 contém estas confirmações.

Mudanças na API

  • @ComposeCompilerApi não precisa mais da anotação @RequiresOptIn (Iab690).

Versão 1.0.0-beta05

21 de abril de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.0.0-beta05. A versão 1.0.0-beta05 contém estas confirmações.

Mudanças na API

  • Remoção de @InternalComposeApi para gravar leituras e gravações de capturas de tela (Id134d).

Correções de bugs

  • Os arquivos AndroidManifest de ui-test-manifest e ui-tooling-data agora são compatíveis com o Android 12 (I6f9de, b/184718994).

Versão 1.0.0-beta04

7 de abril de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.0.0-beta04. A versão 1.0.0-beta04 contém estas confirmações.

Correções de bugs

  • Antes dessa mudança, as funções locais que podem ser compostas eram ignoradas com base nos parâmetros delas. Após essa mudança, nenhuma função de composição local vai ser ignorada. Essa mudança é feita porque é comum e esperado que as funções locais capturem parâmetros de pai e mãe. Nesse caso, ignorá-los é uma fonte comum de bugs.

    Para resumir, considere o exemplo:

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

    Antes dessa mudança, a função que pode ser composta ShowCount sempre era ignorada, mesmo depois de atualizar o parâmetro count. Entretanto, esse não é mais o caso (I5648a).

  • Correção do problema quando rememberSaveable() restaurava o valor antigo ao ser usado com parâmetros de entrada (I1b110, b/182403380).

Versão 1.0.0-beta03

24 de março de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.0.0-beta03. A versão 1.0.0-beta03 contém estas confirmações.

Mudanças na API

  • O uso de DefaultMonotonicFrameClock foi descontinuado. Chamar withFrameNanos ou Recomposer.runRecomposeAndApplyChanges sem MonotonicFrameClock agora vai gerar uma IllegalStateException (I4eb0d).

Versão 1.0.0-beta02

10 de Março de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.0.0-beta02. A versão 1.0.0-beta02 contém estas confirmações.

Correções de bugs

  • Aplicação de restrições ao uso público de APIs experimentais (I6aa29, b/174531520).
  • Correção de rememberSaveable { mutableStateOf(0) } corrompidos quando usados dentro de um destino de navigation-compose (I1312b, b/180042685, b/180701630).

Versão 1.0.0-beta01

24 de fevereiro de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.0.0-beta01. A versão 1.0.0-beta01 contém estas confirmações.

Esta é a primeira versão do Compose 1.0.0 Beta.

Mudanças na API

  • Adição da API experimental Recomposer.runRecomposeConcurrentlyAndApplyChanges para recompor composições invalidadas da repetição de frame principal (I342d0).
  • Os elementos que podem ser compostos marcados com @ReadOnlyComposable agora são validados no momento da compilação para garantir que eles só façam chamadas para outros @ReadOnlyComposables (I58961).
  • A defaultFactory para compositionLocalOf e staticCompositionLocalOf agora é obrigatória, não opcional.

    Essa mudança remove um possível erro para tipos não anuláveis, em que nenhuma fábrica padrão era fornecida. Anteriormente, isso forneceria uma referência nula para um tipo não anulável.

    Para tipos anuláveis, considere fornecer { null } como a fábrica padrão.

    Não recomendamos o uso de locais com tipos não anuláveis, a menos que um padrão simples possa ser fornecido. Se não houver esse padrão, o lambda defaultFactory gerará uma exceção. No entanto, isso significa que os consumidores do local terão uma dependência implícita sendo fornecida, mas não aplicada pelo sistema de tipos (Ifbd2a).

  • Os símbolos de uso suspenso foram removidos da Compose Runtime (I3252c).

  • O emptyContent() suspenso foi removido. Use {} (Idb33f, b/179432510).

  • Providers foi renomeado como CompositionLocalProvider.

    • O construtor Composition não aceita mais um parâmetro chave e foi descontinuado.
    • A currentCompositeKeyHash foi transformada em uma propriedade combinável de nível superior, em vez de uma função combinável de nível superior.
    • CompositionData e CompositionGroup foram movidos para o namespace androidx.compose.runtime.tooling.
    • ComposableLambda foi transformada em uma interface em vez de uma classe concreta e não tem mais parâmetros de tipo.
    • ComposableLambdaN foi transformada em uma interface em vez de uma classe concreta e não tem mais parâmetros de tipo.
    • A função snapshotFlow foi movida para o namespace androidx.compose.runtime.
    • O método de mesclagem de SnapshotMutationPolicy não é mais experimental.
    • A função clearRoots de nível superior de @TestOnly foi removida. Ela não é mais necessária.
    • As funções keySourceInfoOf e resetSourceInfo foram removidas. Elas não são mais necessárias.
    • Composer.collectKeySourceInformation foi removido. Ele não é mais necessário.
    • Os métodos isJoinedKey, joinedKeyLeft e joinedKeyRight foram removidos. Eles não são mais necessários.
    • Várias APIs de nível superior foram movidas e reorganizadas em arquivos diferentes. Devido à semântica de classe de arquivos do Kotlin, essa mudança corrompe a compatibilidade binária, mas não a compatibilidade com a fonte. Portanto, isso não vai ser um problema para a maioria dos usuários
    • (I99b7d, b/177245490).
  • SnapshotStateObserver não é mais experimental (Id2e6a).

  • Algumas APIs anteriormente descontinuadas foram excluídas (Ice5da, b/178633932).

  • Foram feitas as seguintes mudanças na API do Material Design:

    • Adição do parâmetro contentPadding a Top/BottomAppBar para permitir a personalização do padding padrão.
    • Reordenados parâmetros no BackdropScaffold para seguir as diretrizes da API para parâmetros obrigatórios antes dos opcionais.
    • O parâmetro icon em BottomNavigationItem foi movido para depois de selected e onClick.
    • O parâmetro alwaysShowLabels em BottomNavigationItem foi renomeado como alwaysShowLabel.
    • Os parâmetros bodyContent em alguns componentes foram renomeados como content.
    • Parâmetros reordenados em ButtonDefaults.buttonColors(). Como o tipo dos parâmetros não mudou, isso não vai causar um erro no seu código. Confira se está usando parâmetros nomeados ou atualize a ordem manualmente; caso contrário o código não vai funcionar da mesma forma que antes.
    • Adição do parâmetro secondaryVariant a darkColors(). Essa cor costuma ser a mesma que secondary no tema escuro, mas é adicionada para consistência e maior personalização.
    • Como ElevationDefaults e animateElevation() não eram muito usados / úteis, eles foram removidos da plataforma da API pública.
    • onValueChangeEnd em Slider foi renomeado como onValueChangeFinished e transformado em anulável.
    • O parâmetro text em Snackbar foi renomeado como content para manter a consistência.
    • Adição do parâmetro contentPadding a DropdownMenuItem para permitir a personalização do padding padrão. Além disso, content passou a ser uma extensão em RowScope.
    • ModalDrawerLayout foi renomeado como ModalDrawer.
    • BottomDrawerLayout foi renomeado como BottomDrawer
    • (I1cc66).

Versão 1.0.0-alpha12

10 de fevereiro de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.0.0-alpha12. A versão 1.0.0-alpha12 contém estas confirmações.

Mudanças na API

  • O suporte a ViewGroups foi removido do UiApplier. Os elementos combináveis emitView com uso descontinuado foram removidos (Ifb214).
  • CompositionReference renomeada para ComposeContext (I53fcb).
  • ComponentActivity.setContent foi movido para androidx.activity.compose.setContent no módulo androidx.activity:activity-compose (Icf416).
  • A API Snapshot foi atualizada para ser mais consistente com as diretrizes da API, bem como com a ocultação de classes de implementação internas da API pública (Id9e32).
  • Ambients foi renomeado para corresponder à renomeação de Ambient para CompositionLocal. Ambients costumava ser chamado de AmbientFoo. Agora, CompositionLocals será chamado de LocalFoo (I2d55d).
  • Renomeação de Ambient para CompositionLocal e de ambientOf / staticAmbientOf para compositionLocalOf / staticCompositionLocalOf, respectivamente. Essa alteração ajuda a deixar a finalidade de CompositionLocal mais clara: um mecanismo para fornecer / recuperar valores de local para uma composição. As instâncias de CompositionLocal precisam ser prefixadas com Local, como val LocalFoo = compositionLocalOf { Foo() } (Ia55b6).
  • takeMutableSnapshot e takeSnapshot foram movidos para serem métodos complementares de Snapshot (I91f19).
  • A anotação @ComposableContract foi descontinuada e substituída por três anotações mais específicas.

    A @ComposableContract(restartable = false) se tornou @NonRestartableComposable, a @ComposableContract(readonly = true) se tornou @ReadOnlyComposable, a @ComposableContract(preventCapture = true) se tornou @DisallowComposableCalls e a @ComposableContract(tracked = true) foi removida (I60a9d).

  • O uso dos utilitários emptyContent() e (@Composable () -> Unit).orEmpty() foi suspenso por eles não terem mais valor ou impacto positivo no desempenho (I0484d).

  • snapshotFlow e withMutableSnapshot não são mais experimentais (I6a45f).

  • Os recompositores agora podem ser fechados. Os recompositores fechados continuarão a recomposição até que as corrotinas filhas sejam compostas. Recomposer.shutDown foi renomeado para eliminar o contraste com o fechamento (Ib6d76).

  • O artefato compose:runtime-dispatch foi descontinuado. MonotonicFrameClock agora pode ser encontrado em compose:runtime, e AndroidUiDispatcher pode ser encontrado em compose:ui (Ib5c36).

  • A API a que o plugin do compilador do Compose é destinado foi refatorada para usar uma interface em vez de uma classe concreta. A interface também não usa mais um parâmetro de tipo.

    Essa é uma mudança interna que não afeta a compatibilidade do código-fonte, mas é uma alteração interruptiva binária (I3b922, b/169406779).

  • Introdução do SnapshotMutableState (Icfd03).

  • DisposableEffectDisposable foi renomeado para DisposaleEffectResult (Ica7c6).

  • Remoção de Recomposer.current(). Por padrão, [Abstract]ComposeView agora usa recompositores criados de forma lenta e com escopo de janela gerados pelo ViewTreeLifecycleOwner para a janela. As marcações de animação com base em withFrameNanos e em recomposição vão ser pausadas enquanto o ciclo de vida do host estiver parado (I38e11).

  • O Recomposer.runningRecomposers agora oferece um StateFlow global de RecomposerInfo somente leitura para observar o estado de composição em andamento no processo. Use essa API em vez de Recomposer.current(), que agora teve o uso descontinuado (If8ebe).

  • DisposableEffectDisposable foi renomeado para DisposableEffectResult (I3ea68).

Versão 1.0.0-alpha11

28 de janeiro de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.0.0-alpha11. A versão 1.0.0-alpha11 contém estas confirmações.

Mudanças na API

  • Os elementos onCommit, onDispose e onActive foram descontinuados e substituídos pelas APIs SideEffect e DisposableEffect (If760e).
  • A API emit() e todas as sobrecargas foram suspensas e renomeadas para ComposeNode. As APIs são idênticas, apenas o nome é diferente para seguir as convenções de nomenclatura do Compose (I4137b).
  • Os elementos invalidate e writingReference() foram descontinuados e substituídos por currentRecomposeScope e rememberCompositionReference, respectivamente (I583a8).
  • O RememberObserver substituiu o CompositionLifecycleObserver, e o CompositionLifecycleObserver teve o uso suspenso.

    RememberObserver é uma substituição de CompositionLifecycleObserver com semânticas modificadas e métodos renomeados. A mudança para a nova API pode ser feita de maneira mecânica para objetos que são lembrados apenas uma vez e continua a ser a prática recomendada. No entanto, se uma referência foi lembrada mais de uma vez em uma composição, onRemembered é chamado para cada referência em que onEnter é chamado apenas uma vez. onEnter era chamado várias vezes quando o objeto era usado em subcomposições, como WithConstraints e Scaffold, tornando a única garantia de chamada de onEnter não confiável, e foi removido para RememberObserver.

    A interface RememberObserver adiciona a função onAbandoned, que é chamada se a instância de RememberObserver é retornada do callback transmitido para remember, mas não é lembrada no estado de composição e, portanto, a chamada de onRemembered nunca ocorre. Isso poderá ocorrer se uma exceção encerrar a composição antes de ela ser concluída ou se a composição for descartada porque o estado para o qual ela estava produzindo uma composição não é mais atual ou necessário. Se a instância de RememberObserver após a recomendação de referência única acima estiver rastreando um recurso externo, onForgotten e onAbandoned vão indicar que o recurso não é mais necessário. Se o objeto estiver rastreando o trabalho iniciado ou os recursos alocados em onRemembered, a função onAbandoned pode ser ignorada, porque não vai ser chamada se a onRemembered for chamada (I02c36).

  • Não marque funções collectAsState() como inline (Ia73e4).

Correções de bugs

  • WithConstraints foi reformulada como BoxWithConstraints e movida para foundation.layout (I9420b, b/173387208).
  • Use TestCoroutineDispatcher nos testes (I532b6).

Versão 1.0.0-alpha10

13 de janeiro de 2021

Lançamento de androidx.compose.runtime:runtime-*:1.0.0-alpha10. A versão 1.0.0-alpha10 contém estas confirmações.

Alteração interruptiva

  • A reestruturação da API do compilador interno permite criar lotes de mudanças nos nós gerados como resultado da composição na fase de "aplicar mudanças", após a conclusão de todas as funções @Composable.

    Essa é uma mudança comportamental que pode afetar o código do aplicativo, já que os nós não estão mais disponíveis em APIs internas e experimentais até que as mudanças sejam aplicadas. Isso pode ser resolvido com código circundante com dependências em um composto SideEffect para adiar a execução do código até que os nós tenham sido criados e inicializados (I018da).

Mudanças na API

  • Adição de uma maneira de rastrear se o Recomposer aplicou mudanças (I1b3e2).
  • Expansão das APIs [Abstract]ComposeView para permitir a reciclagem de visualizações baseadas no Compose, descartando a composição delas para recriar novamente mais tarde. Foram adicionadas APIs para instalar e descobrir Recomposers e CompositionReferences com escopo de janela para criar composições filhas.

    Adição do ViewComposeStrategy para configurar a estratégia de descarte de composição do [Abstract]ComposeViews. O comportamento padrão é descartar na remoção da janela (I860ab).

Correções de bugs

  • O Recomposer agora expõe um fluxo do estado atual, permitindo o monitoramento da sua atividade e da atividade de efeitos associados (Ifb2b9).
  • O keyEvent nativo agora pode ser acessado pelo keyEvent.nativeKeyEvent (I87c57, b/173086397).

Versão 1.0.0-alpha09

16 de dezembro de 2020

Lançamento de androidx.compose.runtime:runtime-*:1.0.0-alpha09. A versão 1.0.0-alpha09 contém estas confirmações.

Mudanças na API

  • Remoção de SlotTable, SlotReader e SlotWriter da API pública. Antes, eles eram marcados como InternalComposeAPI. Agora, eles são internos do módulo do Compose.

    CompositionData e CompositionGroup foram adicionados como substitutos da API de IU para extrair as informações da composição. Eles são públicos, mas não são destinados para uso fora da API de IU, já que fornecem as informações brutas que a API de IU interpreta (I31a9c).

  • A classe Applier não é mais considerada uma (Id85b0).

  • A interface Applier foi modificada para simplificar a criação de árvores de baixo para cima, em vez de cima para baixo.

    O método insert() foi renomeado como insertTopDown().

    Um novo método, insertBottomUp(), foi adicionado.

    Uma Applier insere nós na árvore que está editando com insertTopDown() ou insertBottomUp(), dependendo de qual apresenta melhor desempenho.

    Algumas árvores, como LayoutNode e View, são muito mais eficientes para criação de baixo para cima do que de cima para baixo. Antes dessa mudança, uma pilha de inserções era necessária para implementar de baixo para cima. Ela precisava ser copiada para cada Applier, que precisava da construção de baixo para cima para ter bom desempenho. Com essa mudança, um Applier substitui um insertBottomUp() para criar uma árvore de baixo para cima, e insertTopDown() para criar a árvore de cima para baixo (Icbdc2).

  • O Compose é compatível com getters de propriedade que podem fazer invocações de composição. A compatibilidade permanece, mas a sintaxe para declarar um getter da propriedade como @Composable foi modificada.

    A sintaxe agora obsoleta para fazer isso era a anotação da propriedade em si:

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

    A sintaxe que agora é correta para fazer isso é a anotação do getter da propriedade:

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

    As duas sintaxes vão funcionar por algum tempo, mas a antiga descontinuada vai causar um erro de compilação no futuro (Id9197).

Correções de bugs

Versão 1.0.0-alpha08

2 de dezembro de 2020

Lançamento de androidx.compose.runtime:runtime-*:1.0.0-alpha08. A versão 1.0.0-alpha08 contém estas confirmações.

Mudanças na API

  • Uma verificação de lint foi adicionada para posicionamento e nomeação do parâmetro lambda combinável, para conferir a consistência com as diretrizes do Compose. Também ocorreu a migração de algumas APIs usando children como o nome da lambda final para content, de acordo com a verificação e as orientações do lint (Iec48e).
  • O Recomposer não aceita mais um EmbeddingContext. As dependências de programação necessárias são adquiridas no effectCoroutineContext. O FrameManager foi descontinuado. As integrações de plataforma precisam inicializar o próprio gerenciamento global de snapshots (I02369).
  • A função RestorableStateHolder.withRestorableState foi renomeada como RestorableStateProvider (I66640).

Correções de bugs

  • Ambientes suspensos nomeados com Ambient como sufixo e substituídos por novas propriedades prefixadas com Ambient, seguindo outras diretrizes da API Compose e Ambients (I33440).
  • Remoção do antigo módulo ui-test e dos stubs dele (I3a7cb).

Versão 1.0.0-alpha07

11 de novembro de 2020

Lançamento de androidx.compose.runtime:runtime-*:1.0.0-alpha07. A versão 1.0.0-alpha07 contém estas confirmações.

Novos recursos

Mudanças na API

  • A anotação @UnionType foi suspensa (I57cde).
  • provideDefault foi adicionado como alternativa para fornecer ambientes e pode ser usado para especificar valores de ambiente que só serão definidos quando não houver um valor de ambiente já fornecido (Id6635, b/171024925).
  • LaunchedTask foi renomeado como LaunchedEffect para fins de consistência com as APIs SideEffect e DisposableEffect. Para incentivar as práticas recomendadas, o uso de LaunchedEffect sem parâmetros de assunto não será permitido (Ifd3d4).
  • Agora, o Applier tem callbacks BeginChanges/onEndChanges que são invocados quando um Composer começa/termina de aplicar as mudanças na árvore. Isso pode ser usado para o gerenciamento de recursos de agrupamento, se necessário (Icf476).
  • O Recomposer agora exige um CoroutineContext na construção (Ic4610).
  • Mudanças na implementação interna de SlotTable que não afetarão a API pública (If9828).
  • Adaptadores rxjava2 obsoletos que não assumem o valor inicial foram removidos (Idb72f).

Correções de bugs

  • O elemento foundation.Text foi descontinuado e substituído por material.Text. Para uma API de texto básica e discreta que não consome valores de um tema, consulte androidx.compose.foundation.BasicText (If64cb).
  • O uso de BaseTextField foi descontinuado. Use BasicTextField (I896eb).
  • Vários símbolos relacionados ao layout foram movidos de androidx.compose.ui para androidx.compose.layout.ui (I0fa98, b/170475424).

Contribuição externa

  • Adição do módulo runtime-rxjava3 para Compose. Semelhante a runtime-rxjava2 (I02cbf).

Versão 1.0.0-alpha06

28 de outubro de 2020

Lançamento de androidx.compose.runtime:runtime-*:1.0.0-alpha06. A versão 1.0.0-alpha06 contém estas confirmações.

Mudanças na API

  • Recomposer agora é um ComposeReference e um pai de composição válido. Agora, o Recomposer explícito é obrigatório em menos lugares (I4036f).
  • A API de contraparte DisposableEffect foi adicionada ao SideEffect, preenchendo o papel de onCommit-with-params, mas com um onDispose obrigatório.
    • Adição da API rememberUpdatedState para publicar dados de recomposição para processos contínuos ou de longa duração, como DisposableEffects ou LaunchedTasks
    • (Id50b9).
  • MutableVector agora implementa RandomAccess (I85d73, b/170461551).
  • Adição do elemento combinável do SideEffect para aplicar efeitos colaterais de composição a objetos gerenciados pela composição. O SideEffect tem como objetivo substituir o elemento combinável do onCommit (Ia77c2).
  • Novo RestorableStateHolder da API experimental. Permite salvar o estado definido com [savedInstanceState] e [rememberSavedInstanceState] para a subárvore antes de descartá-la para possibilitar a recomposição dela na próxima vez com o estado restaurado (I66884, b/166586419).

Correções de bugs

  • Ativação de transições em ComposeTestRule. Remoção da opção para ativar o cursor piscante na ComposeTestRule (If0de3).

Versão 1.0.0-alpha05

14 de outubro de 2020

Lançamento de androidx.compose.runtime:runtime-*:1.0.0-alpha05. A versão 1.0.0-alpha05 contém estas confirmações.

Mudanças na API

  • Suspensão do modificador de entrada pelo Modifier.pointerInput experimental (Ia77d2).
  • O desempenho de rolagem de LazyColumn/Row foi melhorado com menos trabalho na subcomposição em cada rolagem. O novo método hasInvalidations() foi adicionado para a classe Composition. O método hasPendingChanges() do Recomposer foi renomeado como hasInvalidations() (Ib2f32, b/168293643, b/167972292, b/165028371).
  • Adição da API productState para iniciar corrotinas da composição que atualizam um único valor State<T> ao longo do tempo (Id4a57).
  • launchInCompose foi renomeado como LaunchedTask para corresponder às diretrizes da API Compose (I99a8e).
  • Agora, a ordem das chamadas place() em Layouts personalizados define a ordem de desenho para os filhos (Ibc9f6).

Versão 1.0.0-alpha04

1º de outubro de 2020

Lançamento de androidx.compose.runtime:runtime-*:1.0.0-alpha04. A versão 1.0.0-alpha04 contém estas confirmações.

Mudanças na API

  • OwnerScope foi adicionado para permitir a coleta de escopos de observação de desenho e layout quando eles deixam de ser válidos (Ic4cf8).
  • Adição da API deriveStateOf para criar objetos State com base em um cálculo que pode ler e derivar de outros objetos State (If758b).
  • Adição da API TestOnly para SnapshotStateObserver (I6e2a9).

Correções de bugs

  • O uso de foundation.Box foi descontinuado. Use foundation.layout.Box (Ie5950, b/167680279).

Versão 1.0.0-alpha03

16 de setembro de 2020

Lançamento de androidx.compose.runtime:runtime-*:1.0.0-alpha03. A versão 1.0.0-alpha03 contém estas confirmações.

Mudanças na API

  • CompositionCoroutineScope não implementa mais MonotonicFrameClock. Os autores de chamadas de withFrameNanos precisam importar a função de nível superior explicitamente (Icb642, b/166778123).

Correções de bugs

  • As funções de teste globais, como onNode ou waitForIdle, estão obsoletas. Migre para as novas contrapartes que estão definidas em ComposeTestRule (I7f45a).
  • launchInComposition não inicia mais corrotinas não despachadas (Ief6af, b/166486000).

Versão 1.0.0-alpha02

2 de setembro de 2020

Lançamento de androidx.compose.runtime:runtime-*:1.0.0-alpha02. A versão 1.0.0-alpha02 contém estas confirmações.

Mudanças na API

  • Adicionadas as APIs snapshotFlow e withMutableSnapshot para consumir e produzir modificações de dados de snapshots (I3e722).
  • A convenção de chamada para funções que podem ser compostas foi modificada. Essa é uma alteração interruptiva binária. Todas as bibliotecas precisam ser recompiladas para funcionar com essa versão do plug-in compilador do Compose.

    Essa mudança não cria uma alteração interruptiva no nível da origem, uma vez que as únicas APIs que foram modificadas são APIs do compilador que têm uma permissão explícita (I7afd2, b/158123185).

  • Remoção dos métodos de programação do EmbeddingContext (I7b9be)

  • O uso de onPreCommit foi descontinuado. Agora, o onCommit tem o comportamento do onPreCommit.

    O onCommit e o onActive agora são executados no mesmo frame "choreographer" que as mudanças de composição confirmadas, em vez de no início do próximo frame "choreographer" (I70403).

Versão 1.0.0-alpha01

26 de agosto de 2020

Lançamento de androidx.compose.runtime:runtime-*:1.0.0-alpha01. A versão 1.0.0-alpha01 contém estas confirmações.

Versão 0.1.0-dev

Versão 0.1.0-dev17

19 de agosto de 2020

Lançamento de androidx.compose.runtime:runtime-*:0.1.0-dev17. A versão 0.1.0-dev17 contém estas confirmações.

Mudanças na API

  • Agora, as emissões personalizadas podem declarar que um ou mais setters podem ser ignorados e recompostos independentemente da emissão (Ibbd13)
  • As chamadas FrameManager descontinuadas foram removidas.

    As APIs de composição interna foram mudadas para reduzir a quantidade de sobrecarga para rastrear objetos de estado, como mutableStateof() (I80ba6).

  • O elemento de composição state { ... } foi descontinuado e substituído pelas chamadas explícitas para remember { mutableStateOf(...) } para maior clareza. Isso reduz a plataforma geral da API e o número de conceitos de gerenciamento de estado e corresponde ao padrão by mutableStateOf() para delegação de propriedade de classe (Ia5727).

  • Agora, Flow.collectAsState determina o agente padrão da composição, em vez de usar o Dispatchers.Main (I9c1d9).

  • Correção da falha que ocorria quando algo que salvava o estado era usado dentro do loop. Agora, é permitido ter a mesma chave em savedInstanceState(), a API UiSavedStateRegistry está ajustada para esse novo requisito (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561)

Correções de bugs

  • O uso de emitView foi descontinuado. Use AndroidView, se possível, para emitir Views dentro do Compose. A composição direta de Views e ViewGroups não vai estar disponível no futuro, a menos que sejam folhas combináveis. Nesse caso, a composição direta é possível usando o AndroidView (I29b1e, b/163871221)

Versão 0.1.0-dev16

5 de agosto de 2020

androidx.compose.runtime:runtime-*:0.1.0-dev16 é lançado. A versão 0.1.0-dev16 contém estas confirmações.

Mudanças na API

  • A política de mutação padrão de mutableStateOf(), ambientOf() e savedInstanceStateOf() foi mudada para structuralEqualityPolicy() em vez de referentialEqualityPolicy().

    Agora, para decidir se um novo valor atribuído a uma instância de mutableStateOf() é considerado uma mudança, o padrão é usar == em vez de ===.

    Consulte https://kotlinlang.org/docs/reference/equality.html (link em inglês)

    ambientOf() e savedInstanceStateOf() usam mutableStateOf() nas implementações deles, então eles foram mudados para que haja consistência com mutableStateOf().

    O uso da igualdade estrutural se aproxima mais das expectativas do desenvolvedor.

    Por exemplo,

    val state = mutableStateOf(1f)
    

    seguido por

    state.value = 1f
    

    não será mais considerado como uma mudança no state, e os usos do state durante a composição não precisarão mais ser recompostos.

    Essa é uma alteração interruptiva, mas geralmente isso não tem um efeito perceptível em um aplicativo, como ao usar classes que não modificam equals().

    As classes que modificam equals(), como as classes data, podem ter uma degradação no desempenho, porque os métodos equals() agora são, por padrão, chamados quando atribuídos a um mutableStateOf().

    O comportamento anterior pode ser restaurado adicionando o parâmetro de política policy = referentialEqualityPolicy() às chamadas para mutableStateOf(), ambientOf() e savedInstanceStateOf() (Ic21a7).

  • Row e Column agora executam funções in-line reduzindo significativamente a sobrecarga de uso (I75c10).

Correções de bugs

  • Suspensão de setViewContent. Use setContent (I7e497, b/160335130).
  • Adição de MonotonicFrameAnimationClock que permite usar um MonomonicFrameClock como um AnimationClockObservable para fazer a ponte entre os novos relógios e APIs baseados em corrotinas que ainda usam os relógios antigos baseados em callback.

    O equivalente de ManualAnimationClock do ManualAnimationClock agora é ManualFrameClock (I111c7, b/161247083).

  • O Modifier.stateDraggable foi completamente reformulado e renomeado como Modifier.swipeable. Uma nova classe SwipeableState foi introduzida, e as DrawerState e BottomDrawerState foram refatoradas para herdar dela. [Modal/Bottom]DrawerLayout não usa mais um parâmetro onStateChange (I72332, b/148023068).

  • O uso de Modifier.plus foi descontinuado. Use Modifier.then. "Then" tem um sinal mais forte de ordem, mas também proíbe o tipo Modifier.padding().background() + anotherModifier, que interrompe a cadeia e é mais difícil de ler (Iedd58, b/161529964).

  • SubcomposeLayout foi adicionado. Ele é um primitivo de baixo nível que permite compor os filhos durante a medição se quisermos usar alguns valores disponíveis posteriormente, durante a medição para a composição da subárvore. Por exemplo, WithConstraints não é implementado usando SubcomposeLayout (I25cc8)

  • O FilledTextField do Material foi renomeado como TextField, e o TextField de base foi renomeado como BaseTextField para facilitar a descoberta e o uso da API mais simples desejada (Ia6242, b/155482676).

  • Renomeação de Modifier.drawBackground como Modifier.background (I13677).

Versão 0.1.0-dev15

22 de julho de 2020

Lançamento de androidx.compose.runtime:runtime-*:0.1.0-dev15. A versão 0.1.0-dev15 contém estas confirmações.

Atualização de dependências

  • Para usar a versão 0.1.0-dev15 do Compose, será necessário atualizar suas dependências de acordo com os novos snippets de código mostrados acima em Como declarar dependências.

Mudanças na API

  • O uso da anotação @Model foi descontinuado. Use state e mutableStateOf como alternativas. Essa decisão de descontinuação foi tomada após uma discussão cuidadosa.

    Motivo

    O motivo inclui, mas não se limita ao seguinte:

    • Reduz a área de superfície da API e os conceitos que precisamos ensinar.
    • Alinha-se melhor a outros kits de ferramentas comparáveis (Swift UI, React, Flutter).
    • Decisão reversível. Podemos trazer @Model de volta a qualquer momento.
    • Remove o uso de caso isolado e dificulta responder a perguntas sobre como configurar o @Model como coisas que precisamos lidar.
    • Classes de dados @Model, equals, hashcode etc.
    • Como faço para que algumas propriedades sejam "observadas" e outras não?
    • Como especificar a igualdade organizacional x referencial a ser usada na observação?
    • Reduz a "mágica" no sistema. Reduziria a probabilidade de alguém supor que o sistema era mais inteligente do que é (ou seja, saber diferenciar uma lista).
    • Torna a granularidade da observação mais intuitiva.
    • Aprimora a refatoração da propriedade "variável" na classe.
    • Abre possibilidades para fazer otimizações específicas do estado.
    • Alinha-se melhor ao restante do ecossistema e reduz ambiguidades em relação a imutáveis ou à "adoção do estado mutável".

    Notas de migração

    Quase todos os usos existentes de @Model são facilmente transformados de duas maneiras. O exemplo abaixo tem uma classe @Model com duas propriedades apenas para fins de exemplo e sendo usada em um composto.

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

    Alternativa 1: use State<OriginalClass> e crie cópias.

    Essa abordagem é facilitada com as classes de dados do Kotlin. Basicamente, transforme todas as propriedades var anteriores em propriedades val de uma classe de dados, use state em vez de remember e atribua o valor do estado a cópias clonadas do original usando o método de conveniência copy(...) da classe de dados.

    É importante observar que essa abordagem só funciona quando as únicas mutações para essa classe foram feitas no mesmo escopo em que a instância de State foi criada. Se a classe estiver se modificando internamente fora do escopo de uso e você estiver contando com a observação disso, a próxima abordagem será a que você deve usar.

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

    Alternativa 2: use mutableStateOf e delegados de propriedade.

    Essa abordagem é facilitada com os delegados de propriedade do Kotlin e a API mutableStateOf, que permite criar instâncias do MutableState fora da composição. Basicamente, substitua todas as propriedades var da classe original por var com mutableStateOf como delegado da propriedade. A vantagem é que não haverá mudança no uso da classe, apenas na implementação interna dela. No entanto, o comportamento não é totalmente idêntico ao exemplo original, já que cada propriedade agora é observada/inscrita individualmente. Portanto, as recomposições que você vê após essa refatoração podem ser mais restritas, o que é algo bom.

    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,
        p.x = it }
        p.y = it }
     )
    }
    

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

  • Muda a estratégia de geração de código do compilador do Compose. Antes da mudança, ele transformava chamadas em funções compostas. Com essa mudança, agora transformamos o corpo de uma função combinável e deixamos o local de chamadas praticamente inalterado.

    Isso significa que a maior parte da lógica que se comunica com o ambiente de execução do Compose acontece no início do corpo da função e não no local de chamadas.

    Essa deve ser uma mudança compatível com a fonte para todo o uso do Compose. A maioria dos usuários do Compose não precisa atualizar nenhum código como resultado dessa mudança.

    Para oferecer suporte a esse trabalho, a assinatura JVM de todas as funções compostas mudou. Uma função combinável que aceita um único parâmetro é transformada em uma função que aceita três parâmetros. Os parâmetros adicionais são o Composer, um número inteiro "chave", um inteiro de bitmask usado para propagar metadados por meio de chamadas.

    O Compose agora também transforma argumentos padrão em uma função composta. Ele faz isso sem introduzir uma sobrecarga padrão sintética adicional da própria função. Portanto, essa mudança resultará na definição de menos funções.

    Mudanças comportamentais intencionais conhecidas resultantes disso:

    1. Algumas chamadas serão ignoradas.
    2. As expressões compostas em expressões de argumento padrão agora são corretamente inscritas e processadas.

    Esse trabalho incluiu algumas otimizações: 1. O resultado das comparações de parâmetros é propagado pelo gráfico de chamadas para outras funções combináveis. Isso resulta em menos comparações no tempo de execução e reduz o tamanho da tabela de slots, além de gerar mais pulos de funções combináveis que não foram ignoradas anteriormente. 2. Os parâmetros que são determinados como "estáticos" no momento da compilação não são mais comparados ou armazenados no ambiente de execução. Isso reduz o número de comparações e o tamanho da tabela de slots. 3. A estrutura do controle de fluxo do corpo das funções é usada para minimizar o número de grupos gerados. Isso reduz o tamanho da tabela de slots e resulta em menos trabalho para o ambiente de execução. 4. Parâmetros de envio e destinatário não utilizados para funções não são incluídos para determinar a possibilidade de pular a função, quando não são usados dentro do corpo da função.

    A maioria das mudanças interruptivas foi feita em APIs a que o compilador é destinado diretamente. O uso típico do Compose não vai ser afetado: 1. Composer::startExpr foi removido. 2. Composer::endExpr foi removido. 3. O Composer::call foi descontinuado. 4. As sobrecargas que não são varargs de key foram removidas. Use a versão vararg daqui em diante. 5. A anotação Pivotal foi descontinuada. Use key como substituto. 6. ScopeUpdateScope::updateScope foi modificado para esperar uma Function3 em vez de Function1 7. restartableFunction e restartableFunctionN foram atualizadas para incluir outros parâmetros de tempo de compilação (I60756, b/143464846).

  • Adição de sortWith e removeRange ao MutableVector (Icccf7).

  • Adição de implementações de método padrão para CompositionLifecycleObserver (I24289).

  • O Applier agora requer um método clear() para descartar composições (Ibe697).

  • Adição de asMutableList() ao MutableVector para permitir que ele seja passado para a API pública sem ter que copiar a lista inteira (I298df).

  • Adição de rememberCoroutineScope() para receber um gerenciado na composição para iniciar jobs em resposta a eventos (I0e264).

  • MutableVector é uma nova coleção, que não implementa nenhuma interface padrão de Collection. Essa coleção oferece velocidade acima de outros requisitos e é destinada ao uso apenas em implementações internas (I8ebd6).

  • StableMutableList e StableMutableMap foram removidos temporariamente para evitar um problema na versão do Compose que o Kotlin exige. Essas interfaces serão usadas novamente quando o Compose for atualizado para uma versão do Kotlin que não tenha o problema.

    SnapshotStateList e SnapshotStateMap agora são públicos, mas terão o uso suspenso depois que StableMutableList e StableMutableMap forem restaurados (Ia7769).

  • Adição de função withFrameNanos de nível superior para tempo de animação (Ie34c5).

  • A anotação @Untracked foi descontinuada. Substitua por @ComposableContract(tracked=false) (Id211e).

  • RestartableFunction e as APIs associadas foram renomeadas como ComposableLambda etc. Essas APIs foram segmentadas apenas pelo compilador, então isso geralmente não afetará a compatibilidade no nível da fonte. A renomeação foi feita principalmente para comunicar que essa classe é melhor quando aparece em stack traces (I7eb25).

  • A anotação @Composable não é mais válida em classes (Ia5f02).

  • Ambient<T> agora é @Stable em vez de @Immutable (I0b4bb).

  • Antes da mudança, o plug-in do compilador do Compose interceptava chamadas a construtores dentro de uma função @Composable se houvesse um (I5205a, b/158123804).

  • O composto Recompose não é mais uma abstração útil. A maioria das recomposições precisa acontecer como resultado de atribuições MutableState. Para qualquer coisa além disso, é recomendável usar a função invalidate para acionar uma recomposição do escopo atual (Ifc992).

  • Observe não é mais uma abstração útil. Se você precisar replicá-la, a implementação dela poderá ser replicada apenas com a criação de uma função que pode ser composta que execute um parâmetro lambda de composição. Por exemplo, @Composable fun Observe(body: @Composable () -> Unit) = body() (I40d37, link em inglês).

  • O uso de @Direct foi descontinuado e substituído por @ComposableContract(reinicable=false) (If4708).

  • Adição de um adaptador para o StateFlow introduzido recentemente que permite preencher o valor inicial para que o estado retornado não seja anulável (I61dd8, b/156233789).

  • Foi adicionado um adaptador para o fluxo. Exemplo de uso: valor val por fluxo.collectAsState() (If2198, b/153375923).

  • [Mutable] Os operadores para delegação de propriedade de estado foram movidos para extensões compatíveis com as otimizações de delegação de propriedade do Kotlin 1.4. Autores de chamadas precisam adicionar importações para continuar usando by state { ... } ou by mutableStateOf(...) (I5312c).

  • O androidx.composte.ViewComposer foi movido para androidx.ui.node.UiComposer. androidx.compose.Emittable foi removido. Ele era redundante com o ComponentNode. O androidx.compose.ViewAdapters foi removido. Eles não estão mais disponíveis. O uso de Compose.composeInto foi descontinuado. Use setContent ou setViewContent. O uso de Compose.disposeComposition foi descontinuado. Use o método dispose no Composition retornado pelo setContent. androidx.compose.Compose.subcomposeInto foi movido para androidx.ui.core.subcomposeInto. ComponentNode#emitInsertAt foi renomeado como ComponentNode#insertAt. ComponentNode#emitRemoveAt foi renomeado como ComponentNode#removeAt. ComponentNode#emitMode foi renomeado como ComponentNode#move (Idef00).

  • A sinalização ComposeFlags.COMPOSER_PARAM foi atualizada para true, o que mudará a estratégia de geração de código para o plug-in do Compose. Em um nível alto, isso faz com que funções @Composable sejam geradas com um parâmetro sintético extra, que é transmitido para chamadas @Composable subsequentes para que o ambiente de execução gerencie corretamente a execução. No entanto, essa é uma alteração interruptiva no binário que precisa preservar a compatibilidade no nível da fonte em todo o uso do Compose (I7971c).

  • Alterações interruptivas na API de ambientes. Consulte o registro e a documentação do Ambient<T> para ver detalhes (I4c7ee, b/143769776).

  • Adição de ui-livedata: novo artefato com um adaptador para LiveData. Exemplo de uso: valor val por liveData.observeAsState() (Ie9e8c, b/150465596).

  • Os adaptadores Rx sem valor inicial explícito foram descontinuados. Usar null nem sempre é o melhor padrão. Por exemplo, quando você tem uma lista, é melhor começar com emptyList() ou qualquer outro padrão razoável (I00025, b/161348384).

  • Adição de ui-rxjava2: novo artefato com adaptadores para RxJava2. Exemplo do uso: valor val por observable.subscribeAsState() (Ifab4b, b/153369097).

  • savedInstanceState() agora pode ser usado com tipos anuláveis (I6847f, b/153532190).

  • Novo listSaver() e mapSaver() para facilitar a gravação de objetos Saver personalizados (I8cf68, b/152331508).

  • Novas funções: savedInstanceState() e rememberSavedInstanceState(). Elas são semelhantes a state() e remember(), mas têm uma versão de estado de instância salva em (If1987, b/152025209).

Correções de bugs

  • runOnIdleCompose foi renomeado como runOnIdle (I83607).
  • Criação da API experimental LayoutNode (I4f2e9).
  • O androidx.ui.foundation.TextFieldValue e o androidx.ui.input.EditorValue foram descontinuados. Os elementos TextField, FilledTextField e CoreTextField que usam esse tipo também foram descontinuados. Use androidx.ui.input.TextFieldValue (I4066d, b/155211005).
  • A API DrawBackground descontinuada foi removida e substituída pelas APIs de extensão drawBackground no Modifier. As implementações de drawBackground de cores, pincéis e pintura foram refatoradas para reduzir os caminhos de código, além de remover o requisito para que o Modifier seja criado como parte da composição (I0343a).
  • As APIs de composição de alto nível que expõem uma tela foram atualizadas para expor o CanvasScope. Isso elimina a necessidade dos consumidores manterem seus próprios objetos do Paint. Os consumidores que ainda precisam de acesso a um Canvas podem usar o método de extensão drawCanvas, que fornece um callback para emitir comandos de desenho (I80afd).
  • A API WithConstraints lambda final mudou. Agora, em vez de dois parâmetros, ele tem um escopo de receptor que, além de restrições e layoutDirection, fornece as propriedades minWidth, maxWidth, minHeight e maxHeight no Dp (I91b9a, b/149979702).
  • Modificador de preenchimento simétrico adicionado (I39840).
  • Atualização de wrapContentWidth e wrapContentHeight para esperar um alinhamento vertical ou horizontal em vez de qualquer outro. O modificador de gravidade foi atualizado para aceitar o alinhamento vertical ou horizontal. Row, Column e Stack foram atualizados para oferecer suporte a alinhamentos contínuos personalizados (Ib0728).
  • O módulo ui-text foi renomeado como ui-text-core (I57dec).
  • Melhorias na API DrawModifier:
    • O escopo do receptor para draw() agora é ContentDrawScope.
    • Todos os parâmetros em draw() foram removidos.
    • DrawScope tem a mesma interface que o antigo CanvasScope.
    • O ContentDrawScope tem o método drawContent() (Ibaced, b/152919067).
  • O uso de ColoredRect foi descontinuado. Use Box(Modifier.preferredSize(width, height).drawBackground(color)) (I499fa, b/152753731).
  • Substituição de Modifier mais operador por funções de extensão de fábrica (I225e4).
  • Os membros de RowScope e ColumnScope podem ser acessados fora de Row e Column (I3a641).
  • O LayoutFlexible foi renomeado como LayoutWight. O parâmetro "tight" foi renomeado como "fill" (If4738).
  • WithConstraints recebeu o parâmetro LayoutDirection (I6d6f7).
  • Renomeação de Background para DrawBackground. Agora, ele é memorizado por padrão (Ia0bd3).
  • O ButtonStyle foi substituído por funções distintas e a sobrecarga de texto (string) foi removida. Confira exemplos atualizados para informações de uso (If63ab, b/146478620, b/146482131).
  • runOnIdleCompose e runOnUiThread agora são funções globais e não métodos em ComposeTestRule (Icbe8f).

Contribuição externa

  • Remoção de APIs desnecessárias, como Looper e Handler, da camada de portabilidade do Compose Runtime (I6847d).
  • Foi suspenso o uso de Flow<T>.collectAsState() sem valor inicial. Use StateFlow<T> ou transmita um valor inicial explícito (I63f98, b/157674865).