我现在正在与内存泄漏作斗争。
只是出于好奇,视图或适配器类的成员 mContext 何时清空?
我找不到做这种事情的角色...
编辑:
我知道 GC,但例如,
一个ArrayAdapter有mContext,如果Activity有对ArrayAdapter的引用,这是循环引用吗?
我现在正在与内存泄漏作斗争。
只是出于好奇,视图或适配器类的成员 mContext 何时清空?
我找不到做这种事情的角色...
编辑:
我知道 GC,但例如,
一个ArrayAdapter有mContext,如果Activity有对ArrayAdapter的引用,这是循环引用吗?
检查何时释放空变量超出了您的控制范围。但是您可以避免 OOME 问题。
正如 Dmitry 所说,如果您正在使用Bitmaps
,请在使用后立即调用其recycle()
方法。这样您就可以清除您持有的资源并为应用程序运行腾出空间。
调用 GC 是没有用的,因为即使你调用它,也不确定 GC 是否会释放你的资源。
还要检查您的代码中是否没有内存泄漏问题。因为这也可能导致OOME。您可以通过使用MAT (plugin) for eclipse来检查内存泄漏问题。
即使这不能解决您的问题,请询问我们,我们会尝试寻找其他解决方案。
谢谢 :)
上下文通常是拥有的活动,由 Android 管理。保证活动有效,直到 Activity 处于活动状态。除非您正在做一些棘手或相当低级的事情,否则您不应该mContext
在视图和适配器中保持一致。
您应该关注的是在一个类中存储对一个活动(例如在一个Context mContext
或类似字段中)的引用,该类可能比活动(服务、线程、应用程序类等)寿命更长。这将阻止系统正确地对活动进行 GC,并导致内存泄漏和细微的错误。
在垃圾收集器得到它之前,它不会被清除。换句话说 - 你不应该担心清除你的变量,因为如果没有对它们的引用,它们都会被 GC 收集(不是立即,但它们会)。
但是Android中有一个类会引起麻烦- Bitmap
. 如果您的应用程序中存在内存泄漏,首先 - 查看位图使用情况。确保您recycle
在完成后致电。