欢迎来到天天文库
浏览记录
ID:40842915
大小:103.50 KB
页数:30页
时间:2019-08-08
《教你写Android ImageLoader框架之图片缓存 (完结篇)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、教你写AndroidImageLoader框架之图片缓存(完结篇)在教你写AndroidImageLoader框架系列博文中,我们从基本架构到具体实现已经更新了大部分的内容。今天,我们来讲最后一个关键点,即图片的缓存。为了用户体验,通常情况下我们都会将已经下载的图片缓存起来,一般来说内存和本地都会有图片缓存。那既然是框架,必然需要有很好的定制性,这让我们又自然而然的想到了抽象。下面我们就一起来看看缓存的实现吧。缓存接口在教你写AndroidImageLoader框架之图片加载与加载策略我们聊到了Loader,然后阐述了AbsLoader的基本逻辑,其中就有图片缓存。因此AbsLoader中必然
2、含有缓存对象的引用。我们看看相关代码:/***@authormrsimple*/publicabstractclassAbsLoaderimplementsLoader{/***图片缓存*/privatestaticBitmapCachemCache=SimpleImageLoader.getInstance().getConfig().bitmapCache;//代码省略}123456789101112AbsLoader中定义了一个static的BitmapCache对象,这个就是图片缓存对象。那为什么是static呢?因为不管Loader有多少个,缓存对象都应该是共享的,也就是缓存只有一份
3、。说了那么多,那我们先来了解一下BitmapCache吧。publicinterfaceBitmapCache{publicBitmapget(BitmapRequestkey);publicvoidput(BitmapRequestkey,Bitmapvalue);publicvoidremove(BitmapRequestkey);}123456789BitmapCache很简单,只声明了获取、添加、移除三个方法来操作图片缓存。这里有依赖了一个BitmapRequest类,这个类代表了一个图片加载请求,该类中有该请求对应的ImageView、图片uri、显示Config等属性。在缓存这块我
4、们主要要使用图片的uri来检索缓存中是否含有该图片,缓存以图片的uri为key,Bitmap为value来关联存储。另外需要BitmapRequest的ImageView宽度和高度,以此来按尺寸加载图片。定义BitmapCache接口还是为了可扩展性,面向接口的编程的理念又再一次的浮现在你面前。如果是你,你会作何设计呢?自己写代码来练习一下吧,看看自己作何考虑,如果实现,这样你才会从中有更深的领悟。内存缓存既然是框架,那就需要接受用户各种各样的需求。但通常来说框架会有一些默认的实现,对于图片缓存来说内存缓存就其中的一个默认实现,它会将已经加载的图片缓存到内存中,大大地提升图片重复加载的速度。内
5、存缓存我们的策略是使用LRU算法,直接使用了support.v4中的LruCache类,相关代码如下。/***图片的内存缓存,key为图片的uri,值为图片本身**@authormrsimple*/publicclassMemoryCacheimplementsBitmapCache{privateLruCachemMemeryCache;publicMemoryCache(){//计算可使用的最大内存finalintmaxMemory=(int)(Runtime.getRuntime().maxMemory()/1024);//取4分之一的可用内存作为缓存fin
6、alintcacheSize=maxMemory/4;mMemeryCache=newLruCache(cacheSize){@OverrideprotectedintsizeOf(Stringkey,Bitmapbitmap){returnbitmap.getRowBytes()*bitmap.getHeight()/1024;}};}@OverridepublicBitmapget(BitmapRequestkey){returnmMemeryCache.get(key.imageUri);}@Overridepublicvoidput(BitmapReque
7、stkey,Bitmapvalue){mMemeryCache.put(key.imageUri,value);}@Overridepublicvoidremove(BitmapRequestkey){mMemeryCache.remove(key.imageUri);}}123456789101112131415161718192021222324252627282930313233343536
此文档下载收益归作者所有