xml中的Android位图泄漏内存?

问题描述:

这里有一些新手的内存管理观察,我想 听到有经验的意见。xml中的Android位图泄漏内存?

看来,在xml 布局中设置android:backgound =“@ drawable/xyz”会在我的应用程序中导致内存丢失。相应的活动保持 叠加,直到出现OOM错误。如果我将设备方向旋转 ,情况尤其如此。

但是,如果我用setBackgoundResource()加载相同的资源,然后清除 回调并将背景参考设置为null,则不会有任何泄漏。

即先在的onCreate()

mMainLayout.setBackgroundResource(R.drawable.background_general_android); 

,然后在的onDestroy()

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

这是大致正确的,还是我失去了一些东西必不可少的?

+0

我的确会面对非常相同的问题。我将尝试在onCrate和onDestroy中管理位图。 ty – guness

这只会发生,如果你保存在一个静态缓存drawables副本为例。您也可能泄漏您的活动,并将drawables设置为null,将问题隐藏一段时间。你应该使用像MAT这样的工具来检查你的堆的内容并找出发生了什么。

+1

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