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

by viewmodels与hiltviewmodel是否均可实现ViewModel实例共享?

关于Hilt ViewModel多视图共享实例的问题解答

首先明确结论:hiltViewModel完全支持多个视图共享同一个ViewModel实例,它并没有改变Android原生ViewModel的缓存逻辑,只是在原有逻辑基础上增加了依赖注入的能力。

常用的共享场景实现方式

  • 同Activity下多个Fragment共享
    只需要给目标ViewModel添加@HiltViewModel注解,构造函数添加@Inject注解,之后在所有需要共享的Fragment中使用by activityViewModels()获取实例即可,所有Fragment拿到的都是绑定到宿主Activity的同一个ViewModel实例。
    示例代码结构:

    @HiltViewModel
    class SharedViewModel @Inject constructor() : ViewModel() {
        // 内部业务逻辑
    }
    
    // 每个需要共享的Fragment中获取实例
    val viewModel: SharedViewModel by activityViewModels()
    
  • 同导航图下多个目的地共享
    如果你使用Navigation组件,需要同一个导航图下的多个Fragment/目的地共享ViewModel,只需要在获取实例时指定导航图ID,同时传入Hilt提供的默认ViewModel Factory即可:

    val viewModel: SharedViewModel by navGraphViewModels(R.id.target_nav_graph) {
        defaultViewModelProviderFactory
    }
    

注意事项

  • 共享的核心前提是所有视图获取ViewModel时绑定的是同一个生命周期持有者(同一个Activity、同一个导航图的BackStackEntry等),和是否使用Hilt无关。
  • @HiltViewModel注解本身不会把ViewModel变成全局单例,如果你在两个不同的Activity中分别用by viewModels()获取同一个HiltViewModel实例,最终会得到两个完全独立的实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:39:03