android - Jetpack compose - 当应用程序返回前台时如何刷新屏幕
问题描述
当应用返回前台时,我需要自动刷新 Android Compose 屏幕。
我有一个需要权限和位置服务的。
如果用户关闭了其中任何一个,则会绘制需要更改的项目的列表。当用户转到设置并且应用程序返回前台时,我希望刷新列表以反映更改。
我正在使用 Compose 和 Compose 导航。我已经看过,但我无法弄清楚可用于触发刷新的 onResume 生命周期事件的等价物。
任何想法都将不胜感激,因为我不知所措。
解决方案
我想出了这个:
@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 */ }
}
}