【发布时间】:2015-03-02 16:24:56
【问题描述】:
我从 XML 中得到我的位图:
//Get bitmap from drawable
bd = (BitmapDrawable) view.getResources().getDrawable(R.drawable.backgrounds);
backgrounds = bd.getBitmap();
//Do required work with bitmap (Will just use a log statement here for testing
Log.v("NewTag","Testing: "+bd.getBitmap().getPixel(0, 0));
//Now recycle this large bitmap
bd.getBitmap.recycle();
bd=null;
backgrounds.recycle();
backgrounds=null;
我第一次运行这段代码时,一切都很好。但是,当我退出我的应用程序(使用返回键),然后重新启动应用程序时,它可能或可能不工作。有时,我得到一个错误:
无法在回收的位图上调用 getPixel()
为什么?我什至还没有回收它。或者更准确地说,它似乎不是在重新创建位图并记住上次的循环。
如果我使用 BitmapFactory 获取位图,则不会发生此问题(不幸的是,我不能这样做,因为我必须从 XML 别名中获取此特定位图)。
同样在安装 Lollipop 之前,这工作正常(只要我有 bd = null)。
我已经连续 2 天遇到这个问题,所以如果有人能解释一下,我将非常感激。
编辑
我尝试过@aga 的建议,即根本不回收/清空bd,但这没有什么区别。位图在重新创建后仍然“已经”回收(再次,间歇性地)。
另外,当像这样记录时:
Log.v("NewTag","Backgrounds: "+backgrounds);
我注意到当它失败时,记录的引用与上次相同。所以.....
【问题讨论】:
标签: java android memory bitmap recycle