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
StateFlowestateIn(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
- Por que usar um ViewModel?
- Expondo estado a partir do ViewModel
- O ciclo de vida do Android
- collectAsStateWithLifecycle