gpt4 book ai didi

android - 如何在用户离开屏幕时销毁 ViewModel

转载 作者:行者123 更新时间:2023-12-04 23:54:53 27 4
gpt4 key购买 nike

在我的项目中,我有一个初始屏幕,当它显示时,我的应用程序从服务器加载一些启动数据,加载数据后显示另一个屏幕。对于初始屏幕,我创建了一个 ViewModel,但它一直保留在内存中。如何正确销毁?

谢谢你的帮助!

@HiltViewModel
class SplashViewModel @Inject constructor (private val repository: Repository) {
....
}
@Composable
fun SplashScreen(vm: SplashViewModel) {
...
}
@Composable
fun Navigate() {
val navController = rememberNavController()
NavHost(navController = navController, startDestination = "splash") {
composable("splash") {
SplashScreen(vm = hiltViewModel())
}

composable("main") {
MainScreen(...) // When shows MainScreen, SplashViewModel object still is in memory
}
}
}

最佳答案

您的 View 模型保留在内存中,因为启动画面是您的根目的地,因此它始终作为底部条目保留在堆栈中。

如果您希望在离开初始屏幕时自动销毁初始 View 模型,您应该在导航到主屏幕时使用 popUpTo 从后台弹出它。

您可以考虑的另一个选择是将您的主屏幕设置为根目的地,然后如果您是全新启动应用程序,则从该屏幕导航至启动画面。

使用 hiltViewModel 并将 viewmodel 的范围限定为导航图目的地,这将确保 viewmodel 在用户离开该屏幕时被销毁,前提是它不在后台堆栈中。

关于android - 如何在用户离开屏幕时销毁 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68347794/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com