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
相关产品推荐
相关产品推荐

