我有一个" init"填充位图数组(a"缓存")内容的过程,从单个big,int数组中读取像素。
在保存每个图像之前,可能需要将图像大小调整为" target"尺寸。因此,我必须首先使用Bitmap.createBitmap
创建完整大小的位图,然后使用Bitmap.createScaledBitmap
将其保存在缓存中。
显然,我不想填补记忆,但它会发生"有时"在程序中。我错过了什么?我想知道在Bitmap.createBitmap
功能之后是否实际删除了使用setImageCache
创建的第一个位图。
for (int i = 0; i < array.length; i++) {
setImageCache(i, Bitmap.createScaledBitmap(
Bitmap.createBitmap(intArray, area * i, origW, origW, origH, Bitmap.Config.ARGB_8888),
targetW, targetH, true
));
}
答案 0 :(得分:0)
只要您没有获得OutOfMemoryExceptions,一切都应该没问题,但您可以通过回收不需要的位图来改善您的代码:
for (int i = 0; i < array.length; i++) {
Bitmap bitmap = Bitmap.createBitmap(intArray, area * i, origW, origW, origH, Bitmap.Config.ARGB_8888);
Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, targetW, targetH, true);
bitmap.recycle();
setImageCache(i, scaledBitmap);
}
通过回收位图,您不需要释放那些不需要的位图占用的内存,这可以在处理大图像时显着抑制内存问题。