首页 > 解决方案 > Jetpack compose - 当应用程序返回前台时如何刷新屏幕

问题描述

当应用返回前台时,我需要自动刷新 Android Compose 屏幕。

我有一个需要权限和位置服务的。

如果用户关闭了其中任何一个,则会绘制需要更改的项目的列表。当用户转到设置并且应用程序返回前台时,我希望刷新列表以反映更改。

我正在使用 Compose 和 Compose 导航。我已经看过,但我无法弄清楚可用于触发刷新的 onResume 生命周期事件的等价物。

任何想法都将不胜感激,因为我不知所措。

标签: androidandroid-lifecycleandroid-jetpack-compose

解决方案


我想出了这个:

@Composable
fun OnLifecycleEvent(onEvent: (owner: LifecycleOwner, event: Lifecycle.Event) -> Unit) {
    val eventHandler = rememberUpdatedState(onEvent)
    val lifecycleOwner = rememberUpdatedState(LocalLifecycleOwner.current)
    
    DisposableEffect(lifecycleOwner.value) {
        val lifecycle = lifecycleOwner.value.lifecycle
        val observer = LifecycleEventObserver { owner, event ->
            eventHandler.value(owner, event)
        }

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

它似乎工作得很好。但在某些情况下可能会有一些问题,所以要小心。
也可能存在一些冗余代码。

用法:

OnLifecycleEvent { owner, event ->
    // do stuff on event
    when (event) {
        Lifecycle.Event.ON_RESUME -> { /* stuff */ }
        else                      -> { /* other stuff */ }
    }
}

推荐阅读