0

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

只是出于好奇,视图或适配器类的成员 mContext 何时清空?

我找不到做这种事情的角色...

编辑:

我知道 GC,但例如,

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

4

3 回答 3

2

检查何时释放空变量超出了您的控制范围。但是您可以避免 OOME 问题。

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

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

还要检查您的代码中是否没有内存泄漏问题。因为这也可能导致OOME。您可以通过使用MAT (plugin) for eclipse来检查内存泄漏问题。

即使这不能解决您的问题,请询问我们,我们会尝试寻找其他解决方案。

谢谢 :)

于 2012-09-03T05:36:58.473 回答
2

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

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

于 2012-09-03T05:52:15.337 回答
1

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

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

于 2012-09-03T05:26:13.437 回答