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

dig*_*ino 6 memory android view clear

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

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

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

结果是,在DDMS中,对象和内存的数量分配的静止图像增长(对象数量增加了88,分配了0,002MB)这意味着视图不会从内存中删除!

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

谢谢 !

更新 - 在这里您可以获得一些新信息

基本上,在我的"真实世界"中,我只有很多次创建的Activity.发生这种情况是因为我必须与Web服务进行通信,并且所有响应都是在此活动的新实例中创建的.

我尝试使用下面的代码解决此问题

@Override
protected void onDestroy() {
    super.onDestroy();      
    nullViewDrawablesRecursive(mRootView);
    mRootView = null;
    System.gc();
}
Run Code Online (Sandbox Code Playgroud)

那是我的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);
    }
}
Run Code Online (Sandbox Code Playgroud)

那是我的nullViewDrawable

private void nullViewDrawable(View view) {
    try {
        view.setBackgroundDrawable(null);
    } catch (Exception e) {
    }

    try {
        ImageView imageView = (ImageView) view;
        imageView.setImageDrawable(null);
        imageView.setBackgroundDrawable(null);
    } catch (Exception e) {
    }
}
Run Code Online (Sandbox Code Playgroud)

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

关键是,它并不完美,显然某些类型的观点不会被破坏.而且我认为我正在"重新发明轮子",这对于一件简单的事情来说似乎很难受!

再次,非常感谢您帮助我!

Eri*_*ine 2

通常,您无需担心从内存中清除视图。必要时你可以让虚拟机和 Android 框架来处理这个问题。但是,您确实需要担心内存泄漏。如果您的活动正在共享/保留对视图的引用,并且它们无法被垃圾收集,那么这就是一个问题。您可以从这里开始阅读:http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html

不过,在没有看到您的代码的情况下,很难提供一些更具体的建议......