gpt4 book ai didi

android - 如何从内存中清除动态创建的 View ?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:12:51 25 4
gpt4 key购买 nike

我正在尝试从内存中清除一些 View 。

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

现在我在 Activity A 中按下一个按钮,调用 Activity B 动态创建大量 View 在此之后,我按下后退按钮返回到 Activity A多次重复这两个步骤。

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

如何从内存中完全清除 View ?

谢谢!

更新-给你一些新信息

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

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

@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);
}
}

那是我的 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) {
}
}

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

关键是,它并不完美,显然某些类型的 View 不会被破坏。而且我认为我是在“重新发明轮子”,一件简单的事情似乎太难了!

再次感谢您对我的帮助!

最佳答案

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

虽然没有看到您的代码,但很难提供一些更具体的建议...

关于android - 如何从内存中清除动态创建的 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9949047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com