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 |
---|---|---|---|---|
11 de dezembro de 2024 | 1.7.6 | - | - | 1.8.0-alpha07 |
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.7.6" implementation "androidx.compose.runtime:runtime-livedata:1.7.6" implementation "androidx.compose.runtime:runtime-rxjava2:1.7.6" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.runtime:runtime:1.7.6") implementation("androidx.compose.runtime:runtime-livedata:1.7.6") implementation("androidx.compose.runtime:runtime-rxjava2:1.7.6") } 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.
Tracing do ambiente de execução: versão 1.7
Versão 1.7.0-rc01
18 de setembro de 2024
Lançamento de androidx.compose.runtime:runtime-tracing:1.7.0-rc01
. A versão 1.7.0-rc01 contém estas confirmações.
Tracing do ambiente de execução: 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 com suporte mais baixas (por exemplo, compose-runtime e tracing-perfetto) — correção de um problema em que o compose-runtime-tracing trazia uma versão mais recente do compose-runtime para o 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, permitindo o suporte ao rastreamento de composição na inicialização do app (início frio), por exemplo, no AndroidX Benchmark e no Android Studio (a partir do Hedgehog Beta 2).
Mudanças na API
androidx.tracing.perfetto.Trace
foi renomeado comoandroidx.tracing.perfetto.PerfettoSdkTrace
(I44af8).- As APIs do SDK do Tracing Perfetto agora são consistentes com
android.os.Trace
. (I73ba0, b/282199917). - Pré-requisitos para o rastreamento na inicialização do app. (Iad890).
- Os arquivos de API públicos e experimentais foram 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
- Sem mudanças funcionais. 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
androidx.compose.runtime:runtime-tracing
é uma biblioteca que, com o suporte de ferramentas (em breve), permite o rastreamento estendido em um app do Compose. Essa versão inicial é 1.0.0-alpha01.
Versão 1.8
Versão 1.8.0-alpha07
11 de dezembro de 2024
Lançamento de androidx.compose.runtime:runtime-*:1.8.0-alpha07
. A versão 1.8.0-alpha07 contém estas confirmações.
Mudanças na API
- Uma API de ferramentas foi adicionada para ajudar o Layout Inspector a correlacionar subcomposições à composição pai nos casos em que um nó não é usado para unir as composições. (I4ce3d).
- As constantes aritméticas e especiais de
SnapshotId
foram tornadas internas em vez de públicas. A aritmética pode ser realizada em umSnasphotId
, se necessário, convertendo-o em umInt
ouLong
usandotoInt()
outoLong()
, respectivamente. (Ic3a57).
Contribuição externa
- Otimizar o armazenamento para parâmetros
movableContentOf
. (ed87177).
Versão 1.8.0-alpha06
13 de novembro de 2024
Lançamento de androidx.compose.runtime:runtime-*:1.8.0-alpha06
. A versão 1.8.0-alpha06 contém estas confirmações.
Mudanças na API
- Mudanças na API
PausableComposition
. Essas mudanças importantes em relação às versões anteriores da 1.8.0-alpha (desde a 1.8.0-alpha02), mas, como são novas APIs na 1.8.0, a compatibilidade com versões anteriores não é mantida, já que as APIs ainda estão na versão Alfa. (I39819). - Foram adicionadas APIs de ferramentas para observar a criação de novas composições em um Recomposer (Iaeb7e).
snapshotId
, do tipoLong
, foi adicionado aSnapshot
eid
foi descontinuado. O ID de um snapshot mudou deInt
paraLong
para evitar que o ID do snapshot transborde em sistemas com taxas de frames muito altas e animações de longa duração. O tipo foi criado para permitir que ele sejaInt
ou outro tipo em plataformas que não têm um tipoLong
nativo. Plataformas que não têm umLong
nativo, como o JavaScript, precisam evitar taxas de frames altas (mais de 1.000 QPS), que causariam um overflow paraInt
aproximadamente a cada 24 dias. (I38ac3, b/374821679).
Correções de bugs
- Correção de
providesDefault
para um únicoprovides
. (aosp/3318540 b/374263387). - Otimize
ChangeList
. (3318538).
Versão 1.8.0-alpha05
30 de outubro de 2024
Lançamento de androidx.compose.runtime:runtime-*:1.8.0-alpha05
. A versão 1.8.0-alpha05 contém estas confirmações.
Correções de bugs
- Correção de overflow de pilha ao adicionar
Int.MAX_VALUE
aSnapshotIdSet
. (b/370536104, Ic4179f6). - Microotimizações de execução (I50c60).
- Permitir que o R8 remova chamadas de depuração runtimeCheck (I8c44).
compoundKeyOf
foi feito iterativo em vez de recursivo (I5817f).
Contribuição externa
- Implementação de pilhas com listas de coletores (I7d47c).
Versão 1.8.0-alpha04
16 de outubro de 2024
Lançamento de androidx.compose.runtime:runtime-*:1.8.0-alpha04
. A versão 1.8.0-alpha04 contém estas confirmações.
Melhorias de desempenho
- Fornecer o ID do snapshot para registros de estado no construtor (85c00f).
- Refatoração de
SnapshotState***
para evitar erros de verificação de classe (6ee4a6). - As regras do R8 foram corrigidas para evitar o inline de lançamento (5beb92).
- Microotimização de operações (d73c5c).
- Otimização das alocações de
SynchronizedObject
na JVM (2b043f).
Versão 1.8.0-alpha03
2 de outubro de 2024
Lançamento de androidx.compose.runtime:runtime-*:1.8.0-alpha03
. A versão 1.8.0-alpha03 contém estas confirmações.
Melhorias de desempenho
- Criar com preguiça o contexto filho para
rememberCoroutineScope
(f61464)- O
rememberCoroutineScope
geralmente é usado para iniciar corrotinas em resposta a eventos que ocorrem após a composição. Em alguns cenários, esses eventos podem nunca ocorrer, o que gera custos adicionais de criação e cancelamento de jobs sem nenhum benefício. - Faz com que o escopo retornado por
rememberCoroutineScope
crie ocoroutineContext
de forma preguiçosa quando acessado, evitando a criação e o cancelamento do job se o escopo nunca for usado.
- O
Versão 1.8.0-alpha02
18 de setembro de 2024
Lançamento de androidx.compose.runtime:runtime-*:1.8.0-alpha02
. A versão 1.8.0-alpha02 contém estas confirmações.
Novos recursos
PausableComposition
foi adicionado, o que permite criar uma subcomposição que pode ser pausada durante a composição e aplicada de forma assíncrona. O suporte do compilador é necessário para a pausa, que está em desenvolvimento. (I3394b).
Versão 1.8.0-alpha01
4 de setembro de 2024
Lançamento de androidx.compose.runtime:runtime-*:1.8.0-alpha01
. A versão 1.8.0-alpha01 contém estas confirmações.
Versão 1.7
Versão 1.7.6
11 de dezembro de 2024
Lançamento de androidx.compose.runtime:runtime-*:1.7.6
. A versão 1.7.6 contém estas confirmações.
Versão 1.7.5
30 de outubro de 2024
Lançamento de androidx.compose.runtime:runtime-*:1.7.5
. A versão 1.7.5 contém estas confirmações.
Versão 1.7.4
16 de outubro de 2024
Lançamento de androidx.compose.runtime:runtime-*:1.7.4
. A versão 1.7.4 contém estas confirmações.
Versão 1.7.3
2 de outubro de 2024
Lançamento de androidx.compose.runtime:runtime-*:1.7.3
. A versão 1.7.3 contém estas confirmações.
Versão 1.7.2
18 de setembro de 2024
Lançamento de androidx.compose.runtime:runtime-*:1.7.2
. A versão 1.7.2 contém estas confirmações.
Versão 1.7.1
10 de setembro de 2024
- Não há mudanças nos artefatos do Android. Os artefatos
-desktop
foram removidos, e os artefatos-jvmStubs
e-linuxx64Stubs
foram adicionados. Nenhuma dessas metas é destinada a ser usada. Elas são marcadores de posição para ajudar os esforços do Jetbrains Compose.
Versão 1.7.0
4 de setembro de 2024
Lançamento de androidx.compose.runtime:runtime-*:1.7.0
. A versão 1.7.0 contém estas confirmações.
Mudanças importantes desde a versão 1.6.0
- Foi adicionada a capacidade de fornecer um local de composição computado com base nos valores de outros locais de composição, por padrão, usando
compositionLocalWithComputedDefault()
ou fornecendo uma lambda para computar 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 dentro do lambda que calcula o valor. Ele é usado em vez decurrent
, que só é acessível em funções@Composable
. (Iadbc0). - Os objetos de estado recém-criados são acessíveis imediatamente em outros snapshots, incluindo o snapshot global, com o estado inicial. As modificações subsequentes não ficam visíveis até que o snapshot em que o objeto foi criado seja aplicado.
- O estado inicial de
mutableStateOf()
, assim como as versões primitivas, é o valor transmitido como um parâmetro 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 seja imediatamente acessível no snapshot global após a criação. - Os objetos de estado personalizado podem ser acessados imediatamente seguindo o padrão de mudanças feitas nos objetos de snapshot integrados. (I84a17).
- Ative
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). - Inválida lambdas combináveis em subcomposições no mesmo frame. (98301c).
- Chame o callback
onRelease
na mesma ordem queonForgotten
. (2cd790). - Ativar o modo de rejeição avançada (ed1766).
- O
currentCompoundHashKey
foi personalizado em mais casos (d4a872).
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
1º 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 computado com base nos valores de outros locais de composição, por padrão, usando
compositionLocalWithComputedDefault()
ou fornecendo uma lambda para computar 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 dentro do lambda que calcula o valor. Ele é usado em vez decurrent
, que só é acessível em funções@Composable
. (Iadbc0).
Mudanças na API
- Os objetos de estado recém-criados são acessíveis imediatamente em outros snapshots, incluindo o snapshot global, com o estado inicial. As modificações subsequentes não ficam visíveis até que o snapshot em que o objeto foi criado seja aplicado.
- O estado inicial de
mutableStateOf()
, assim como as versões primitivas, é o valor transmitido como um parâmetro 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 seja imediatamente acessível no snapshot global após a criação. - Os objetos de estado personalizado podem ser acessados imediatamente seguindo o padrão de mudanças feitas nos objetos de snapshot integrados. (I84a17).
Correções de bugs
- Correção da mesclagem de
readObserver
em snapshots aninhados. Isso fazia com que estados derivados aninhados fossem invalidados quando usados dentro de umsnapshotFlow
. (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 de valores únicos de processamento de
providesDefault
(538f45). - Evitar um deadlock no Recomposer ao acessar o relógio de 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 de desempenho
- Chamada
Snapshot.current
uma vez por avaliação de estado derivado (ee7daf). - Leitura de
currentRecord
uma vez por observação na composição (b882b2). - Remoção da alocação acidental de iteradores em
snapshotFlow
(231e56). - Ative
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
- Introdução de grupos de substituição para melhorar a detecção de mudanças (0941b5).
Melhorias de desempenho
- Melhoria na alocação de memória ao detectar mudanças (53e7fd).
- Correção de um vazamento de memória no compositor (0e097d).
- Use
ScopeMap
para transmitir invalidações ao refazer a composição (e19a7e). - Otimização do mapa de invalidações para manter apenas estados derivados (f11c44).
- Substituir os usos de
IdentityArraySet
porScatterSet
(db572e). - Otimização de
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
- Inválida lambdas combináveis em subcomposições no mesmo frame. (98301c).
- Chame o callback
onRelease
na mesma ordem queonForgotten
. (2cd790). - Filtre estados alterados que não são observados em
snapshotFlow
. (796b80).
Melhorias de desempenho
- Modifique o observador de snapshots no lugar quando ele já estiver transparente. (f60f30).
- Otimize
SnapshotIdSet.lowest()
. (7ae149). - Use um
fold()
sem alocação emSnapshotIdSet
. (532b7d). - A alocação do iterador foi removida (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 desempenho
- Foi adicionada a capacidade de criar slots depois que um grupo filho foi adicionado (b5960c).
- Otimização da gravação de modificações de estados de snapshots (28c3fe).
- Ativar o modo de rejeição avançada (ed1766).
Correções de bugs
- Considerar a meta de parâmetro padrão no recurso de lembrar de forma intrínseca (096665).
- O
currentCompoundHashKey
foi personalizado em mais casos (d4a872). - Grupos de realização 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
1º 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). - Filtre 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
- Exceções que são engolidas durante o loop de recomposição são geradas novamente (4dff9a).
Otimizações de desempenho
- Otimização da gravação de modificações de estados de snapshots (28c3fe).
- Otimização do
rememberSaveable
(f01d79). - A leitura de estados derivados é adiada até que as mudanças sejam registradas (f38099).
- Melhoria na disponibilização de valores de composição local (a337ea).
Correções de bugs
- Correção do vazamento de memória da tabela de slots (73fcfe).
- Pular a recomposição de subcomposições que serão removidas. (Ieeb99, b/254645321).
- Ative os ciclos de vida de
RememberObserver
apenas quando ele for armazenado no cálculo de recuperação. (f6b4dc). - A captura de
$dirty
é restrita a lambdas inline. (acfca0). - Correção de conteúdo móvel que às vezes recebia 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
- Propagação de determinados valores de estabilidade na anotação. (274a4c)
Correções de bugs
- Use a política referencial para o estado de escopo local da composição no contexto. (83361c)
- A captura $dirty foi restrita a lambdas inline. (acfca0)
- Correção de conteúdo móvel que às vezes recebia os locais de composição errados. (035cd6)
- Use hashmaps não alocadores mais rápidos em
RecomposeScopeImpl
. (d79494) - Usar
ObjectIntMap
emDerivedState
. (21862e) - Use
IntRef
para intSnapshotThreadLocal
emDerivedState
. (04eaf4)
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
- Ative os ciclos de vida de
RememberObserver
apenas quando ele for armazenado no cálculo de recuperação. (f6b4dc). - Melhoramos as alocações na classificação da lista de invalidações. (954d63).
- Use novos mapas sem atribuição 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 que a versão de indexação direta dos auxiliares de lista seja usada. (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
- Exceções que são engolidas durante o loop de recomposição são geradas novamente (4dff9a).
Mudanças na API
- Foi adicionado 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). - Correção de como os nós de conteúdo móveis 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 performance
- Otimização do
rememberSaveable
(f01d79). - A leitura de estados derivados é adiada até que as mudanças sejam registradas (f38099).
- Melhoria na disponibilização de valores de composição local (a337ea).
SideEffect
é marcado como@ExplicitGroupsComposable
para evitar a geração de um grupo. (I74815).- Evite comparar mapas de composição local na reutilização (782071).
Mudanças na API
- Foi adicionada uma sobrecarga de caso especial para
CompositionLocalProviders
que evita a sobrecarga usada para tornar a disponibilização de vários valores mais rápida, mas é uma sobrecarga ao fornecer um único valor. (I6d640, b/288169379).
Correções de bugs
- Correção do vazamento de memória da tabela de slots (73fcfe).
- Correção da restauração de
rememberSaveable
quandostateSaver
retorna 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
- Pular a recomposição de subcomposições que serão removidas. (Ieeb99, b/254645321).
- Alocações reduzidas ao aplicar snapshots. (I65c09).
- Evitar o cálculo de
readableHash
emDerivedState
se o snapshot não foi 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 agrupadas em uma chamadaremember
. (I64550). - Foram adicionadas versões primitivas de "State" e
MutableState
(fb3d89). Snapshot.isApplyObserverNotificationPending
foi adicionado (I672a5).- Foram adicionadas versões primitivas da API
State
, permitindo que valores Int, Long, Float e Double sejam rastreados em objetosState
sem penalidades por autocaixa. Use os novos métodos de fábricamutableIntState(Int)
,mutableFloatStateOf(Float)
etc. (I48e43).
Correções de bugs
- Pular a recomposição de subcomposições que serão removidas. (Ieeb99, b/254645321).
- Não reter a referência do snapshot em
ComposerImpl
(0206f7). - A composição não é aplicada duas vezes (f5791b).
- Validação de valores de estado derivados não inicializados (aa2a92).
- Chame
onEndChanges
durante o descarte da composição. (62cc8c). - Correção da movimentação de conteúdo para uma subcomposição (4beb41).
- Correção de possíveis impasses (c1a425 e 8edce0).
- O recompilador criado para uma janela do Android agora só bloqueia chamadas para
withFrameNanos
em vez de toda a composição quando recebe 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 da chamada dewithFrameNanos
serão bloqueadas. (Id9e7f, b/240975572). - Executar callbacks de desativação para
LayoutNode
antes de descartar efeitos 3784073 - Correção de flags alteradas para lambdas reiniciados ea81df9
- Correção da regressão de edição em tempo real para o elemento combinável com nós 73fd4d8.
- ON_STOP precisa pausar as transmissões do relógio de frame em vez da composição ae276f1.
- Os escopos
SnapshotStateObserver
foram invalidados para estados derivados inalterados 84d9b1c. - Correção de um possível impasse ao descartar composições 28761fc.
- Correção da movimentação de conteúdo para uma subcomposição 92d4156
- Correção de flags alteradas para lambdas reiniciados (8a03e9).
- Executar callbacks de desativação para
LayoutNode
antes de descartar efeitos (8b0fa4). - Correção de
endToMarker()
ao encerrar grupos de nós. (d71d980). - O grupo
SlotWriter
atual é usado para verificar a desativação (a0b518b). - A
fill
emSlotTable.moveSlotGapTo()
foi removida e movida para fechar (81f9935). - Correção de involuções ausentes enquanto o conteúdo móvel está se movendo (1d7c024).
- Correção de invalidações imediatas para conteúdo móvel movido (8676618).
Melhorias de 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 de
CoroutineScopes
do Compose (a55362 e bd382f). - Substituir registros de objetos de estado por registros de estado inacessíveis (c986960).
- O compositor usa o escopo correto ao realizar grupos (9a5e5b6).
- Use
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
A leitura de estados derivados é adiada até que as mudanças sejam registradas (f38099).
Uma inspeção opcional para recomendar a migração de chamadas
mutableStateOf()
para os tipos especializados correspondentes de primitivos está disponível. O ID do lint éAutoboxingStateCreation
. Antes, essa inspeção era ativada por padrão para todos os projetos. Para ver essa mensagem no editor do Android Studio e nas saídas de lint do projeto, mude a gravidade de "informativo" para "aviso" (ou mais grave) declarandowarning "AutoboxingStateCreation"
na 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
- Pular 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 de 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
- Alocações 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 agrupadas em uma chamadaremember
. (I64550). - Foram adicionadas versões primitivas de "State" e
MutableState
(fb3d89). Snapshot.isApplyObserverNotificationPending
foi adicionado (I672a5).
Correções de bugs
- Alocações reduzidas (I65c09, d7ea77, 727974 e 445808).
- Não reter a referência do snapshot em
ComposerImpl
(0206f7). - Cancelamento rápido de
CoroutineScopes
do Compose (a55362 e bd382f). - A composição não é aplicada duas vezes (f5791b).
- Validação de valores de estado derivados não inicializados (aa2a92).
- Chame
onEndChanges
durante o descarte da composição. (62cc8c). - Correção da movimentação de conteúdo para uma subcomposição (4beb41).
- Correção de possíveis impasses (c1a425).
- ON_STOP precisa pausar as transmissões do relógio de frame em vez da composição (f4a2d1).
- Correção de flags alteradas para lambdas reiniciados (8a03e9).
- Executar callbacks de desativação para
LayoutNode
antes de descartar efeitos (8b0fa4).
Contribuição externa
Snapshot.isApplyObserverNotificationPending
foi adicionado (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
- Foram adicionadas versões primitivas da API
State
, permitindo que valores Int, Long, Float e Double sejam rastreados em objetosState
sem penalidades por autocaixa. Use os novos métodos de fábricamutableIntState(Int)
,mutableFloatStateOf(Float)
etc. (I48e43).
Correções de bugs
Chame
onEndChanges
durante o descarte da composição. Os nós de foco removidos durante oComposition.dispose
estão se inscrevendo noonEndChanges
para redefinir o foco.(03d4a47).Garantir a invalidação de valores de estado derivados não inicializados. Cada estado derivado é associado a uma lista de dependências em
SnapshotStateObserver
, usada 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
estava limpando dependências antigas e lendo o novo valor. Isso resultou em uma condição de disputa com a invalidação acontecendo em um estado limpo, em que a invalidação de dependência não foi registrada.Essa mudança reordena a leitura do estado derivado e a limpeza de dependências, garantindo que a invalidação sempre aconteça 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 recompilador criado para uma janela do Android agora só bloqueia chamadas para
withFrameNanos
em vez de toda a composição quando recebe 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 da chamada dewithFrameNanos
serão bloqueadas. (Id9e7f, b/240975572).
Correções de bugs
- Correção de um possível deadlock na lista de snapshots e no mapeamento 5c1a425
- Executar callbacks de desativação para
LayoutNode
antes de descartar efeitos 3784073 - Correção de flags alteradas para lambdas reiniciados ea81df9
- Correção da regressão de edição em tempo real para o elemento combinável com nós 73fd4d8.
- ON_STOP precisa pausar as transmissões do relógio de frame em vez da composição ae276f1.
- Os escopos
SnapshotStateObserver
foram invalidados para estados derivados inalterados 84d9b1c. - Correção de um possível impasse ao descartar composições 28761fc.
- Correção da movimentação 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
- Substituir registros de objetos de estado por registros de estado inacessíveis (c986960).
- O compositor usa o escopo correto ao realizar grupos (9a5e5b6).
- Correção de
endToMarker()
ao encerrar grupos de nós. (d71d980). - O grupo
SlotWriter
atual é usado para verificar a desativação (a0b518b). - Use
IdentityArraySet
para armazenar invalidações de snapshot (7f60cca). - A
fill
emSlotTable.moveSlotGapTo()
foi removida e movida para fechar (81f9935). - Correção de involuções ausentes enquanto o conteúdo móvel está em movimento (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
- Adição de
Modifier.Node#coroutineScope
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 um possível impasse na lista de snapshots e no mapa 2eb6570.
A adição de conteúdo a um
SnapshotStateList
ouSnapshotStateMap
pode encontrar um deadlock se a modificação for simultânea a uma gravação direta no registro de estado. Isso ficou muito mais provável com as mudanças introduzidas por 93fcae828b, que usa gravações diretas para liberar registros não usados.Agora, as travas são ordenadas de modo que uma trava de snapshot nunca é acionada quando uma trava de mapa ou lista é mantida.
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
- Use o valor inicializado de
LiveData
para a primeira composição 3680e25 - Adição de
ComposeNodeLifecycleCallback
para observar o ciclo de vida dos nós de composição. 8b6a258 - A propriedade
parameterTypes
foi adicionada aComposableMethod
7b6c7ad.
Correções de bugs e melhorias de desempenho
- Limpar os dois índices de escopo em
SnapshotStateObserver
29f4a3e - Foram adicionados grupos necessários ao corpo das lambdas que não podem ser puladas 7d06752
- Melhoria nas características de referência de memória do estado de snapshot 93fcae8
- Remoção de caixa em pesquisas locais de composição 0875717
- Use a chave correta para grupos de nós não reutilizáveis 6388d8d
- Proteção de
SnapshotStateObserver
contra solicitações recursivas e simultâneas 98cb6ba - Foi adicionada uma verificação de limites de índice no método "get"
IdentityArraySet
35a77d3 - O módulo de composição foi atualizado para usar extensões
ViewTreeLifecycleOwner
21c2122. - Enviar notificações de aplicação depois que o Recomposer terminar o frame. 98f2641
- Correção de falha de índice fora dos limites ao cancelar o Recomposer 8f8656f
- Sempre force a recomposição se os provedores pai da composição tiverem mudado 9526fcc
- Tolerância de recomposição para jobs cancelados a55f7ed
- Melhoria no processamento de invalidações para um grande número de compositores 9b7ed67
- Correção de geração de grupos de fechamento 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
ComposeNodeLifecycleCallback
foi adicionado, o que permite observar o ciclo de vida dos nós do Compose (I3731b).@TestOnly
foi adicionado aComposer.disableSourceInformation()
, porque essa função só pode ser chamada em um teste. (I896c8).
Correções de bugs
- Remoção de caixa em pesquisas locais de composição (62f66a).
- Melhorias nas 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
- Agora,
TestMonotonicFrameClock
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, porque retornam os dados imutáveis internos usados para armazenar o conteúdo. Esse valor pode ser usado, por exemplo, para produzir um fluxo de valores usandosnapshotFlow
sem precisar copiar os 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 / como processar 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.
- Tratamento de erros de composição para recarga automática
- Processar erros de edição ao vivo na gravação/restauração
Rastreamento de composição
- As APIs de rastreamento de execução foram adicionadas para oferecer suporte a novas ferramentas de rastreamento de composição.
- Gerar chamadas de início/término de evento de elemento combinável
- Readição de ComposerKt.traceEventStart(Int, String)
APIs de reflexão combináveis
- Uma nova API
ComposableMethod
foi adicionada para permitir invocações mais confiáveis baseadas em reflexão de APIs combináveis. - Mover invokeComposable para o ambiente de execução de composição
- Retrabalhar a API para invocar o método combinável
Correções de tempo de execução
- Correção do teste de intervalo com falha na verificação de marcadores da tabela de slots
- Permitir que o conteúdo móvel entre e saia do SubcomposeLayout
- Correção de problemas de transferência de conteúdo para um novo conteúdo de uma subcomposição
Sistema de snapshots
- O sistema de snapshots recebeu várias melhorias em relação ao gerenciamento de memória, desempenho e precisão.
- Otimização da remoção de escopo no SnapshotStateObserver
- Descartar snapshots aninhados criados a partir de snapshots transparentes
- Correção de uma disputa ao ler o estado do snapshot global
- Suporte a DerivedState em SnapshotStateObserver
- Impedir a remoção do estado derivado da composição quando ele é lido em outros escopos
- Usar IdentityArrayMap em vez de HashMap dentro de DerivedState
- Atualizar observadores de estado derivados para usar vetor mutável
- Atualização da limpeza de estado do SnapshotStateObserver
- Substituir SnapshotStateObserver.invalidated por ArraySet
- Correção de uma disputa ao ler o estado do snapshot global
- Correção do uso de registro desaturado no cálculo de hash de DerivedState
- Corrigir uma disputa ao avançar o snapshot global
- Agilizar 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 de comportamento interruptiva
- O parâmetro para
remember
erememberCoroutineScope
foi alterado paracrossinline
. Isso vai gerar um erro para devoluções antecipadas em vez de permitir uma devolução antecipada, o que vai causar um erro interno posterior. - Essa mudança pode levar a novos erros do compilador que exigem 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
- API atualizada (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 de desenvolvedor 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
ComposerKt.traceEventStart(Int, String)
foi adicionado novamente para 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 snapshots aninhados criados a partir de 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 a versão 1.1.0
O Compose Runtime teve alguns recursos introduzidos na versão 1.2.0, além de muitas correções de bugs de estabilização. O novo recurso mais significativo foi a introdução da API
movableContentOf
, que pode ser usada para ativar uma UX complexa, como transições de elementos compartilhados. A APImovableContentOf
converte uma lambda combinável em uma lambda que move o estado e os nós correspondentes para qualquer novo local em que ela é chamada. Quando a chamada anterior sai da composição, o estado é temporariamente preservado e, se uma nova chamada para o 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 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 chamadasAlém disso e de alguns outros recursos novos, muito tempo foi gasto para estabilizar o ambiente de execução e o sistema de estado do Snapshot. Vários vazamentos de memória foram removidos e os caminhos de código foram otimizados.
Confira abaixo um resumo das mudanças:
Novos recursos no 1.2
- Adicionar snapshot experimental unsafeEnter/Leave
- Adição da API experimental Snapshot.asContextElement
- Introdução a Snapshot.withoutReadObservation
- Permitir que o estado se mova dentro de uma composição
- Rastreamento de recomposições no Compose
Performance 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 na 1.2
- Remover informações de rastreamento dos escopos de recomposição de lançamento
- Impedir a remoção do estado derivado da composição quando ele é lido em outros escopos
- Usar removeScope() mais eficiente em SnapshotStateObserver
- Limpar dependências de estado derivado na composição
- Corrigir a mudança de currentCompositeKeyHash após a recomposição interna dentro do conteúdo móvel
- Limpeza de composições invalidadas durante a eliminação
- Correção da leitura do estado derivado durante a recomposição
- Correção de vazamento de memória ao observar objetos de estado derivados
- A chave de hash composta de movableContent foi corrigida para ser consistente
- Correção de um caso em que o compositor falhava
- Garantir que a invalidação forçada de um grupo force a recomposição
- Correção de um bug em que o 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
- As observações de estado derivado eram removidas incondicionalmente do escopo de recomposição e da composição, o que quebrou outros escopos que ainda observavam 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 de
Snapshot.unsafeEnter/unsafeLeave
experimental (I108f3). - Adição da API experimental
Snapshot.asContextElement()
(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). - APIs de rastreamento restritas (Composer.setTracer) para
OptIn(InternalComposeTracingApi)
. (I9187f). - Foi adicionado
ResuableContentHost
, que permite um melhor controle sobre a duração do estado criado para conteúdo reutilizável. Por exemplo, se uma subcomposição não estiver em uso temporariamente, o conteúdo poderá ser desativado, fazendo com que todo o estado lembrado na composição seja esquecido, ativando, 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).