Android中XML中的位图是否会导致内存泄漏?

5
以下是一些新手内存管理的观察,我希望听取有经验的意见。
在XML布局中设置android:background="@drawable/xyz"似乎会导致我的应用程序出现内存泄漏。相应的活动会不断堆叠,直到我收到OOM错误。如果旋转设备方向,则尤其如此。
然而,如果我使用setBackgoundResource()加载相同的资源,然后清除回调并将背景引用设置为null,就不会有任何泄漏。
也就是说,在onCreate()中首先这样做。
    mMainLayout.setBackgroundResource(R.drawable.background_general_android);

然后在onDestroy()中执行

mMainLayout.getBackground().setCallback(null);
mMainLayout.setBackgroundDrawable(null);

这大概是正确的,还是有重要的东西我没有理解吗?

我时不时会遇到同样的问题。我将尝试在onCreate和onDestroy中管理位图。谢谢。 - guness
1个回答

1
这种情况只会发生在您将可绘制对象的副本保留在静态缓存中的情况下。您可能还会泄漏活动,并且将可绘制对象设置为null只是暂时隐藏了问题。您应该使用MAT等工具检查堆的内容,找出问题所在。

1
上面的观察是基于与MAT度过的漫长而痛苦的周末 :) 基本上,我制作了一个仅包含500 k背景资源位图的裸线性布局,以及一个什么也不做但加载xml并使用setContentView()的活动。当位图在xml中设置时=>内存损失和OOM。当以编程方式加载并在onDestroy()中清除时,没有问题。但是,我应该提到,除了这个最小的测试活动之外,应用程序的其余部分相当大,这可能会影响结果。我特别想在“真实应用程序内部”中进行测试。Android版本为2.2(级别8)。 - perza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接