Android:内存不足/ decodeResource如何添加到VM预算?

Emi*_*art 5 java android out-of-memory

我对Android很新,并且一直在开发游戏.每次我都有用户报告memory exceptions,我发现这很令人惊讶,因为我创建的位图大小最多为200 kb.我打电话BitmapFactory.decodeResource()时,我创建一个新的sprite.由于我的应用程序是一个僵尸防御游戏,你可以期待我经常创建精灵.

每次我创建一个精灵,我都会调用decode资源来生成一个位图.我的问题是,如果我只在每个活动开始时调用解码资源,并在包级别引用位图,这是否会减少VM预算上的内存量?

Uma*_*air 18

  • 当您从像png这样的图像资源解码位图时,它更多地取决于图像的尺寸而不是KB的大小.
  • 尝试在不影响输出的情况下减小原始图像的尺寸.
  • 尝试重用位图,然后继续解码它们.
  • 使用BitmapFactory.Options()对象探索更多选项,例如增加inSampleSize可以减少图像所需的内存量.例如
    BitmapFactory.Options o=new BitmapFactory.Options();
    o.inSampleSize = 4;
    o.inDither=false;                     //Disable Dithering mode
    o.inPurgeable=true;                   //Tell to gc that whether it needs free memory, the Bitmap can be cleared
    myBitMap=BitmapFactory.decodeResource(getResources(),ID, o);
    
  • 一个有用的棘手的解决方案,如果没有其他优化真正为你工作,你可以捕获OutOfMemoryException然后可以将质量降低到最大..即将inSampleSize设置为16.它将降低图像的质量,但至少将保存您的应用程序不会崩溃,我在我的应用程序之一,我需要在位图中加载巨大的MP图像.