Android有效解决加载大图片时内存溢出的问题

在Android中,避免加载大图片导致内存溢出,应避免使用setImageBitmap、setImageResource或BitmapFactory.decodeResource。推荐使用BitmapFactory.decodeStream结合Bitmap.Config参数,如ARGB_8888、inPurgeable和inInputShareable,以及调整densityDpi,以减少内存消耗并防止out of Memory异常。
摘要由CSDN通过智能技术生成

尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,也不要在xml布局文件里直接指定大的图片资源, 因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存。

   因此,对于大的图片的加载,请改用通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的 source,或者通过该bitmap来设置背景。 decodeStream最大的秘密在于其直接调用JNI>>nativeDecodeAsset()来完成decode, 无需再使用java层的createBitmap,从而节省了java层的空间。 如果在读取时加上图片的Config参数,可以更加有效减少加载的内存,从而跟有效阻止抛out of Memory异常 。

 

 public static Bitmap readBitMap(Context context, int resId){ 
       BitmapFactory.Options opt = new BitmapFactory.Options(); 
       opt.inPreferredConfig = Bitmap.Config.ARGB_8888;  
       opt.inPurgeable = true; 
       opt.inInputShareable = true;
      
       opt.inDensity = context.getResources().getDisplayMetrics().densityDpi;
       opt.inTargetDensity = context.getResources().getDisplayMetrics().densityDpi;
     
           //获取资源图片 
        InputStream is = context.getResources().openRawResource(resId); 
        Bitmap bm = BitmapFactory.decodeStream(is,null,opt);
       
       
        return bm;
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值