重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
为什么要缓存图片:
专注于为中小企业提供成都网站制作、网站设计、外贸网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业石嘴山免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。(1)根据具体设备的不同Android系统为每个应用分配了固定内存空间供应用使用;
(2)图片是一种很占内存的资源文件,如果界面中加载一张图片还好说,如果要加载大量的图片就会超过系统为应用分配的空间发生OOM异常,使程序奔溃;
2.LruCache:
主要算法原理:将最近使用的对象用强应用存储到LinkedHashMap中,在缓存值达到大是把最近最少使用的对象从缓存区中移除;
3.实现步骤:
(1)创建缓存区:
//1.声明Lrucache对象,和map类似也是采用键值对的形式,这里的key使用的是int private LruCachebitmapcache = 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 (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{ //根据图片加载方法加载图片 }
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。