我有一个包含三项活动的应用程序。 启动活动 A -> 活动 B -> 活动 -> C
上一个活动已完成,同时导航到下一个活动。
我通过以下方式在 Activity A 和 Activity B 中注入对象
@Module
@InstallIn(SingletonComponent::class)
class MyProvider {
// Provides object in Activity A
@Provides
fun provideTheObjectA(): SomeObjectA {
return SomeObjectA()
}
}
@Module
@InstallIn(ActivityComponent::class)
class AvtivtyBProvider {
// Provides object in Activity B
@Provides
fun provideTheObjectB(): SomeObjectB {
return SomeObjectB()
}
}
class ActivtyA: AppCompatActivity(){
@Inject
SomeObjectA
}
class ActivtyB: AppCompatActivity(){
@Inject
SomeObjectB
}
我想了解这里SingletonComponent和ActivityComponent的区别。
那么,
如果是这样,如果我没有使用@Singleton注解,@SingletonComponent有什么意义?
我假设当 Activity B 被销毁时,对象 B 也会被销毁/垃圾收集。
我在创建对象 B 的实例时没有使用@ActivtyScoped。这有什么区别?
仅拥有 @Provides 注释而没有任何范围最终意味着什么
SingletonComponent
和 ActivityComponent
是范围的定义。
注意:在 @InstallIn 模块内确定绑定的范围时,范围 绑定必须与组件的范围相匹配。例如,一个 @InstallIn(ActivityComponent.class) 模块内的绑定只能 使用 @ActivityScoped 确定范围。
就你而言,
SomeObjectB
不可能是@Singleton
,只能是@ActivityScoped
。
组件的生命周期通常受到创建和创建的限制 销毁 Android 类的相应实例。
@Provides
将在您注入时创建一个新对象。 @Provides
仅在模块 @Module
中使用。这就是没有范围的要点。@Singleton
ObjectA
中请求 ActivityB
(以及应用程序中的任何地方)