为了清除所有后台 Activity ,我执行了以下操作:
我保留了一个静态数组列表,每当我从一个 Activity 转到另一个 Activity 时,在新 Activity 的 onCreate() 方法中,我将当前 Activity 的对象添加到该列表中,如下所示:
SomeClass.addActivity(CurrentActivity.this);
我在每个 Activity 中添加了上述语句。
addActivity():
public void addActivity(final Activity activity) {
activityList.add(activity);
}
当我想清除堆栈时,我调用了:
public boolean clearStack() {
for (Activity activity : activityList) {
activity.finish();
}
activityList.clear();
return (activityList.isEmpty());
}
这样,我就清除了我的 Activity 堆栈。
但是它产生了内存泄漏。这不是正确的做法。保留对 Activity 的引用是不行的。你们能解释一下这种情况下内存泄漏的原因和具体方式吗?
我使用 MAT for eclipse 在我的应用程序中发现了这个内存泄漏。
任何帮助将不胜感激。
最佳答案
持有对其上下文之外的 Activity 的引用(当它们处于后台或“关闭”/完成时)会导致内存泄漏 - Android 操作系统在决定是时候从内存中清除“旧” Activity 所以(你无法手动控制它)。
在这种情况下 - 垃圾收集器会尝试从内存中释放一个或多个 Activity ,但因为某些东西(对 Activity 的引用数组)持有对它的引用 - 它不能被垃圾收集,所以它可以不将其从内存中释放 - 这是内存泄漏的一个示例。
本文档描述了如何避免内存泄漏:
http://android-developers.blogspot.co.uk/2009/01/avoiding-memory-leaks.html
关于android - 在这种情况下,到底什么是内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10845400/