这两个有什么区别?我认为它们都注解了单例对象/示例,但不知何故,@Singleton可以用来注解方法,而不是类。我对他们两个都很困惑。
@Singleton
x759pob21#
@SingletonComponent指定它可以在整个应用程序中使用。@Singleton是一种软件设计模式,它使对象被初始化一次。
eblbsuwk2#
ApplicationComponent被重命名为SingletonComponent,以允许在非Android Gradle模块中使用Hilt link但是@Singleton是一个软件设计模式link
ApplicationComponent
SingletonComponent
gz5pxeao3#
指定为@InstallIn(SingletonComponent::class)的模块中提供的组件示例在整个应用程序生命周期中存在。因此,它指的是组件的生命周期。在使用注入(如字段或构造函数)时,Hilt提供了组件的示例。如果我们希望这些组件也只创建一次,我们应该添加@Singleton范围注解。如果我们不添加这个,就会不断创建新的示例。但是,确定组件绑定的作用域可能代价很高,因为所提供的对象会一直保留在内存中,直到该组件被销毁。这就是为什么默认情况下,Hilt中的所有绑定都是无作用域的,你需要根据自己的需要使用它们。您可以在Android官方网站上阅读详细信息。
@InstallIn(SingletonComponent::class)
3条答案
按热度按时间x759pob21#
@SingletonComponent指定它可以在整个应用程序中使用。
@Singleton是一种软件设计模式,它使对象被初始化一次。
eblbsuwk2#
ApplicationComponent
被重命名为SingletonComponent
,以允许在非Android Gradle模块中使用Hilt link但是
@Singleton
是一个软件设计模式linkgz5pxeao3#
指定为
@InstallIn(SingletonComponent::class)
的模块中提供的组件示例在整个应用程序生命周期中存在。因此,它指的是组件的生命周期。在使用注入(如字段或构造函数)时,Hilt提供了组件的示例。如果我们希望这些组件也只创建一次,我们应该添加
@Singleton
范围注解。如果我们不添加这个,就会不断创建新的示例。但是,确定组件绑定的作用域可能代价很高,因为所提供的对象会一直保留在内存中,直到该组件被销毁。这就是为什么默认情况下,Hilt中的所有绑定都是无作用域的,你需要根据自己的需要使用它们。您可以在Android官方网站上阅读详细信息。