Bitmap加载与Lrucache DisLrucache缓存

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wk_beicai/article/details/78999127
1.bitmap
由于bitmap的特殊性,android单个应用对内存进行限制,这样导致bitmap很容易造成内存溢出。
通过采样率加载图片对图片进行处理,防止内存溢出,
1)将bitmapFactory.options的inSampleSize参数设置为false,加载图片。
2) 获取图片的宽高
3)根据采样率的规则计算出采样率
4)将inSampleSize参数设置为true,重新加载图片

android的缓存策略
Lru ----> least recently Used 算法:
核心思想: 当缓存快满时,淘汰掉近期没有或者很少使用的缓存目标,
图片的缓存核心思想:
我们为了提高用户体验,把图片在内存中也缓存一份,当我们在网络上请求一张图片时,
首先会去内存中获取,如果内存中没有,我们会去设备存储中获取,在没有就去网络上获取。
这样会提高用户的体验和减少用户的流量开销;


由于Bitmap的特殊性以及android对单个应用所施加的内存限制,导致加载bitmap的时候容易
出现内存溢出,
如果
我们不在网络上获取图片和存储设备上加载图片,这样就会提高图片的加载效率及用户体验。
Lru的算法是当我们的内存快满的时候,会淘汰近期很少使用的缓存目标,容易被接受。

bitmap如何加载一个图片,通过BitmapFactory类提供四个方法:decodeFile decodeResource,
decodeStream,和decodeByteArray(表示支持文件,资源,输入流,以及字节数组)中加载出
一个bitmap对象,其中decodeFile 和decodeResource又间接调用了decodeStream方法。
如何高效的加载bitmap那?
采用bitmapFactory.Options来加载所需尺寸的图片,四个方法都支持bitmap.Options.
通过bitmapFactory.Options来缩放图片,主要是inSampleSize参数,
inSampleSize必须是大于1才会有缩放效果的,
缩放的比例为(1/(inSampleSize的2次方))

android中的缓存策略
1)为什么要需要缓存?
加载一批网络图片,需要在下载后在用户界面上显示。
这样会耗费大量的用户流量,这样会造成用户不能接受,
2)图片的三级缓存
当应用想从网上加载一张图片的时候,首先会从内存中获取,内存中获取不到,去存储设备中获取。
存储设备中也没有就会从网络上下载这张图片,
(因为从内存中加载图片比存储设备中加载图片要快,提高了应用效率,节约了不必要的流量)
LRU的核心思想:会优先淘汰那些近期最少使用的缓存对象。
采用LRU的算法的缓存有两种:
1)LruCache用于实现内存缓存
lruCache是一个泛型类,它内部采用一个LinkedHashMap以强引用的方式存储外界的缓存对象。
提供get put 方法完成缓存的获取和添加操作。

2)DisLruCache用于实现存储设备缓存。
将缓存对象写入文件系统从而实现缓存的效果,
DisLruCache提供了open方法创建自身,
四个参数:
1)磁盘存储路径
2) 应用版本号(一般设置为1)
3)单个节点对应的数据个数(一般设为1即可)
4)缓存的总大小 (当缓存超出这个设定值之后,DisLruCache会清除一些缓存,)

Dislrucahche的缓存添加
通过Editor完成的,表示一个缓存对象的编辑对象


猜你喜欢

转载自blog.csdn.net/wk_beicai/article/details/78999127