【问题标题】:Dagger2 using ScopeDagger2 使用范围
【发布时间】:2018-03-19 07:14:42
【问题描述】:

我将 Dagger2 用于 android 项目 我有 2 个范围:ActivityScope 和 FragmentScope 我阅读了一些示例代码,他们说定义和使用 ActivityScope 以便对象将在活动生命周期中被销毁。并且因为 Activity 和 Fragment 有不同的生命周期,所以我们应该有 2 个作用域。

我的问题是: 我是否需要做一些事情让代码知道当我使用 ActivityScope 时,对象应该随着活动生命周期而被销毁?或者代码自动知道当我像这样构建 dagger 并注入到 Activity 时

((DeezFoodzApplication) getApplication()).getAppComponent().inject(this);

【问题讨论】:

  • 它唯一知道的是,如果它已经在该组件中创建,则不应再次创建它。

标签: android dagger-2


【解决方案1】:

我是否需要做一些事情让代码知道当我使用 ActivityScope 时,对象应该随着 Activity 生命周期而被销毁?

不会。垃圾收集器会处理它(除非你将它存储在某个静态变量中)。

Dagger 只知道如何创建或注入您的对象。它不关心生命周期,何时何地注入/创建对象,或如何存储组件。没有魔法发生,没有服务在运行,或者涉及其他一些黑客行为。组件只是一些知道如何用对象填充 Activity 中的这些字段的 java 类。就是这样。

  • 如果您不存储该组件,它会在使用后被回收。
  • 如果您将组件存储在 Activity / Fragment 的字段中,它将在 onDestroy 之后与 Activity / Fragment 一起被垃圾收集
  • 如果您将组件存储在某个静态变量中或将其传递到某个长期存在的地方,那么它将一直留在那里直到您 null 它或 那个 对象被垃圾收集。 (而且您的 Activity / Fragment 可能会泄漏)避免将组件存储在静态变量中。

它只是一个普通的对象,和其他任何东西一样,尽量不要想太多。您可以随时检查生成的源代码或调试它。

【讨论】:

    猜你喜欢
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 2015-07-07
    • 2017-10-02
    • 2016-05-20
    • 1970-01-01
    • 2019-08-12
    相关资源
    最近更新 更多