【问题标题】:Android bitmaps in xml leak memory?xml中的Android位图泄漏内存?
【发布时间】:2012-05-15 10:15:02
【问题描述】:

这里有一些我想要的新手内存管理观察 听取经验丰富的意见。

似乎在 xml 中设置 android:backgound="@drawable/xyz" 布局导致我的应用程序内存丢失。相应的活动保持 堆积,直到我得到一个OOM错误。如果我旋转,尤其如此 设备方向。

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

即先在onCreate()

    mMainLayout.setBackgroundResource(R.drawable.background_general_android);

然后在 onDestroy() 中

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

这大致正确吗,还是我遗漏了一些重要的东西?

【问题讨论】:

  • 我时常面临同样的问题。我将尝试在 onCrate 和 onDestroy 中管理位图。 ty

标签: android memory-leaks resources bitmap drawable


【解决方案1】:

例如,只有在静态缓存中保留可绘制对象的副本时,才会发生这种情况。您可能还泄漏了您的活动并将可绘制对象设置为 null 只是将问题隐藏了更长时间。您应该使用 MAT 之类的工具来检查堆的内容并弄清楚发生了什么。

【讨论】:

  • 上面的观察是基于一个漫长而痛苦的周末与 MAT :) 基本上我做了准系统线性布局,只有 500 k 背景资源位图,以及一个除了用 setContentView 加载 xml 什么都不做的活动()。当位图设置在 xml => 内存丢失和 OOM 中时。当以编程方式加载并在 onDestroy() 中清除时,没有问题。但是,我应该提到,除了这个最小的测试活动之外,应用程序的其余部分相当大,这可能会影响结果。我特别想在“内部真实应用程序”中对其进行测试。 Android 版本为 2.2(8 级)。
猜你喜欢
  • 2013-06-05
  • 2012-11-19
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多