在Antonia Leiva关于范围对象图(http://antonioleiva.com/dagger-3/)的帖子中,他写道:
"在onDestroy中将[scoped graph]设置为null,以便尽快通过垃圾收集器释放它。"
@Override protected void onDestroy() {
super.onDestroy();
activityGraph = null;
}
为了澄清,activityGraph
是通过在应用程序对象图上调用plus
来创建的范围图。
是否有必要将activityGraph
设置为null,否则只要它注入的类不再存在就会被垃圾收集?
答案 0 :(得分:3)
必要吗?否。
当调用onDestroy
时,很快就会释放对Activity的引用并使其可用于CG。 GC将看到Activity是对scoped图表的唯一引用,并且两者都将被标记为收集。
将其设置为null
也不是很糟糕。你确保在NPE的惩罚下,没有人可以使用图表。如果有人意外泄漏了活动参考,那么图表将可用于GC。然而,优化参考泄漏并不是最佳实践,因为无论如何应用程序最终都会成为OOM。事实上,不将图表设置为null
将有助于OOM更快地强制您识别问题!