当您的应用超出堆中分配的内存时,就会发生OutofMemory。位图太大,无法放入内存,即堆。在这种情况下,内存不足。您需要缩小位图,然后再使用该位图。为此,请检查下面的链接
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html。
还有一个博客@ http://android-developers.blogspot.in/2009/01/avoiding-memory-leaks.html(避免内存泄漏)
public static Bitmap depreFile(File f,int WIDTH,int HIGHT){ try { //Depre image size BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDepreBounds = true; BitmapFactory.depreStream(new FileInputStream(f),null,o); //The new size we want to scale to final int REQUIRED_WIDTH=WIDTH; final int REQUIRED_HIGHT=HIGHT; //Find the correct scale value. It should be the power of 2. int scale=1; while(o.outWidth/scale/2>=REQUIRED_WIDTH && o.outHeight/scale/2>=REQUIRED_HIGHT) scale*=2; //Depre with inSampleSize BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.inSampleSize=scale; return BitmapFactory.depreStream(new FileInputStream(f), null, o2); } catch (FileNotFoundException e) {} return null;}
引用文档
BitmapFactory类提供了几种解码方法(depreByteArray(),depreFile(),depreResource()等),用于从各种来源创建位图。根据您的图像数据源选择最合适的解码方法。这些方法尝试为构造的位图分配内存,因此很容易导致OutOfMemory异常。每种类型的解码方法都有其他签名,可让您通过BitmapFactory.Options类指定解码选项。
解码时将inJustDepreBounds属性设置为true可以避免内存分配,为位图对象返回null,但设置outWidth,outHeight和outMimeType。此技术使您可以在位图的构造(和内存分配)之前读取图像数据的尺寸和类型。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)