如何在android中解决OOM问题。我已经尝试了几乎所有的东西,如缩放位图,inPurgeable在BitmapOption,释放所有资源等但仍然得到OOM问题。 这基本上是由相机拍摄的图像或任何图像,即大于1.5 mb。我的应用程序中还有15-20 MB大小的图像。
答案 0 :(得分:0)
这就是我正在做的事情,以避免OOM错误,使用一些Android培训的代码。这是我的班级“ScaledFactor”
public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,
int reqWidth, int reqHeight) {
// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(res, resId, options);
options.inPurgeable = true; // I aded this to the android training code, without this I still have OOM errors. so try using inPurgeable = true
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
return BitmapFactory.decodeResource(res, resId, options);
}
在我的活动中,我使用
background = ScaledFactor.decodeSampledBitmapFromResource(getResources(), R.drawable.menu, screenheight, screenwidth); // screeenhieght is the output height , screenwidth is the output width
然后在on destroy方法中,或在调用其他意图后,我使用background.recycle();
我没有使用hdpi,ldpi等文件夹...我只是使用带有大位图的drawable,并做了scalling。这样你就可以在最终的apk文件中保存一些mb
Android培训代码在这里获取更多信息http://developer.android.com/training/displaying-bitmaps/load-bitmap.html#load-bitmap
是的,你好!希望这会有所帮助,我花了一天时间试图解决这个问题并阅读本论坛中的所有问题和答案。这只是背景图像的例子,但我的游戏中有超过20个图像都以这种方式加载,但输出尺寸较小,而且工作非常流畅。答案 1 :(得分:0)
您是否尝试过Bitmap.recycle();
?
它曾经解决了我的内存不足问题。