什么也正是在这种情况下,内存泄漏?(What's exactly a memory leak

2019-09-17 16:38发布

要清除所有后台活动我做了以下内容:

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

任何帮助将大大赞赏。

Answer 1:

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

在这种情况下 - 垃圾收集器会尝试释放内存中的活动/活动,但由于东西(你的活动引用的阵列)持有对它的引用 - 它不能被垃圾收集,所以它不能免费从内存和这是一个内存泄漏的样本。

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

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



Answer 2:

尝试旋转装置几次,看看happens-你最终会耗尽内存,因为你仍然保持参照以前的语境其中GC不能清除。



文章来源: What's exactly a memory leak in this case?