我创建了如下的Bitmap,
// create bitmap in the below line
Bitmap myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.googlelogo320x480);
我已将其设置为ImageView。
我的问题是: 1 GT;我是否需要在上面的Bitmap上显式调用Bitmap.recycle()? 2 - ;如果是,那么我该什么时候打电话呢?我已经尝试在第3行之后立即调用它,即在将位图设置为ImageView之后,但是我得到Canvas尝试绘制回收对象的异常。 3 GT;如果我的代码中的Bitmap永远不会调用recycle(),那会是内存泄漏吗? P.S:我正在ICS或以上工作。
答案 0 :(得分:4)
在这种特殊情况下,不,你不应该调用recycle(); ImageView
完成后会调用recycle()。这已经有一段时间了,ICS没有改变这一事实。
当代码完成图像后,您需要调用recycle()。例如,如果您将10个过滤器应用于一个图像并在每个步骤上生成新的位图,则应该在每个步骤之后调用旧位图上的recycle()。
也就是说,你不能同时拥有无限数量的位图,特别是大的位图。那时你需要聪明并动态加载/卸载。
答案 1 :(得分:2)
不调用recycle()将不导致内存泄漏,但可能导致您的应用超出内存限制并爆炸,请参阅下文以查看您的应用是否合格:
答案 2 :(得分:0)
试试这个
if (myBitmap != null) {
myBitmap.recycle();
myBitmap = null;
}
Bitmap original = BitmapFactory.decodeFile(myFile);
myBitmap = Bitmap.createScaledBitmap(original, displayWidth, displayHeight, true);
original.recycle();
original = null;