在这种情况下,什么是内存泄漏?

时间:2012-06-01 06:25:27

标签: android memory-leaks

要清除所有后台活动,我会执行以下操作:

我保留了一个静态数组列表,每当我以前从一个活动转到另一个活动时,在新活动的onCreate()方法中,我将当前活动的对象添加到该列表中,如下所示:

SomeClass.addActivity(CurrentActivity.this);

我在每个活动中添加了上述声明。

addActivity():

public void addActivity(final Activity activity) {
            activityList.add(activity);
        }

当我想清理堆栈时,我打电话给:

public boolean clearStack() {
        for (Activity activity : activityList) {
            activity.finish();
        }
        activityList.clear();
        return (activityList.isEmpty());
    }

通过这种方式,我清除了我的活动堆栈。

但它产生了内存泄漏。这不是正确的方法。持有对活动的引用是不正确的。在这种情况下,你能解释一下为什么以及如何发生内存泄漏?

我使用MAT for eclipse在我的应用程序中找到了这个内存泄漏。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

持有对其背景之外的活动的引用(当它们处于后台或"关闭" /完成时)会导致内存泄漏 - Android操作系统希望从内存中清除"旧&#34 ;活动决定了它的时间(你无法手动控制它)。

在这种情况下 - 垃圾收集器会尝试从内存中释放活动/活动,但是因为某些内容(您对活动的引用数组)正在引用它 - 它不能被垃圾收集,所以它无法将其从内存中释放出来 - 这是内存泄漏的样本。

本文档介绍了如何避免内存泄漏:

http://android-developers.blogspot.co.uk/2009/01/avoiding-memory-leaks.html

答案 1 :(得分:0)

尝试旋转设备几次,看看会发生什么 - 你最终会耗尽内存,因为你仍然保留对GC无法清除的先前上下文的引用。