0Pricing
Android Academy · Aula

collectAsStateWithLifecycle

Colete fluxos com segurança usando o ciclo de vida.

collectAsStateWithLifecycle é uma aula grátis de Android Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Android Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Android Academy inclui 4 aulas no total.

Coletando fluxos com segurança

Quando um Composable coleta um fluxo, o ideal é que ele pare de coletar enquanto a tela estiver em segundo plano e retome a coleta quando ela retornar.

A ferramenta para isso é collectAsStateWithLifecycle().

O problema com collectAsState

O collectAsState() simples continua coletando enquanto o Composable estiver na composição — mesmo quando o aplicativo estiver em segundo plano.

Isso pode desperdiçar recursos e processar atualizações que o usuário não consegue ver.

Conheça collectAsStateWithLifecycle

Esse coletor consciente do ciclo de vida pausa a coleta quando o ciclo de vida fica abaixo de um estado-alvo (STARTED por padrão) e a retoma quando ele retorna.

import androidx.lifecycle.compose.collectAsStateWithLifecycle

@Composable
fun Screen(vm: MyViewModel) {
    val state by vm.uiState
        .collectAsStateWithLifecycle()
    Text(state.title)
}

A dependência

Ela está no artefato androidx.lifecycle:lifecycle-runtime-compose. Adicione-o ao seu módulo para que a importação seja resolvida.

// build.gradle (module)
implementation(
  "androidx.lifecycle:lifecycle-runtime-compose:2.x.x"
)

Estado mínimo padrão: STARTED

Por padrão, a coleta fica ativa enquanto o ciclo de vida estiver, no mínimo, em STARTED — ou seja, enquanto a tela estiver visível. Quando passa para o segundo plano (abaixo de STARTED), a coleta é suspensa.

Personalizando o estado mínimo

Você pode alterar o limite com minActiveState, por exemplo, para RESUMED.

val state by vm.uiState.collectAsStateWithLifecycle(
    minActiveState = Lifecycle.State.RESUMED
)

Combinando com StateFlow

Isso funciona perfeitamente com o StateFlow que você expõe de um ViewModel. O fluxo sempre tem um valor atual, portanto uma nova coleta exibe instantaneamente o estado mais recente.

private val _uiState = MutableStateFlow(UiState())
val uiState = _uiState.asStateFlow()

Por que isso economiza trabalho

Se o seu fluxo alimentar um cálculo caro (filtrar uma lista grande, transformar fluxos), suspender a coleta em segundo plano significa que esse trabalho simplesmente não será executado enquanto o usuário estiver ausente.

Combinando com viewModelScope

No lado do produtor, o ViewModel geralmente executa o pipeline de dados em viewModelScope. Com stateIn, você pode até fazer com que a origem pare quando não houver coletores.

val uiState = repository.stream()
    .stateIn(
        scope = viewModelScope,
        started = SharingStarted.WhileSubscribed(5000),
        initialValue = UiState()
    )

WhileSubscribed explicado

WhileSubscribed(5000) mantém a origem ativa por 5 segundos depois que o último coletor sai. Isso evita reiniciar o trabalho durante breves alterações de configuração e ainda o interrompe quando o usuário realmente sai.

Resumo das práticas recomendadas

Para telas do Compose baseadas em um ViewModel:

  • Exponha um StateFlow.
  • Colete com collectAsStateWithLifecycle().
  • Opcionalmente, use stateIn(WhileSubscribed) na origem.

Verificação rápida

Teste sua compreensão sobre a coleta consciente do ciclo de vida.

Recapitulação

Você aprendeu:

  • collectAsStateWithLifecycle() pausa a coleta em segundo plano.
  • O limite padrão é STARTED, ajustável por meio de minActiveState.
  • Combine-o com um StateFlow e stateIn(WhileSubscribed) para obter um pipeline eficiente.

Perguntas Frequentes

A aula “collectAsStateWithLifecycle” é grátis?

Sim — o texto completo de “collectAsStateWithLifecycle” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Android Academy, atualize para CoddyKit PRO. O curso de Android Academy inclui 4 aulas no total.

O que vou aprender em “collectAsStateWithLifecycle”?

Colete fluxos com segurança usando o ciclo de vida. Você pratica Android Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Android Academy?

Nenhuma experiência prévia é necessária. Android Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “collectAsStateWithLifecycle”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Android Academy?

Sim. Cada aula de Android Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Por que usar um ViewModel?
  2. Expondo estado a partir do ViewModel
  3. O ciclo de vida do Android
  4. collectAsStateWithLifecycle
← Voltar para Android Academy