这两者有什么区别?我认为它们都注释一个单例对象/实例,但不知何故
@Singleton
可以用来注释方法,而不是类。我真的很困惑他们两个。
@SingletonComponent 指定可以在整个应用程序中使用。
@Singleton 是一种软件设计模式,使对象被初始化一次。
模块中提供的组件实例指定为
@InstallIn(SingletonComponent::class)
贯穿应用程序的整个生命周期。因此,它指的是组件的生命周期。
在使用注入(例如字段或构造函数)时,Hilt 提供组件的实例。如果我们希望这些组件也只创建一次,我们应该添加
@Singleton
范围注释。如果我们不添加它,就会不断创建新实例。
但是,确定与组件的绑定的范围可能成本很高,因为所提供的对象一直保留在内存中,直到该组件被销毁。这就是为什么默认情况下,Hilt 中的所有绑定都是无作用域的,您需要根据需要使用它们。您可以在Android官网阅读详情。
@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(){
...
}
}