我需要根据某些事件为布局设置不同的背景。这导致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异常。
谁能指出错误或建议在同一视图中设置布局背景的正确方法?
笔记:
我删除了 ;ayout 中的 android:background="@drawable/bg_initial" 但它没有效果。
该应用程序正在使用具有背景图像的布局的其他视图,并且这些视图没有出现问题。
从表面上看,这似乎不是内存问题,而是在同一视图中设置不同背景时的问题。我可以实现不同的切换背景图像,但这似乎有点过头了。如果有人提供一个简单而真实的解决方案,我会很高兴。
编辑 :
我在 OnDestroy() 中添加了背景位图垃圾收集代码,这似乎解决了问题.. 至少我现在无法重新创建问题。
但我想知道对此的解释是什么。我没有将布局或图像保存在静态变量中,因此我不确定它是否保存在内存中。我想知道发生了什么事。有人可以解释一下吗?