加载数量庞大的大图片时内存溢出问…

如果加载图片本身很大,且数量很多的时候,有可能导致内存溢出问题的发生,以下网络文章可做参考解决这种问题。

原文地址:http://www.cnblogs.com/santry/archive/2011/08/29/2158438.html

尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图, 
因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存。 
因此,改用先通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的 source, 
decodeStream最大的秘密在于其直接调用JNI>>nativeDecodeAsset()来完成decode, 
无需再使用java层的createBitmap,从而节省了java层的空间。 
如果在读取时加上图片的Config参数,可以跟有效减少加载的内存,从而跟有效阻止抛out of Memory异常 
另外,decodeStream直接拿的图片来读取字节码了, 不会根据机器的各种分辨率来自动适应, 
使用了decodeStream之后,需要在hdpi和mdpi,ldpi中配置相应的图片资源, 
否则在不同分辨率机器上都是同样大小(像素点数量),显示出来的大小就不对了。 
另外,以下方式也大有帮助: 
1. InputStream is = this.getResources().openRawResource(R.drawable.pic1); 
     BitmapFactory.Options options=new BitmapFactory.Options(); 
     options.inJustDecodeBounds = false; 
     options.inSampleSize = 10;   //width,hight设为原来的十分一 
     Bitmap btp =BitmapFactory.decodeStream(is,null,options); 
2. if(!bmp.isRecycle() ){ 
         bmp.recycle()   //回收图片所占的内存 
         system.gc()  //提醒系统及时回收 

以下奉上一个方法: 
Java代码 
       
    public static Bitmap readBitMap(Context context, int resId){   
        BitmapFactory.Options opt = new BitmapFactory.Options();   
        opt.inPreferredConfig = Bitmap.Config.RGB_565;    
       opt.inPurgeable = true;   
       opt.inInputShareable = true;   
          //获取资源图片   
       InputStream is = context.getResources().openRawResource(resId);   
           return BitmapFactory.decodeStream(is,null,opt);   
   } 
================================================================================
Android内存溢出的解决办法 
转自:http://www.cppblog.com/iuranus/archive/2010/11/15/124394.html?opt=admin 
昨天在模拟器上给gallery放入图片的时候,出现java.lang.OutOfMemoryError: bitmap size exceeds VM budget 异常,图像大小超过了RAM内存。 
      模拟器RAM比较小,只有8M内存,当我放入的大量的图片(每个100多K左右),就出现上面的原因。 
由于每张图片先前是压缩的情况,放入到Bitmap的时候,大小会变大,导致超出RAM内存,具体解决办法如下: 
//解决加载图片 内存溢出的问题 
                    //Options 只保存图片尺寸大小,不保存图片到内存 
                BitmapFactory.Options opts = new BitmapFactory.Options(); 
                //缩放的比例,缩放是很难按准备的比例进行缩放的,其值表明缩放的倍数,SDK中建议其值是2的指数值,值越大会导致图片不清晰 
                opts.inSampleSize = 4; 
                Bitmap bmp = null; 
            

你可能感兴趣的:(加载数量庞大的大图片时内存溢出问…)