是否有必要在onDestroy()中将作用域对象图设置为null?

时间:2014-11-26 17:37:18

标签: java android dagger

在Antonia Leiva关于范围对象图(http://antonioleiva.com/dagger-3/)的帖子中,他写道:

"在onDestroy中将[scoped graph]设置为null,以便尽快通过垃圾收集器释放它。"

@Override protected void onDestroy() {
    super.onDestroy();
    activityGraph = null;
}

为了澄清,activityGraph是通过在应用程序对象图上调用plus来创建的范围图。

是否有必要将activityGraph设置为null,否则只要它注入的类不再存在就会被垃圾收集?

1 个答案:

答案 0 :(得分:3)

必要吗?否。

当调用onDestroy时,很快就会释放对Activity的引用并使其可用于CG。 GC将看到Activity是对scoped图表的唯一引用,并且两者都将被标记为收集。

将其设置为null也不是很糟糕。你确保在NPE的惩罚下,没有人可以使用图表。如果有人意外泄漏了活动参考,那么图表将可用于GC。然而,优化参考泄漏并不是最佳实践,因为无论如何应用程序最终都会成为OOM。事实上,不将图表设置为null将有助于OOM更快地强制您识别问题!