A biblioteca Lifecycle inclui APIs que permitem a integração com o Jetpack Compose. As principais APIs incluem:
- Fluxos para o
Lifecycle.State
atual. LifecycleEffects
, que permite executar um bloco com base em umLifecycle.Event
específico.
Essas integrações fornecem hooks convenientes para gerenciar ciclos de vida na hierarquia do Compose. Este documento descreve como elas podem ser usadas no seu app.
Coletar o estado do ciclo de vida com fluxos
O ciclo de vida expõe uma propriedade currentStateFlow
, que fornece o
Lifecycle.State
atual como um StateFlow
do Kotlin. Você pode coletar esse Flow
como
State
. Isso permite que o app leia mudanças no ciclo de vida durante
a composição.
val lifecycleOwner = LocalLifecycleOwner.current
val stateFlow = lifecycleOwner.lifecycle.currentStateFlow
…
val currentLifecycleState by stateFlow.collectAsState()
O exemplo anterior pode ser acessado usando o módulo lifecycle-common
. O
método currentStateAsState()
está disponível no módulo
lifecycle-runtime-compose
, que permite ler o estado atual do ciclo de vida com uma
única linha. O exemplo abaixo demonstra isso:
val lifecycleOwner = LocalLifecycleOwner.current
val currentLifecycleState = lifecycleOwner.lifecycle.currentStateAsState()
Executar código em eventos de ciclo de vida
Há também LifecycleEffects
que permitem gerar um bloco quando ocorre um
Lifecycle.Event
específico.
LifecycleEventEffect(Lifecycle.Event.ON_START) {
// do something here
}
Além de LifecycleEventEffect
, também é possível usar
LifecycleStartEffect
e LifecycleResumeEffect
. Essas APIs estão vinculadas a
eventos específicos. Elas também oferecem um bloco extra no bloco principal
que ajuda a limpar qualquer código que o evento possa ter iniciado.
LifecycleStartEffect
O LifecycleStartEffect
é semelhante ao LifecycleEffect
, mas é executado apenas
em eventos Lifecycle.Event.ON_START
. Ele também aceita chaves que funcionam como outras
chaves do Compose. Quando a chave muda, ela aciona o bloco para ser executado de novo.
Quando há um evento Lifecycle.Event.ON_STOP
ou o efeito sai da composição,
ele executa um bloco onStopOrDispose
. Isso permite a limpeza de qualquer trabalho
que fez parte do bloco inicial.
LifecycleStartEffect {
// ON_START code is executed here
onStopOrDispose {
// do any needed clean up here
}
}
LifecycleResumeEffect
O LifecycleResumeEffect
funciona da mesma forma que o
LifecycleStartedEffect
, mas é executado no evento
Lifecycle.Event.ON_RESUME
. Ela também fornece um bloco onPauseOrDispose
, que faz a
limpeza.
LifecycleResumeEffect {
// ON_RESUME code is executed here
onPauseOrDispose {
// do any needed clean up here
}
}