2012-06-01 57 views
2

要清除所有后台活动我做了以下内容:这种情况下的内存泄漏究竟是什么?

我保持一个静态数组列表,每当我去从一个活动到另一个活动,在新的活动的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月食找到我的应用程序此内存泄漏。

任何帮助将不胜感激。

回答

2

抱着活动引用它们的上下文外(当它们在后台或“关闭” /成品),导致内存泄漏 - Android操作系统想从记忆的“老”活动,清除,当它决定它的时候这样做(你不能手动控制它)。

在这种情况下 - 垃圾收集器会尝试从内存中释放活动/活动,但是因为某些事情(对活动的引用的数组)持有对它的引用 - 所以它不能被垃圾收集,所以它无法从内存中释放它 - 这是一个内存泄漏的示例。

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

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

+0

清晰明了的解释。谢谢 – Shrikant

+0

@Shrikant:如果你愿意 - 我可以为你提供更好的解决方案来清除背景活动 –

+0

Yaa。请告诉我。 – Shrikant

0

尝试旋转装置几次,看看happens-你最终会耗尽内存,因为你仍然持有参考GC无法清除的先前上下文。

+0

雅,我知道,这就是为什么我问这个问题将完成theriself。 – Shrikant