【问题标题】:How do Dagger 2 scoped components work?Dagger 2 作用域组件如何工作?
【发布时间】:2017-09-12 14:42:58
【问题描述】:

我是 Dagger 2 的新手,我设法掌握了它的基本工作原理,但我对自定义范围的真正工作原理感到困惑。所以这就是问题所在:假设我有这样定义的ActivityScope

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

还有一个作用域组件:

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

按照我的理解,这个组件提供的对象将只有一个实例,该实例与组件的生命周期一样长,但什么决定了组件的生命周期?是构建组件的位置(应用程序、Activity 内部、Fragment ...),还是其他?

我不知道这是否适合提出这个问题,但欢迎提供任何帮助。谢谢。

【问题讨论】:

    标签: android scope dagger-2


    【解决方案1】:

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

    正确。此组件提供的作用域对象只会存在一次。这不适用于无范围对象,它们每次都会重新创建,并且可以由任何组件提供。

    [...] 但是什么决定了组件的寿命?是构建组件的位置(应用程序、Activity 内部、Fragment ...),还是其他?

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

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

    【讨论】:

    • 感谢您的澄清,您真的很有帮助。
    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多