视图引用显示它的活动是否安全?

时间:2011-02-11 13:24:10

标签: android

我扩展了View并将其传递给了我的Activity实例,因此视图可以访问一些成员变量和方法。

但是现在我认为这可能是一个潜在的内存泄漏,因为即使在Activity被销毁之后,它仍然会引用成员变量中的视图,反之亦然。所以垃圾收集器可能永远不会清理它们。

但是,我已经在一些Google API演示和示例中看到他们已将Activity作为监听器传递给View。

2 个答案:

答案 0 :(得分:6)

这很好,请记住,您使用其构造函数以编程方式创建的任何普通View都将Context作为其参数 - 通常您给构造函数的Context只是this,或者Activity本身。所以你的View已经引用了它的Activity。您也可以使用其getContext()方法在View类中获取此内容。

当活动被销毁时,它将保留在内存中,直到GC可以将其删除。但作为其onDestroy方法的一部分,它将对其包含的任何视图的引用设置为null,依此类推。然后GC可以安全地删除其所有组件视图。完成后,活动没有任何引用,另一个GC通道可能会删除它。

答案 1 :(得分:3)

所有View构造函数都将Context作为参数,因此它们已经有了引用。也许发布自定义视图的代码,以便我们查看它。