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);
这是大致正确的,还是我失去了一些东西必不可少的?
这只会发生,如果你保存在一个静态缓存drawables副本为例。您也可能泄漏您的活动,并将drawables设置为null,将问题隐藏一段时间。你应该使用像MAT这样的工具来检查你的堆的内容并找出发生了什么。
上面的观察是基于一个漫长而痛苦的MAT周末:)本质上,我做了只有500 k背景资源位图的barebone线性布局,以及一个除了用setContentView()加载xml之外什么都没做的活动。当位图被设置在xml =>内存丢失和OOM中时。当以编程方式加载并在onDestroy()中清除时,没有问题。但是,我应该提到,除了这个最小的测试活动之外,其他应用程序相当大,可能会影响结果。我特别想在“真实应用内”进行测试。 Android版本是2.2(8级)。 – perza
我的确会面对非常相同的问题。我将尝试在onCrate和onDestroy中管理位图。 ty – guness