图片缓存之内存缓存技术LruCache

图片缓存之内存缓存技术LruCache

ID:37770892

大小:26.22 KB

页数:6页

时间:2019-05-30

图片缓存之内存缓存技术LruCache_第1页
图片缓存之内存缓存技术LruCache_第2页
图片缓存之内存缓存技术LruCache_第3页
图片缓存之内存缓存技术LruCache_第4页
图片缓存之内存缓存技术LruCache_第5页
资源描述:

《图片缓存之内存缓存技术LruCache》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、图片缓存之内存缓存技术LruCache,软引用每当碰到一些大图片的时候,我们如果不对图片进行处理就会报OOM异常,这个问题曾经让我觉得很烦恼,后来终于得到了解决,那么现在就让我和大家一起分享一下吧。这篇博文要讲的图片缓存机制,我接触到的有两钟,一种是软引用,另一种是内存缓存技术。先来看下两者的使用方式,再来作比较。除了加载图片时要用到缓存处理,还有一个比较重要的步骤要做,就是要先压缩图片。1、压缩图片至于要压缩到什么状态就要看自己当时的处境了,压缩图片的时候既要达到一个小的值,又不能让其模糊,更不能拉伸图片。1./**2.    

2、    *加载内存卡图片3.        */4.        BitmapFactory.Optionsoptions = new BitmapFactory.Options();5.        options.inJustDecodeBounds = true; //设置了此属性一定要记得将值设置为false6.        Bitmapbitmap = null;7.        bitmap = BitmapFactory.decodeFile(url, options);8.        int be = 

3、(int) ((options.outHeight > options.outWidth ? options.outHeight / 1509.                : options.outWidth / 200));10.        if (be <= 0) //判断200是否超过原始图片高度11.            be = 1; //如果超过,则不进行缩放12.        options.inSampleSize = be;13.        options.inPreferredConfig = 

4、Bitmap.Config.ARGB_4444;14.        options.inPurgeable = true;15.        options.inInputShareable = true;16.        options.inJustDecodeBounds = false;17.        try {18.            bitmap = BitmapFactory.decodeFile(url, options);19.        } catch (OutOfMemoryError e

5、) {20.            System.gc();21.            Log.e(TAG, "OutOfMemoryError");22.        }2、软引用:只要有足够的内存,就一直保持对象,直到发现内存吃紧且没有StrongRef时才回收对象。我们可以这样定义:map里面的键是用来放图片地址的,既可以是网络上的图片地址,也可以SDcard上的图片地址,map里面的值里面放的是持有软引用的Bitmap,当然如果你要放Drawable,那也是可以的。1.private Map

6、eference> imageMap = new HashMap>();接下来就让我再介绍一下如何具体加载图片:步骤:(1)先通过URL查看缓存中是否有图片,如果有,则直接去缓存中取得。           如果没有,就开线程重新去网上下载。      (2)下载完了之后,就把图片放在缓存里面,方便下次可以直接从缓存中取得。1.public BitmaploadBitmap(final String imageUrl,final ImageCallBack

7、imageCallBack) {2.        SoftReference reference = imageMap.get(imageUrl);3.        if(reference != null) {4.            if(reference.get() != null) {5.                return reference.get();6.            }7.        }8.        final Handler handler = new Hand

8、ler() {9.            public void handleMessage(final android.os.Messagemsg) {10.                //加入到缓存中11.                B

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。