要清除所有后台活动,我会执行以下操作:
我保留了一个静态数组列表,每当我以前从一个活动转到另一个活动时,在新活动的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在我的应用程序中找到了这个内存泄漏。
非常感谢任何帮助。
答案 0 :(得分:2)
持有对其背景之外的活动的引用(当它们处于后台或"关闭" /完成时)会导致内存泄漏 - Android操作系统希望从内存中清除"旧&#34 ;活动决定了它的时间(你无法手动控制它)。
在这种情况下 - 垃圾收集器会尝试从内存中释放活动/活动,但是因为某些内容(您对活动的引用数组)正在引用它 - 它不能被垃圾收集,所以它无法将其从内存中释放出来 - 这是内存泄漏的样本。
本文档介绍了如何避免内存泄漏:
http://android-developers.blogspot.co.uk/2009/01/avoiding-memory-leaks.html
答案 1 :(得分:0)
尝试旋转设备几次,看看会发生什么 - 你最终会耗尽内存,因为你仍然保留对GC无法清除的先前上下文的引用。