活动下有一个屏幕级别可组合。当用户导航到该屏幕时,我使用
LaunchedEffect(Unit) {}
来调用执行一些工作的视图模型函数。现在,在设备旋转或发生任何配置更改之前,这一切都可以正常工作。旋转左右后,再次执行LaunchedEffect(Unit) {}
,这是不可取的。
我知道我可以在视图模型中使用标志来防止再次执行该工作。但是,写在这里是为了看看是否有任何理想的解决方案来解决这个问题,因为这似乎是 Jetpack Compose 中的一个常见问题。
PS:该函数只需位于屏幕级视图模型中。
LaunchedEffect
每次重组时都会运行。您可以使用 rememberSaveable
并添加一个标志以不再运行代码。实际上,在 viewModel
中执行此操作会更准确,但由于您特别想要这种方式,所以您可以查看此示例。
var workCompleted by rememberSaveable { mutableStateOf(false) }
LaunchedEffect(Unit) {
if (!workCompleted) {
// your work
workCompleted = true
}
}