加载大图及图片资源的释放

android开发中如果加载一张较大的图片直接内存爆炸,我也是头疼了好长时间,以下是我找到的的解决方案。

完整解决方案地址:https://my.oschina.net/u/1389206/blog/324731

设置 读取图片的参数,使用decodeStream进行图片读取。

尽量不要使用setImageBitmapsetImageResourceBitmapFactory.decodeResource来设置一张大图,因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存。 因此,改用先通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的  source,decodeStream最大的秘密在于其直接调用JNI>>nativeDecodeAsset()来完成decode,无需再使用java层的createBitmap,从而节省了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);
    }

对于RGB565的说明:http://blog.csdn.net/xiaoyaovsxin/article/details/8446698


使用完资源后在ondestroy进行释放:

protected void onDestroy() {
        //BitmapDrawable drawable= (BitmapDrawable) layout.getBackground();
	//Bitmap bitmap=drawable.getBitmap();
       //先取得图片资源再调用一下内容


        if(bitmap!=null&&!bitmap.isRecycled())
        {
            bitmap.recycle();
            bitmap=null;
            drawable=null;
        }
        System.gc();
        super.onDestroy();
    }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值