什么时候mContext null清除? (小部件,适配器等)

时间:2012-09-03 05:14:21

标签: android memory-leaks frameworks android-context

我正在与内存泄漏作斗争。

出于好奇, 什么时候是mContext,View或Adapter类的成员,null清除?

我找不到这样做的一部分...

修改

我了解GC,但例如,

ArrayAdapter有mContext,如果Activity有对ArrayAdapter的引用, 这是一个循环参考吗?

3 个答案:

答案 0 :(得分:2)

检查何时释放空变量是您无法控制的。但是你可以避免OOME的问题。

正如Dmitry所说,如果您使用Bitmaps,请在使用后立即调用其recycle()方法。 这样,您可以清除已保留的资源并为应用程序运行腾出空间。

调用GC是没有用的,因为即使你打电话,它也不确定GC是否会释放你的资源。

还要检查代码中是否存在内存泄漏问题。既然这也可以导致OOME。您可以使用MAT(插件)进行eclipse检查内存泄漏问题。

即使这不能解决您的问题,请问我们,我们会尝试找到另一种解决方案。

谢谢:)

答案 1 :(得分:2)

上下文通常是拥有的活动,由Android管理。在活动处于活动状态之前,它保证是活动且有效的。除非您正在做一些棘手或相当低级的事情,否则您不应该在视图和适配器中协调mContext

您应该关注的是在一个类中存储对活动的引用(例如在Context mContext或类似字段中),该类可能比活动(服务,线程,应用程序类等)活得更长)。这将阻止系统正确地对活动进行GC操作,并将导致内存泄漏和细微错误。

答案 2 :(得分:1)

在垃圾收集器获取之前,它不会被清除。换句话说 - 你不应该担心清除你的变量,因为如果没有对它们的引用(不是即时的,而是它们会),它们将被GC收集。

但Android中有一个类会导致麻烦 - Bitmap。如果您的应用程序中存在内存泄漏,首先 - 查看位图使用情况。确保在完成后调用recycle