Skip to content

Instantly share code, notes, and snippets.

@rinav
Created September 13, 2025 13:43
Show Gist options
  • Select an option

  • Save rinav/d9fefbe7c2e73cf74c380266e105bc81 to your computer and use it in GitHub Desktop.

Select an option

Save rinav/d9fefbe7c2e73cf74c380266e105bc81 to your computer and use it in GitHub Desktop.
Make your Jetpack Compose composables lifecycle-aware and efficiently track a view's lifecycle events using DisposableEffect and LocalLifecycleOwner
@Composable
fun LifecycleAwareComposable(modifier: Modifier = Modifier) {
val lifecycleOwner = LocalLifecycleOwner.current
DisposableEffect(key1 = lifecycleOwner) {
val lifecycleEvents = LifecycleEventObserver { source, event ->
when (event) {
Lifecycle.Event.ON_CREATE -> Napier.d { "LifecycleAareComposable event: ${event.name} and source: ${source.lifecycle.currentState}" }
Lifecycle.Event.ON_START -> Napier.d { "LifecycleAareComposable event: ${event.name} and source: ${source.lifecycle.currentState}" }
Lifecycle.Event.ON_RESUME -> Napier.d { "LifecycleAareComposable event: ${event.name} and source: ${source.lifecycle.currentState}" }
Lifecycle.Event.ON_PAUSE -> Napier.d { "LifecycleAareComposable event: ${event.name} and source: ${source.lifecycle.currentState}" }
Lifecycle.Event.ON_STOP -> Napier.d { "LifecycleAareComposable event: ${event.name} and source: ${source.lifecycle.currentState}" }
Lifecycle.Event.ON_DESTROY -> Napier.d { "LifecycleAareComposable event: ${event.name} and source: ${source.lifecycle.currentState}" }
Lifecycle.Event.ON_ANY -> Napier.d { "LifecycleAareComposable event: ${event.name} and source: ${source.lifecycle.currentState}" }
}
}
lifecycleOwner.lifecycle.addObserver(observer = lifecycleEvents)
onDispose {
lifecycleOwner.lifecycle.removeObserver(observer = lifecycleEvents)
}
}
Box(modifier = modifier.fillMaxSize()) {
// Just for demo
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment