我正在玩游戏,玩家将在天空中飞行,玩家将避免许多敌人。 但在SGS3上我有“内存不足720016 - 字节分配。 我有很多位图,我使用这段代码:
BitmapFactory.Options bfOptions=new BitmapFactory.Options();
bfOptions.inSampleSize = 1;
bfOptions.inDither=false;
bfOptions.inPurgeable=true;
bfOptions.inInputShareable=true;
bfOptions.inTempStorage=new byte[16 * 1024];
我使用此代码解码许多位图
amunicja2_bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.bron2take,bfOptions);
amunicja2_bitmap_full = Bitmap.createScaledBitmap(amunicja2_bitmap, width_amunicja2, height_amunicja2, false);
我有30个这样的位图。 我的游戏仍然很小(1,25MB但存在内存错误)我能做什么?
答案 0 :(得分:1)
它是一个已知的错误,它不是因为大文件。
位图存储在本机堆中,但会收集垃圾 自动,调用recycle()或通过其他过程调用 weakreference或softreference要修复OutOfMemory,你应该这样做 像这样的东西:
options.inSampleSize = calculateInSampleSize(options,bitmapWidth,bitmapHeight);
public static int calculateInSampleSize(
BitmapFactory.Options options, int reqWidth, int reqHeight) {
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
final int halfHeight = height / 2;
final int halfWidth = width / 2;
// Calculate the largest inSampleSize value that is a power of 2 and keeps both
// height and width larger than the requested height and width.
while ((halfHeight / inSampleSize) > reqHeight
&& (halfWidth / inSampleSize) > reqWidth) {
inSampleSize *= 2;
}
}
return inSampleSize;
}
例如,解析为2048x1536的图像 inSampleSize为4会产生大约512x384
的位图
答案 1 :(得分:0)
你可以在这里看到我的答案。有效处理你的位图会很有用。
How to make application more responsive which uses several bitmaps?