You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询Android Jetpack Compose中ViewModel的生命周期依赖关系

Compose中ViewModel的生命周期解析
  • ViewModel的生命周期完全不依赖Composable函数。Composable会因重组(比如状态变化、屏幕旋转)频繁创建和销毁,但ViewModel的核心作用是跨重组、跨配置变更保存数据,所以它的生命周期和Composable的生命周期完全解绑。

  • ViewModel的生命周期绑定到它的ViewModelStoreOwner(即生命周期所有者),在Compose日常开发中,默认的ViewModelStoreOwner是承载Compose的Activity或Fragment:

    • 当你通过Compose的viewModel()函数获取ViewModel实例时,这个实例会和当前的Activity/Fragment绑定,生命周期与之一致。
    • 只有当Activity/Fragment真正被销毁(比如用户退出页面、调用finish())时,ViewModel才会被清理;像屏幕旋转这类配置变更,Activity会重建,但ViewModel会被保留,不会重新初始化。
  • 针对你提到的「整屏Composable传入ViewModel」的场景:
    如果你是在Activity的setContent中调用这个Composable,并且通过viewModel()获取ViewModel传入,那么这个ViewModel的生命周期和该Activity完全同步,和Composable的创建/销毁无关——哪怕Composable因为重组多次重建,ViewModel实例始终是同一个,数据也会保留。

  • 注意事项:

    • 不要手动new ViewModel实例传给Composable,必须用viewModel()函数获取,这样才能保证ViewModel绑定到正确的生命周期所有者,避免内存泄漏或数据丢失。
    • 若需要自定义ViewModel的生命周期范围(比如跨多个页面共享),可以通过自定义ViewModelStoreOwner实现,但日常开发中默认的Activity/Fragment绑定足以满足大部分场景。

内容的提问来源于stack exchange,提问作者Zohaib Akram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 19:01:00