Compose - 使用 Lifecycle(生命周期)

官方页面

一、概念

二、收集数据流

val lifecycleOwner = LocalLifecycleOwner.current
//val currentLifecycleState by lifecycleOwner.lifecycle.currentStateFlow.collectAsState()
val currentLifecycleState by lifecycleOwner.lifecycle.currentStateAsState()
when(currentLifecycleState) {
    Lifecycle.State.INITIALIZED -> {}
    Lifecycle.State.CREATED -> {}
    Lifecycle.State.STARTED -> {}
    Lifecycle.State.RESUMED -> {}
    Lifecycle.State.DESTROYED -> {}
}

三、使用可组合项

LifecycleEventEffect 可自由指定需要监听的生命周期。若需要清理资源,可使用 LifecycleStartEffect 和 LifecycleResumeEffect 监听特定生命周期范围,还可以指定 key 来再次触发,必须回调指定方法可用来清理资源。

LifecycleEventEffect

@Composable
public fun LifecycleEventEffect(
    event: Lifecycle.Event,
    lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current,
    onEvent: () -> Unit
)

在 Activity 处于指定生命周期时开始执行。无法监听 onDestroy(),因为 Compose 在接收到该事件后便会停止重组,永远无法感知到。

LifecycleStartEffect

@Composable
public fun LifecycleStartEffect(
    key1: Any?,
    lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current,
    effects: LifecycleStartStopEffectScope.() -> LifecycleStopOrDisposeEffectResult
)

在 Activity 处于 start 开始执行,在 stop 或 dispose(可组合项被移除时)时清理资源。

LifecycleResumeEffect

@Composable
public fun LifecycleResumeEffect(
    vararg keys: Any?,
    lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current,
    effects: LifecycleResumePauseEffectScope.() -> LifecyclePauseOrDisposeEffectResult
)

在 Activity 处于 resume 开始执行,在 pause 或 dispose(可组合项被移除时)时清理资源。

LifecycleEventEffect(Lifecycle.Event.ON_CREATE) {}
LifecycleEventEffect(Lifecycle.Event.ON_START) {}

LifecycleStartEffect(Unit) {
    onStopOrDispose {}
}

LifecycleResumeEffect(Unit) {
    onPauseOrDispose {}
}

四、使用副作用

@Composable
fun Demo() {
    val lifecycleOwner = LocalLifecycleOwner.current
    DisposableEffect(lifecycleOwner) {
        //创建观察者
        val observer = LifecycleEventObserver { _, event ->
            when (event) {
                Lifecycle.Event.ON_CREATE -> {}
                Lifecycle.Event.ON_START -> {}
                Lifecycle.Event.ON_RESUME -> {}
                Lifecycle.Event.ON_PAUSE -> {}
                Lifecycle.Event.ON_STOP -> {}
                Lifecycle.Event.ON_DESTROY -> {}
                else -> {}
            }
        }
        //把观察者加到生命周期里
        lifecycleOwner.lifecycle.addObserver(observer)
        //可组合项被移除时,移除观察者
        onDispose {
            lifecycleOwner.lifecycle.removeObserver(observer)
        }
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值