Dagger 2范围组件如何工作?

时间:2017-09-12 14:42:59

标签: android scope dagger-2

我是Dagger 2的新手,我设法掌握了它的工作原理,但我对自定义范围的确如何运作感到困惑。所以这就是问题所在:假设我ActivityScope定义如下:

@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface ActivityScope {
}

和范围组件:

@ActivityScope
@Component( modules = ActivityModule.class)
public interface ActivityComponent {
   /* ... */
}

我理解它的方式,这个组件提供的对象将只有一个实例,只要组件存在,它就会存在,但是什么决定了组件的存在时间?它是构建组件的位置(应用程序,活动,片段......),还是其他东西?

我不知道这是否是提出这个问题的正确地点,但欢迎任何帮助。感谢。

1 个答案:

答案 0 :(得分:2)

  

我理解它的方式,该组件提供的对象将只有一个实例,只要该组件存在[...]

正确。此组件提供的范围对象仅存在一次。对于未编译的对象,情况并非如此,每次都可以重新创建,并且可以由任何组件提供。

  

[...]但是什么决定了一个组件的生存时间?它是构建组件的位置(应用程序,活动,片段......),还是其他东西?

你这样做。如果您决定将组件存储在静态变量中 - 请不要 - 然后只要您的应用程序处于活动状态且正在运行(并且可能会在此过程中泄漏活动),该组件就会存在。

如果您只是将您的组件保留在Activity中,那么一旦Activity被销毁,它将与其余组件一起被垃圾收集。