一、概念
二、收集数据流
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 在 Activity 处于指定生命周期时开始执行。无法监听 onDestroy(),因为 Compose 在接收到该事件后便会停止重组,永远无法感知到。 |
| LifecycleStartEffect | @Composable 在 Activity 处于 start 开始执行,在 stop 或 dispose(可组合项被移除时)时清理资源。 |
| LifecycleResumeEffect | @Composable 在 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)
}
}
}
3512

被折叠的 条评论
为什么被折叠?



