@Singleton 与 @InstallIn(SingletonComponent::class)

问题描述 投票:0回答:4

这两者有什么区别?我认为它们都注释一个单例对象/实例,但不知何故

@Singleton
可以用来注释方法,而不是类。我真的很困惑他们两个。

android singleton dagger-hilt
4个回答
1
投票

@SingletonComponent 指定可以在整个应用程序中使用。

@Singleton 是一种软件设计模式,使对象被初始化一次。


0
投票

ApplicationComponent
重命名为
SingletonComponent
,以允许在非 Android Gradle 模块中使用 Hilt link

但是

@Singleton
是一种软件设计模式link


0
投票

模块中提供的组件实例指定为

@InstallIn(SingletonComponent::class)
贯穿应用程序的整个生命周期。因此,它指的是组件的生命周期。

在使用注入(例如字段或构造函数)时,Hilt 提供组件的实例。如果我们希望这些组件也只创建一次,我们应该添加

@Singleton
范围注释。如果我们不添加它,就会不断创建新实例。

但是,确定与组件的绑定的范围可能成本很高,因为所提供的对象一直保留在内存中,直到该组件被销毁。这就是为什么默认情况下,Hilt 中的所有绑定都是无作用域的,您需要根据需要使用它们。您可以在Android官网阅读详情


0
投票

@InstallIn(X)
用于指定安装/绑定组件到
X

例如:

@InstallIn(SingletonComponent::class)
object ApiModule {
    @Provides
    fun provideRetrofit(){
        ...
    }
}

上面的示例意味着

ApiModule
已绑定到应用程序类,但每次 Hilt 尝试提供 Retrofit 实例时,它都会创建一个新对象。但是,如果我们添加
@Singleton
那么它每次都会返回相同的 Retrofit 实例:

@InstallIn(SingletonComponent::class)
object ApiModule {
    @Provides
    @Singleton
    fun provideRetrofit(){
        ...
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.