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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 04:45:29