1. 前言
在Compose基础-Side-effect(一)中,我们学习了几个常用的Side-effect:LaunchedEffect和rememberCoroutineScope,以及关键字rememberUpdateState的用法。在本篇文章中,我们将介绍剩下几个常用的Side-effect相关关键字的用法。
2. DisposableEffect
对于有些Side-effect,在其key值变化或者composable函数离开Composition时,需要对一些资源等进行清理。这种情况下,可以使用谷歌提供的DisposableEffect。其特点如下:
-
当DisposableEffect的key值变化时,当前Effect的onDispose会被调用,此时可以在此函数中对资源进行清理;同时DisposableEffect会被重启,此时可以重新申请资源等。
-
DisposableEffect中必须包含onDispose语句,否则IDE会出现编译时错误。
以下是使用DisposableEffect的一个示例,该DisposableEffect为LifecycleOwner注册了回调,用于监听一些生命周期事件便于数据统计。代码如下:
@Composable
fun HomeScreen(
lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current,
onStart: () -> Unit, // Send the 'started' analytics event
onStop: () -> Unit // Send the 'stopped' analytics event
) {
// Safely update the current lambdas when a new one is provided
val currentOnStart by rememberUpdatedState(onStart)
val currentOnStop by rememberUpdatedState(onStop)
// If `lifecycleOwner` changes, dispose and reset the effect
DisposableEffect(lifecycleOwner) {
// Create an observer that triggers our remembered callbacks
// for sending analytics events
val observer = LifecycleEventObserver {
_, event ->
if (event == Lifecycle.Event.ON_START) {
currentOnStart()
} else if (event == Lifecycle.Event.ON_STOP) {

最低0.47元/天 解锁文章
1181

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



