Android内存不足(很多位图)

时间:2013-12-28 11:51:01

标签: android memory bitmap

我正在玩游戏,玩家将在天空中飞行,玩家将避免许多敌人。 但在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但存在内存错误)我能做什么?

2 个答案:

答案 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

的位图

loading images efficiently

答案 1 :(得分:0)

你可以在这里看到我的答案。有效处理你的位图会很有用。

How to make application more responsive which uses several bitmaps?