温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Android——使用LruCache缓存图片

发布时间:2020-07-05 10:57:16 来源:网络 阅读:1281 作者:wauoen 栏目:移动开发
  1. 为什么要缓存图片:

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

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

2.LruCache:

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

3.实现步骤:

(1)创建缓存区:

//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)在加载图片的方法中将得到的图片放入缓存区

bitmapcache.put(bitmapId, bitmap);

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

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


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI