内存优化之图片优化

本文探讨了Android应用中遇到的大图片导致的OOM问题,重点讲解了两种图片缓存策略:软引用和LruCache内存缓存技术。作者指出,虽然软引用曾是常见的解决方案,但自Android 2.3以后,由于垃圾回收器的变化,软引用不再可靠,推荐使用LruCache进行图片缓存,以避免内存溢出。文章还对比了两种方法的优缺点,并鼓励读者不断学习和分享经验。
摘要由CSDN通过智能技术生成

每当碰到一些大图片的时候,我们如果不对图片进行处理就会报OOM异常,这个问题曾经让我觉得很烦恼,后来终于得到了解决,那么现在就让我和大家一起分享一下吧。
这篇博文要讲的图片缓存机制,我接触到的有两钟,一种是软引用,另一种是内存缓存技术。先来看下两者的使用方式,再来作比较。除了加载图片时要用到缓存处理,还有一个比较重要的步骤要做,就是要先压缩图片。

压缩图片

至于要压缩到什么状态就要看自己当时的处境了,
压缩图片的时候既要达到一个小的值,又不能让其模糊
,更不能拉伸图片。

/**
             * 加载内存卡图片
             */
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true; // 设置了此属性一定要记得将值设置为false
            Bitmap bitmap = null;
            bitmap = BitmapFactory.decodeFile(url, options);
            int be = (int) ((options.outHeight > options.outWidth ? options.outHeight / 150
                    : options.outWidth / 200));
            if (be <= 0) // 判断200是否超过原始图片高度
                be = 1; // 如果超过,则不进行缩放
            options.inSampleSize = be;
            options.inPreferredConfig = Bitmap.Config.ARGB_4444;
            options.inPurgeable = true;
            options.inInputShareable = true;
            options.inJustDecodeBounds = false;
            try {
                bitmap = BitmapFactory.decodeFile(url, options);
            } catch (OutOfMemoryError e) {
                System.gc();
                Log.e(TAG, "OutOfMemoryError");
            }
1 软引用

只要有足够的内存,就一直保持对象,直到发现内存吃紧且没有Strong Ref时才回收对象。我们可以这样定义:map里面的键是用来放图片地址的,既可以是网络上的图片地址,也可以SDcard上的图片地址,
map里面的值里面放的是持有软引用的Bitmap,当然如果你要放Drawable,那也是可以的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值