Android内存不足,加载位图

时间:2012-10-19 16:37:41

标签: android memory-management bitmap out-of-memory

我有一个安卓游戏,可以加载6张图像,总计300kb。我已经阅读并实现了这篇文章http://developer.android.com/training/displaying-bitmaps/load-bitmap.html虽然它有所帮助,但它并没有100%解决我的问题。

当游戏第一次加载时它运行得很好。没有错误或任何东西。然后,当您关闭游戏或按主屏幕按钮并稍后返回游戏时,会出现内存不足错误,但有时只会出现。在我的简历中,我只是开始游戏线程备份。我没有加载任何图像或类似的东西。当然我不能拥有加载6张或更多图像的唯一游戏吗?

我的onResume

    @Override
    protected void onResume(){
        try{
            game.setIsPaused(false);
            game.startSounds();
            game.threadStart();
        super.onResume();
    }

将我的图片加载到自己的帖子中

bg = bt.resizeBitmapPercent(bt.createBitmap(R.drawable.bg, context, options), imgPercentWidth, imgPercentHeight);
overlay = bt.resizeBitmapPercent(bt.createBitmap(R.drawable.overlay, context, options), imgPercentWidth, imgPercentHeight);
reel = bt.resizeBitmapPercent(bt.createBitmap(R.drawable.reels, context, options), imgPercentWidth, imgPercentHeight);
payOutBG = bt.resizeBitmapPercent(bt.createBitmap(R.drawable.payout, context, options), imgPercentWidth, imgPercentHeight);
achievement = bt.resizeBitmapPercent(bt.createBitmap(R.drawable.achievement, context, options), imgPercentWidth, imgPercentHeight);

调整大小和创建位图的方法

public Bitmap createBitmap(int id, Context context, BitmapFactory.Options options){
    return BitmapFactory.decodeResource(context.getResources(), id, options);
}
public Bitmap resizeBitmapPercent(Bitmap bitmap, float w, float h){       
    float newWidth = bitmap.getWidth()*w;
    float newHeight = bitmap.getHeight()*h;
    float scaleWidth = (float) newWidth / bitmap.getWidth();
    float scaleHeight = (float) newHeight / bitmap.getHeight();
    Matrix matrix = new Matrix();
    matrix.postScale(scaleWidth, scaleHeight);
    return Bitmap.createBitmap(bitmap, 0, 0,bitmap.getWidth(), bitmap.getHeight(), matrix, true);
}

2 个答案:

答案 0 :(得分:0)

关闭游戏后,

总是尝试清空位图

我通常使用此代码

bmp.recycle();
bmp = null;
System.runFinalization();
Runtime.getRuntime().gc();
System.gc();

它将回收位图并使用垃圾收集器

答案 1 :(得分:0)

我能够通过将所有非透明图像从png转换为jpeg并在photoshop中将其质量降低到60来解决这个问题。它将我的总图像尺寸从300kb降低到100kb。我担心质量下降看起来很糟糕,但你不能说智能手机或平板电脑的质量有任何下降。