Dagger2使用Scope

时间:2017-10-07 18:00:19

标签: android dagger-2

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

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

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

1 个答案:

答案 0 :(得分:1)

  

我是否需要做一些事情让代码知道当我使用ActivityScope时,对象应该在活动生命周期中销毁?

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

Dagger除了如何创建或注入您的对象外什么都不知道。它不关心生命周期,何时或何处注入/创建对象,或者如何存储组件。没有魔法,没有服务运行,或其他一些黑客参与。组件只是一些知道如何使用对象填充Activity中的字段的java类。就是这样。

  • 如果您不存储该组件,则在使用后将收集该组件。
  • 如果您将组件存储在Activity / Fragment的字段中,则在onDestroy之后将使用Activity / Fragment对其进行垃圾回收
  • 如果您将组件存储在某个静态变量中或将其传递到长期居住的地方,那么它将一直存在,直到您{/ 1}}或对象被垃圾收集。 (此外,您的Activity / Fragment可能会泄漏)避免将组件存储在静态变量中。

它只是一个像其他任何一个普通的物体,尽量不要过度思考它。您始终可以检查生成的源代码或进行调试。