Android 如何从内存中清除动态创建的视图?

Android 如何从内存中清除动态创建的视图?,android,memory,view,Android,Memory,View,我正试图从记忆中清除一些观点 情况是这样的。 我有一个活动,我称之为A和另一个B 现在,我按下活动a中的一个按钮,它调用活动B,动态创建许多视图 之后,我按下后退按钮返回活动A 多次重复这两个步骤 结果是,在DDMS中,对象数量和分配的内存仍在增长(对象数量增加88个,分配0002MB) 这意味着视图不会从内存中删除 如何从内存中完全清除视图 谢谢 更新- 给你一些新信息 基本上,在我的“现实世界”中,我只有一个活动,它被创建了很多次。发生这种情况是因为我发现它必须与Web服务通信,并且所有响应

我正试图从记忆中清除一些观点

情况是这样的。 我有一个活动,我称之为A和另一个B

现在,我按下活动a中的一个按钮,它调用活动B,动态创建许多视图 之后,我按下后退按钮返回活动A 多次重复这两个步骤

结果是,在DDMS中,对象数量和分配的内存仍在增长(对象数量增加88个,分配0002MB) 这意味着视图不会从内存中删除

如何从内存中完全清除视图

谢谢

更新- 给你一些新信息

基本上,在我的“现实世界”中,我只有一个活动,它被创建了很多次。发生这种情况是因为我发现它必须与Web服务通信,并且所有响应都是在该活动的新实例中创建的

我试图用下面的代码解决这个问题

@Override
protected void onDestroy() {
    super.onDestroy();      
    nullViewDrawablesRecursive(mRootView);
    mRootView = null;
    System.gc();
}
这是我的nullViewDrawablesRecursive

private void nullViewDrawablesRecursive(View view) {
    if (view != null) {
        try {
            ViewGroup viewGroup = (ViewGroup) view;


            int childCount = viewGroup.getChildCount();
            for (int index = 0; index < childCount; index++) {
                View child = viewGroup.getChildAt(index);
                nullViewDrawablesRecursive(child);
            }
        } catch (Exception e) {
        }

        nullViewDrawable(view);
    }
}
基本上,在销毁活动之前,我试图从父视图(mRootView)中删除所有视图和子视图。它工作得很好,如果我不这样做,对象和内存使用会越来越多

重点是,它不是完美的,显然某些类型的视图不会被破坏。我想我是在“重新发明轮子”,对于一件简单的事情来说,这似乎很难


再次感谢你帮助我

通常,您不需要担心从内存中清除视图。必要时,您可以让虚拟机和Android框架来处理这一问题。但是,您确实需要关注内存泄漏。如果您的活动正在共享/保留对视图的引用,并且它们不能被垃圾收集,那么这就是一个问题。您可以从以下内容开始阅读:

在onDestroy()中将视图设置为null并调用垃圾收集器,但是如果不看到您的代码,就很难提供更具体的建议

@Override
public void onDestroy() {
    super.onDestroy();
    myView = null;
    System.gc();
}

这可以通过调用System.gc()来帮助垃圾收集器,但不能保证内存被清除。但是,只要没有泄漏,就不会有问题。

虽然这没有问题,但确实没有必要。我尝试了类似的方法,请检查我在第一篇文章中的编辑,有一些关于我的问题的新信息。
System.gc()
不应该调用,甚至调用
System.gc()并不意味着
gc
将收集所有对象或运行。这完全取决于gc是否运行!当我启动这个应用程序时,我特别注意内存泄漏和避免它们的漏洞。我想这不是重点,但我需要的方式是利用我的活动。请在第一篇文章中检查我的编辑并帮助我!我会很感激的!你不应该做你张贴的任何事情。你能分享你活动的完整代码吗?我猜某个地方有内存泄漏,最好尝试修复它,而不是取消所有视图。我觉得我的问题有点难以追踪。这些函数属于我的抽象活动(扩展活动),所有其他活动都派生它。因此,我用来从webservice重新创建每个表单的活动可能是问题所在,也可能不是问题所在。我真的不知道该怎么办,WActiviy只有这些功能,还有一个功能可以帮助我进行方向更改(我有两个行为可以让我的所有自定义视图根据屏幕大小调整大小)。几个月前,我将“配置更改”设置为“方向”,以帮助我解决另一个问题,你认为这可能是问题吗?共享活动和从中继承的一两个。你最好把它们放在类似的地方,并在你的帖子中添加链接。在你的问题中加入大量的代码会使它太难阅读。很明显,您在某个地方遇到了问题,我不会假设原因是什么。我意识到可能存在内存泄漏问题。问题是:我有一个静态上下文列表,当在“onCreate”上创建活动时,我会添加一个上下文,然后在“onDestroy”上删除它,这不是“mRootView=null”;够了吗?或者你必须递归地使drawables无效吗?你不必通过try-catch块强制转换对象。您所要做的就是检查如下类型:if(object instanceof Class){Class Class Class=(Class)object;}onDestroy()不能被调用
@Override
public void onDestroy() {
    super.onDestroy();
    myView = null;
    System.gc();
}