Android——使用LruCache缓存图片

简介:
  1. 为什么要缓存图片:

    (1)根据具体设备的不同Android系统为每个应用分配了固定内存空间供应用使用;

    (2)图片是一种很占内存的资源文件,如果界面中加载一张图片还好说,如果要加载大量的图片就会超过系统为应用分配的空间发生OOM异常,使程序奔溃;

2.LruCache:

    主要算法原理:将最近使用的对象用强应用存储到LinkedHashMap中,在缓存值达到最大是把最近最少使用的对象从缓存区中移除;

3.实现步骤:

(1)创建缓存区:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//1.声明Lrucache对象,和map类似也是采用键值对的形式,这里的key使用的是int
     private  LruCache<Integer, Bitmap> bitmapcache =  null
//2.为Lrucache分配内存空间
         //2.1首先获取系统为该应用分配的最大空间,以kb为单位
         final  int  maxMemory = ( int ) (Runtime.getRuntime().maxMemory() /  1024 );
         //2.2 将应用的内存的1/8作为该缓存区的大小实例化缓存区对象
         int  cacheSize = maxMemory /  8 ;
         bitmapcache =  new  LruCache<Integer, Bitmap>(maxMemory){
             //2.3 规定缓存区中每个item的大小,即每个图片的大小,默认是实际大小;(以kb为单位)
             protected  int  sizeOf(Integer key, Bitmap bitmap) {
                 // The cache size will be measured in kilobytes rather than
                 // number of items.
                 return  bitmap.getRowBytes() * bitmap.getHeight() /  1024 ;
             }
         };

(2)在加载图片的方法中将得到的图片放入缓存区

1
bitmapcache.put(bitmapId, bitmap);

(3)在使用Bitmap时判断缓存区是否存在对应key值的bitmap对象,如果存在则直接读取,如果不存在在调用加载图片的方法进行获取;

1
2
3
4
5
6
if (bitmapcache.get(bitmapId)!= null ){
     bitmap = bitmapcache.get(bitmapId);
     iv.setImageBitmap(bitmap);
     } else {
     //根据图片加载方法加载图片
}



















本文转自wauoen51CTO博客,原文链接:http://blog.51cto.com/7183397/1606933  ,如需转载请自行联系原作者
相关文章
|
4月前
|
XML JSON Java
Android App开发即时通信中通过SocketIO在客户端与服务端间传输文本和图片的讲解及实战(超详细 附源码)
Android App开发即时通信中通过SocketIO在客户端与服务端间传输文本和图片的讲解及实战(超详细 附源码)
61 0
|
16天前
|
Android开发
Android保存图片到相册(适配android 10以下及以上)
Android保存图片到相册(适配android 10以下及以上)
19 1
|
4月前
|
缓存 NoSQL Java
springboot集成图片验证+redis缓存一步到位2
springboot集成图片验证+redis缓存一步到位2
|
4月前
|
缓存 NoSQL Java
springboot集成图片验证+redis缓存一步到位
springboot集成图片验证+redis缓存一步到位
|
4月前
|
API Android开发
[Android]图片加载库Glide
[Android]图片加载库Glide
54 0
|
4月前
|
Android开发
[Android]制作9-Patch图片
[Android]制作9-Patch图片
42 0
|
4月前
|
XML JSON Android开发
Android App开发实战项目之给用户推荐旅游信息图片(附源码 简单易懂)
Android App开发实战项目之给用户推荐旅游信息图片(附源码 简单易懂)
49 0
|
4月前
|
XML 缓存 Java
Android App开发之利用Glide实现图片的三级缓存Cache讲解及实战(附源码 超详细必看 简单易懂)
Android App开发之利用Glide实现图片的三级缓存Cache讲解及实战(附源码 超详细必看 简单易懂)
111 0
|
1月前
|
缓存 NoSQL 安全
【Redis】缓存穿透
【Redis】缓存穿透
30 0
|
1月前
|
缓存 监控 NoSQL
解析Redis缓存雪崩及应对策略
解析Redis缓存雪崩及应对策略