Android Hilt中为@Provides函数添加@Singleton注解的作用?
Hilt中@Singleton注解在@Provides函数上的作用
你搞混了类上的@Singleton和@Provides函数上的@Singleton的作用——类上的@Singleton是标记这个类本身的实例为单例,而@Provides函数上的@Singleton,是告诉Hilt:这个函数返回的对象,要以单例的形式被管理,整个应用生命周期内只创建一次,所有依赖这个对象的地方,拿到的都是同一个实例。
拿你给出的代码举例:
@Module @InstallIn(SingletonComponent::class) object SomeModule { @Singleton @Provides fun provideSomething(): String { return "Hi there" } }
这里的@Singleton并非作用在provideSomething函数本身,而是作用在它返回的String实例上。当其他类通过依赖注入获取该类型的实例时,Hilt只会调用一次provideSomething(),把返回的"Hi there"缓存起来,后续所有注入请求都会直接返回这个缓存的实例,而非每次都重新调用函数生成新的对象。
这么做的核心意义:
- 避免重复创建开销较大的对象(比如网络客户端、数据库实例),节省系统资源
- 保证全局状态的一致性(比如全局配置类,所有依赖处使用同一个实例才能确保配置统一)
需要注意的是,@Provides函数上的@Singleton必须和@InstallIn(SingletonComponent::class)配合使用——因为SingletonComponent的生命周期覆盖整个应用进程,只有这样才能保证单例实例在应用运行期间持续存在。如果Module被安装在生命周期更短的Component(比如ActivityComponent)中,即使加了@Singleton,实例也会随Component的销毁被回收,无法实现全局单例的效果。
内容的提问来源于stack exchange,提问作者Johann
相关产品推荐
相关产品推荐

