Jetpack Compose生命周期监听

744 阅读1分钟

前言

    接触Compose有一段时间了,感觉易用性拉满,能应付很多复杂场景,而且官方文档还算比较完善,不过还是需要自己没事的时候多看看。

使用场景

    我个人开发的时候还是习惯使用多个Activity的方式,这样方便管理,使用单个Activity + Navigation的方式固然优秀,但是架不住本人学艺不精,对Navigation的认识深度还不够,再加上公司项目模块很多,不太好迁移,暂时就这么用着吧。

干货

使用 Lifecycle 包中的 LifecycleEventObserver 即可。

@Composable
fun LifecycleEffect(
    onCreate: (() -> Unit)? = null,
    onStart: (() -> Unit)? = null,
    onResume: (() -> Unit)? = null,
    onPause: (() -> Unit)? = null,
    onStop: (() -> Unit)? = null,
    onDestroy: (() -> Unit)? = null,
) {
    val lifecycleOwner = LocalLifecycleOwner.current
    DisposableEffect(lifecycleOwner) {
        val observer = LifecycleEventObserver { _, event ->
            when (event) {
                Lifecycle.Event.ON_CREATE -> onCreate?.invoke()
                Lifecycle.Event.ON_START -> onStart?.invoke()
                Lifecycle.Event.ON_RESUME -> onResume?.invoke()
                Lifecycle.Event.ON_PAUSE -> onPause?.invoke()
                Lifecycle.Event.ON_STOP -> onStop?.invoke()
                Lifecycle.Event.ON_DESTROY -> onDestroy?.invoke()
                else -> {}
            }
        }
        lifecycleOwner.lifecycle.addObserver(observer)

        onDispose {
            lifecycleOwner.lifecycle.removeObserver(observer)
        }
    }
}

现在,你可以在任何一个Compose函数中监听生命周期啦。

简单的结尾

非科班火鸡安卓,如果有问题或错误,欢迎批评指正。