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

Android Dagger/Hilt依赖注入中对象重复创建问题咨询

问题原因与解决方案

你的操作存在问题,这不是预期行为。

问题根源

虽然你的AppModule被安装在SingletonComponent中,但provideModsLoader()方法没有添加@Singleton注解。Hilt中,未标注作用域的@Provides方法默认是每次注入都创建新实例,所以FirstViewModel和SecondViewModel拿到的是两个完全独立的ModsLoader对象,自然第二个ViewModel里的列表是空的。

修复方法

只需要在provideModsLoader()方法上添加@Singleton注解,让Hilt确保整个应用生命周期内只创建一个ModsLoader实例:

修改后的AppModule.kt:

@Module
@InstallIn(SingletonComponent::class)
object AppModule {
    @Provides
    @Singleton // 新增这个注解
    fun provideModsLoader(): ModsLoader {
        return ModsLoader()
    }
}

额外注意事项

  • ModsLoader中的modsByCategories是mutableListOf,属于线程不安全集合。如果多个ViewModel在不同线程(比如后台线程)操作这个列表,可能会引发并发问题,建议换成线程安全的集合(如CopyOnWriteArrayList),或者在操作时添加线程同步逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 13:17:01