我正在与内存泄漏作斗争。
出于好奇, 什么时候是mContext,View或Adapter类的成员,null清除?
我找不到这样做的一部分...
修改
我了解GC,但例如,
ArrayAdapter有mContext,如果Activity有对ArrayAdapter的引用, 这是一个循环参考吗?
答案 0 :(得分:2)
检查何时释放空变量是您无法控制的。但是你可以避免OOME的问题。
正如Dmitry所说,如果您使用Bitmaps
,请在使用后立即调用其recycle()
方法。
这样,您可以清除已保留的资源并为应用程序运行腾出空间。
调用GC是没有用的,因为即使你打电话,它也不确定GC是否会释放你的资源。
还要检查代码中是否存在内存泄漏问题。既然这也可以导致OOME。您可以使用MAT(插件)进行eclipse检查内存泄漏问题。
即使这不能解决您的问题,请问我们,我们会尝试找到另一种解决方案。
谢谢:)
答案 1 :(得分:2)
上下文通常是拥有的活动,由Android管理。在活动处于活动状态之前,它保证是活动且有效的。除非您正在做一些棘手或相当低级的事情,否则您不应该在视图和适配器中协调mContext
。
您应该关注的是在一个类中存储对活动的引用(例如在Context mContext
或类似字段中),该类可能比活动(服务,线程,应用程序类等)活得更长)。这将阻止系统正确地对活动进行GC操作,并将导致内存泄漏和细微错误。
答案 2 :(得分:1)
在垃圾收集器获取之前,它不会被清除。换句话说 - 你不应该担心清除你的变量,因为如果没有对它们的引用(不是即时的,而是它们会),它们将被GC收集。
但Android中有一个类会导致麻烦 - Bitmap
。如果您的应用程序中存在内存泄漏,首先 - 查看位图使用情况。确保在完成后调用recycle
。