listview异步加载网络图片之双缓存技术

listview异步加载网络图片之双缓存技术

ID:25375025

大小:63.18 KB

页数:3页

时间:2018-11-19

listview异步加载网络图片之双缓存技术_第1页
listview异步加载网络图片之双缓存技术_第2页
listview异步加载网络图片之双缓存技术_第3页
资源描述:

《listview异步加载网络图片之双缓存技术》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、www.tsingyuan.cnListView异步加载网络图片之双缓存技术问题描述:在这一篇博客中将会为大家讲解如何将下载回来的图片进行缓存,为了节约流量,并且提高下一次显示图片的速度,提高用户体验,所以不能够每次调用getView的时候都去从网络下载图片,就必须用到缓存。缓存的重点问题:如何控制缓存的大小,如果我们一直向缓存中筛数据,而没有对缓存的大小进行控制,那么最终会导致OOM解决方案:设置两级缓存,第一级用LinkedHashMap保留Bitmap的强引用,但是控制缓存的大小MAX_CAPACITY=10,当继续向该缓存中存数据的时候,将会把一级缓

2、存中的最近最少使用的元素放入二级缓存ConcurrentHashMap>,二级缓存中保留的Bitmap的软引用。SoftReference:它保存的对象实例,除非JVM即将OutOfMemory,否则不会被GC回收。这个特性使得它特别适合设计对象Cache。对于Cache,我们希望被缓存的对象最好始终常驻内存,但是如果JVM内存吃紧,为了不发生OutOfMemoryError导致系统崩溃,必要的时候也允许JVM回收Cache的内存,待后续合适的时机再把数据重新Load到Cache中。这样可以系统设计得更具弹性。Java代码收藏代码

3、//0.75是加载因子为经验值,true则表示按照最近访问量的高低排序,false则表示按照插入顺序排序privateHashMapmFirstLevelCache=newLinkedHashMap(MAX_CAPACITY/2,0.75f,true){privatestaticfinallongserialVersionUID=1L;protectedbooleanremoveEldestEntry(Entryeldest){if(size()>MAX_CAPACITY){//当超过一级缓存阈值的

4、时候,将老的值从一级缓存搬到二级缓存mSecondLevelCache.put(eldest.getKey(),newSoftReference(eldest.getValue()));returntrue;}returnfalse;};};加载图片:先读缓存,缓存么有就开启异步任务从网络下载Java代码收藏代码/***加载图片,如果缓存中有就直接从缓存中拿,缓存中没有就下载*@paramurl*@paramadapter*@paramholder*/publicvoidloadImage(Stringurl,BaseAdapteradapter,ViewHolderho

5、lder){resetPurgeTimer();Bitmapbitmap=getBitmapFromCache(url);//从缓存中读取if(bitmap==null){holder.mImageView.setImageResource(R.drawable.ic_launcher);//缓存没有设为默认图片www.tsingyuan.cnImageLoadTaskimageLoadTask=newImageLoadTask();imageLoadTask.execute(url,adapter,holder);//执行异步任务}else{holder.mImageView.setI

6、mageBitmap(bitmap);//设为缓存图片}}读取缓存的代码:Java代码收藏代码publicBitmapgetBitmapFromCache(Stringurl){Bitmapbitmap=null;bitmap=getFromFirstLevelCache(url);//从一级缓存中拿if(bitmap!=null){returnbitmap;}bitmap=getFromSecondLevelCache(url);//从二级缓存中拿returnbitmap;}privateBitmapgetFromFirstLevelCache(Stringurl){Bitmapbit

7、map=null;synchronized(mFirstLevelCache){bitmap=mFirstLevelCache.get(url);if(bitmap!=null){//将最近访问的元素放到链的头部,提高下一次访问该元素的检索速度(LRU算法)mFirstLevelCache.remove(url);mFirstLevelCache.put(url,bitmap);}}returnbitmap;}privateBitm

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

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

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