我需要根据某些事件为布局设置不同的背景。这导致OOM异常。我添加了代码来解决这个问题,但现在这造成了再循环位图问题。获取画布:在设置布局背景时使用回收的位图
下面是代码:
if (change_bg != 0) {
//Garbage collect the current BG.
BitmapDrawable bg = ((BitmapDrawable)llayout.getBackground());
llayout.setBackgroundResource(0);
if (bg != null) {
bg.getBitmap().recycle();
bg = null;
}
System.gc();
llayout.setBackgroundResource(change_bg);
llayout.invalidate();
}
这不会发生的第一时间,但一些随机事件4-5之后。
如果我不打电话bg.getBitmap().recycle
,会遇到OOM异常。
任何人都可以指出错误或建议在同一视图中设置布局背景 的正确方法吗?
注:
我删除了android:背景= “@绘制/ bg_initial” 的; ayout,但它没有任何效果。
该应用程序正在使用其他视图与布局具有背景图像和问题 没有看到这些意见。
从表面上看这似乎并没有被记忆的问题,但问题设置在同一视图不同 时的背景。我可以实现不同的切换背景图片 ,但这似乎矫枉过正。如果有人提供简单而真实的解决方案,会很高兴。
编辑:
我添加了背景位图的垃圾收集的OnDestroy()的代码,并且似乎有 解决这个问题..至少我现在无法立即重现问题。
但我想知道这是什么解释。我没有将布局图或 图像保存在一个静态变量中,因此我不确定它是否保存在内存中。我想知道 是怎么回事。有人可以解释这个吗?
如果您仔细阅读代码,您的建议已经完成。 llayout.setBackgroundResource(0)。并且在第二次调用setBackground时引发循环位图异常。我没有使用ImageView,而是设置线性布局背景。 – Mano