Compose Runtime
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshots
(Ver os documentos de referência da API para todos os pacotes do Compose)
Atualização mais recente | Versão estável | Versão candidata a lançamento | Versão Beta | Versão Alfa |
---|---|---|---|---|
21 de agosto de 2024 | 1.6.8 | 1.7.0-rc01 | - | - |
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.
Grupo | Descrição |
---|---|
compose.animation | Crie animações nos aplicativos Jetpack Compose para enriquecer a experiência do usuário. |
compose.compiler | Transforme funções @Composable e ative otimizações com um plug-in do compilador Kotlin. |
compose.foundation | Crie 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.material | Crie 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.material3 | Crie 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.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. |
compose.ui | Componentes 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.15" } 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.15" } 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.
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 do 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 da Hedgehog Beta 2).
Mudanças na API
androidx.tracing.perfetto.Trace
foi renomeado comoandroidx.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 é 1.0.0-alpha01.
Versão 1.7
Versão 1.7.0-rc01
21 de agosto de 2024
Lançamento de androidx.compose.runtime:runtime-*:1.7.0-rc01
. A versão 1.7.0-rc01 contém estas confirmações.
Versão 1.7.0-beta07
7 de agosto de 2024
Lançamento de androidx.compose.runtime:runtime-*:1.7.0-beta07
. A versão 1.7.0-beta07 contém estas confirmações.
Versão 1.7.0-beta06
24 de julho de 2024
Lançamento de androidx.compose.runtime:runtime-*:1.7.0-beta06
. A versão 1.7.0-beta06 contém estas confirmações.
Versão 1.7.0-beta05
10 de julho de 2024
Lançamento de androidx.compose.runtime:runtime-*:1.7.0-beta05
. A versão 1.7.0-beta05 contém estas confirmações.
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 usandoprovidesComputed
em vez deprovides
. - 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 decurrent
, 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()
e as versões primitivas delas é o valor transmitido como um parâmetro paramutableStateOf()
. O estado inicial demutableStateListOf()
emutableStateMapOf()
está vazio. - Foram adicionados
Snapshot.isInSnapshot
eSnapshot.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 umasnapshotFlow
. (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
porScatterSet
(db572e). - Otimizar
removeScope
emScopeMap
(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 queonForgotten
. (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 emSnapshotIdSet
. (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 queonForgotten
. (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
emDerivedState
. (21862e) (link em inglês) - Use
IntRef
para intSnapshotThreadLocal
emDerivedState
. (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 comoRandomAccess
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 chamandosetContent
. (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
quandostateSaver
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
emDerivedState
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 chamadaremember
. (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 objetosState
sem incorrer em penalidades para caixas automáticas. Use os novos métodos de fábricamutableIntState(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 dewithFrameNanos
, 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
emSlotTable.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
emDerivedState
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) declarandowarning "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
emDerivedState
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 chamadaremember
. (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 objetosState
sem incorrer em penalidades para caixas automáticas. Use os novos métodos de fábricamutableIntState(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 duranteComposition.dispose
estão se inscrevendo emonEndChanges
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 paraSnapshot.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 dewithFrameNanos
, 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
emSlotTable.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 queModifier.Nodes
inicie corrotinas (I76ef9). - Permita que
Modifier.Nodes
leiaCompositionLocals
implementando a interfaceCompositionLocalConsumerModifierNode
. (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
ouSnapshotStateMap
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 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
foram adicionados para observar o ciclo de vida dos nós do Compose. 8b6a258 (link em inglês)- Adicionar a propriedade
parameterTypes
aComposableMethod
7b6c7ad
Correções de bugs e Melhorias no 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 no "get" do
IdentityArraySet
. método 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 aComposer.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 ajava.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
eSnapshotStateMap
agora têm implementações explícitas detoList()
etoMap()
, 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 usandosnapshotFlow
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
- Para oferecer melhor suporte à edição em tempo real, foram adicionadas APIs para permitir o processamento de exceções durante a composição.
- Processamento de erros de composição para recarga automática
- Processar erros de edição em tempo real ao salvar/restaurar
Rastreamento de composição
- Foram adicionadas APIs de rastreamento de ambiente de execução para oferecer suporte a novas ferramentas de rastreamento de composição.
- Gerar chamadas de início/término de evento de rastreamento combinável
- ComposerKt.traceEventStart(Int, String) foi adicionado novamente
APIs de reflexão de composição
- Uma nova API
ComposableMethod
foi adicionada para permitir invocações mais confiáveis de APIs combináveis baseadas em reflexão - Mover invocaçãoComposable para o ambiente de execução do Compose
- API Rework para invocar um método combinável
Correções no ambiente de execução
- Correção de teste de intervalo com defeito na verificação de marcadores da tabela de slots
- Permitir que conteúdo móvel seja movido para dentro e para fora do SubcomposeLayout
- Corrigir a movimentação de conteúdo para novo conteúdo de uma subcomposição
Sistema de snapshots
- O sistema de snapshots recebeu várias melhorias relacionadas ao gerenciamento de memória, desempenho e precisão.
- Otimizar a remoção do escopo no SnapshotStateObserver
- Descarte snapshots aninhados criados de snapshots transparentes
- A disputa foi corrigida ao ler o estado do snapshot global
- Suporte ao DerivedState no SnapshotStateObserver
- Impedir a remoção do estado derivado da composição quando ele é lido em outros escopos
- Usar IdentityArrayMap em vez de HashMap dentro do DerivedState
- Atualizar observadores de estado derivados para usar um vetor mutável
- Atualizar a limpeza de estado do SnapshotStateObserver
- Substituir SnapshotStateObserver.invalidated por ArraySet
- A disputa foi corrigida ao ler o estado do snapshot global
- O uso de registro desatualizado foi corrigido no cálculo de hash DerivedState
- Corrigir a disputa ao avançar o snapshot global
- Acelerar a limpeza de observações de escopo no SnapshotStateObserver
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
erememberCoroutineScope
mudou paracrossinline
. 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 aCompositionData
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
movableContentOf
API, que pode ser usada para permitir uma UX complexa, como transições de elementos compartilhados. A APImovableContentOf
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
- Adicionar um snapshot experimental não seguroEntrada/Sair
- Adicionar a API experimental Snapshot.asContextElement
- Introduzir Snapshot.withoutReadObservation
- Permitir que o estado se mova em uma composição
- Rastreamento de recomposições no Compose
Desempenho em 1.2
- Melhorar a performance local da composição
- Os perfis de referência para o Compose precisam ser derivados usando comparativos de mercado
Correções de bugs em 1.2
- Remover informações de acompanhamento dos escopos de recomposição da versão
- Impedir a remoção do estado derivado da composição quando ele é lido em outros escopos
- Usar removeScope() mais eficiente no SnapshotStateObserver
- Limpar dependências de estado derivado na composição
- A mudança de currentCompositeKeyHash após a recomposição interna dentro de conteúdo móvel foi corrigida
- Limpar composições invalidadas durante o descarte
- Corrigir o estado de derivação lido durante a recomposição
- O vazamento de memória ao observar objetos de estado derivados foi corrigido.
- A chave de hash composta movableContent foi corrigida para manter a consistência
- Corrigir um caso em que o compositor falhava no canto
- Garantir que a invalidação forçada de um grupo força a recomposição
- Correção de bug quando rememberSaveable com entrada é restaurado na ordem errada
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
androidx.compose.runtime:runtime-*:1.2.0-rc02
é lançado. 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 à interfaceCompositionTracer
. (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
eComposableOpenTarget
, 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
ouReusableComposeNode
precisam adicionar uma anotaçãoCompoableTarget
à função e a qualquer tipo de parâmetro lambda combinável. No entanto, é recomendável criar uma anotação comComposableTargetMarker
e, em seguida, usar essa anotação marcada em vez de usar aComposableTarget
diretamente. Uma anotação combinável marcada comComposableTargetMarker
é equivalente a umaComposbleTarget
com o nome totalmente qualificado da classe de atributo como o parâmetro do applier. Para conferir um exemplo de como usar aComposableTargetMarker
, consulteanroidx.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 aCompositionData
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
emandroidx.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
androidx.compose.runtime:runtime-*:1.1.0-alpha06
é lançado. 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 peloRecomposer.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 Kotlin1.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 AGP7.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óriosrc/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 comadb 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 caracteresH
,S
eP
, 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 classeandroidx.compose.runtime.SlotTable
teria o descritorLandroidx/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étodofun isPlaced(): Boolean
emLayoutNode
tem a assinaturaisPlaced()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 oComposeNode
(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(onClick={ 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âmetrocount
. 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. ChamarwithFrameNanos
ouRecomposer.runRecomposeAndApplyChanges
semMonotonicFrameClock
agora vai gerar umaIllegalStateException
(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 do 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
paracompositionLocalOf
estaticCompositionLocalOf
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 deselected
eonClick
. - O parâmetro
alwaysShowLabels
em BottomNavigationItem foi renomeado comoalwaysShowLabel
. - Os parâmetros
bodyContent
em alguns componentes foram renomeados comocontent
. - 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
adarkColors()
. Essa cor costuma ser a mesma quesecondary
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
emSlider
foi renomeado comoonValueChangeFinished
e transformado em anulável.- O parâmetro
text
emSnackbar
foi renomeado comocontent
para manter a consistência. - Adição do parâmetro
contentPadding
aDropdownMenuItem
para permitir a personalização do padding padrão. Além disso,content
passou a ser uma extensão emRowScope
. ModalDrawerLayout
foi renomeado comoModalDrawer
.BottomDrawerLayout
foi renomeado comoBottomDrawer
- (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
ewithMutableSnapshot
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 deCompositionLifecycleObserver
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 queonEnter
é chamado apenas uma vez.onEnter
era chamado várias vezes quando o objeto era usado em subcomposições, comoWithConstraints
eScaffold
, tornando a única garantia de chamada deonEnter
não confiável, e foi removido paraRememberObserver
.A interface
RememberObserver
adiciona a funçãoonAbandoned
, que é chamada se a instância deRememberObserver
é retornada do callback transmitido pararemember
, mas não é lembrada no estado de composição e, portanto, a chamada deonRemembered
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 deRememberObserver
após a recomendação de referência única acima estiver rastreando um recurso externo,onForgotten
eonAbandoned
vão indicar que o recurso não é mais necessário. Se o objeto estiver rastreando o trabalho iniciado ou os recursos alocados emonRemembered
, a funçãoonAbandoned
pode ser ignorada, porque não vai ser chamada se aonRemembered
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 comoinsertTopDown()
.Um novo método,
insertBottomUp()
, foi adicionado.Uma Applier insere nós na árvore que está editando com
insertTopDown()
ouinsertBottomUp()
, dependendo de qual apresenta melhor desempenho.Algumas árvores, como
LayoutNode
eView
, 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, umApplier
substitui uminsertBottomUp()
para criar uma árvore de baixo para cima, einsertTopDown()
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
- AndroidOwner agora é interno (Ibcad0, b/170296980).
- subcomposeInto(LayoutNode) agora é interno (Id724a).
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 paracontent
, 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 aruntime-rxjava2
(I02cbf).
Versão 1.0.0-alpha06
28 de outubro de 2020
androidx.compose.runtime:runtime-*:1.0.0-alpha06
é lançado. 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).
- Adição da API de contraparte de DisposableEffect 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 maisMonotonicFrameClock
. Os autores de chamadas dewithFrameNanos
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
ouwaitForIdle
, 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
ewithMutableSnapshot
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
androidx.compose.runtime:runtime-*:1.0.0-alpha01
é lançado. 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 pararemember { 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ãoby 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. UseAndroidView
, 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()
esavedInstanceStateOf()
foi mudada parastructuralEqualityPolicy()
em vez dereferentialEqualityPolicy()
.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()
esavedInstanceStateOf()
usammutableStateOf()
nas implementações deles, então eles foram mudados para que haja consistência commutableStateOf()
.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 dostate
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 classesdata
, podem ter uma degradação no desempenho, porque os métodosequals()
agora são, por padrão, chamados quando atribuídos a ummutableStateOf()
.O comportamento anterior pode ser restaurado adicionando o parâmetro de política
policy = referentialEqualityPolicy()
às chamadas paramutableStateOf()
,ambientOf()
esavedInstanceStateOf()
(Ic21a7).Row
eColumn
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, onXChange={ p.x = it } onYChange={ 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 propriedadesval
de uma classe de dados, usestate
em vez deremember
e atribua o valor do estado a cópias clonadas do original usando o método de conveniênciacopy(...)
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, onXChange={ p = p.copy(x=it) } onYChange={ 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 propriedadesvar
da classe original porvar
commutableStateOf
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, onXChange={ p.x = it } onYChange={ 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:
- Algumas chamadas serão ignoradas.
- 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ãovararg
daqui em diante. 5. A anotação Pivotal foi descontinuada. Usekey
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 transmitido para a API pública sem ter que copiar a lista inteira (I298df).
Adição de rememberCoroutineScope() para receber um CoroutineScope 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
eStableMutableMap
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
eSnapshotStateMap
agora são públicos, mas ficarão obsoletos depois queStableMutableList
eStableMutableMap
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 { ... }
ouby 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
ousetViewContent
. O uso de Compose.disposeComposition foi descontinuado. Use o métododispose
noComposition
retornado pelosetContent
. 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 paratrue
, 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 comorunOnIdle
(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).
- Melhora da 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
erunOnUiThread
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. UseStateFlow<T>
ou transmita um valor inicial explícito (I63f98, b/157674865).