【发布时间】:2017-06-10 14:07:23
【问题描述】:
我在我的 android 应用项目中使用dagger 2 进行依赖注入。
问题是如何在活动终止时从组件中删除引用?
我已经阅读了一些关于自定义 范围 的文档,并且我创建了一个名为 @ForActivity 的自定义范围,因此带有此注释的引用将在活动时删除死了,但他们没有。
对这个问题有什么建议吗?
【问题讨论】:
我在我的 android 应用项目中使用dagger 2 进行依赖注入。
问题是如何在活动终止时从组件中删除引用?
我已经阅读了一些关于自定义 范围 的文档,并且我创建了一个名为 @ForActivity 的自定义范围,因此带有此注释的引用将在活动时删除死了,但他们没有。
对这个问题有什么建议吗?
【问题讨论】:
如果您的组件共享 Activity 的生命周期(即在 onCreate 中创建组件,并将其存储在 Activity 本身中),它将在 Activity 生命周期结束时与 Activity 一起被垃圾收集。
另一方面,如果您将一个以某种方式引用 Activity 的组件放在静态变量或其他一些寿命较长的对象中,您将造成内存泄漏。这是唯一要记住的事情。
没有什么会被神奇地“移除”,因为 Dagger 只是为您生成处理对象创建的 POJO。通常让 GC 完成它的工作就足够了。
作用域只是对依赖进行分组和定义关系,但最终你的组件只是一个包含更多对象的对象。如果您没有如上所述造成内存泄漏,垃圾收集器会将其与 Activity 以及其他所有内容一起删除。
我最近还给出了 2 个关于作用域/活动/作用域对象的详细答案,您可以在其中找到有关如何使用作用域/活动的更具体示例:
【讨论】: