你的位置:首页 > 软件开发 > 操作系统 > Android批量图片加载经典系列——采用二级缓存、异步加载网络图片

Android批量图片加载经典系列——采用二级缓存、异步加载网络图片

发布时间:2015-06-08 12:00:17
一、问题描述  Android应用中经常涉及从网络中加载大量图片,为提升加载速度和效率,减少网络流量都会采用二级缓存和异步加载机制,所谓二级缓存就是通过先从内存中获取、再从文件中获取,最后才会访问网络。内存缓存(一级)本质上是Map集合以key-value对的方式存储图片的url ...

Android批量图片加载经典系列——采用二级缓存、异步加载网络图片

一、问题描述

  Android应用中经常涉及从网络中加载大量图片,为提升加载速度和效率,减少网络流量都会采用二级缓存和异步加载机制,所谓二级缓存就是通过先从内存中获取、再从文件中获取,最后才会访问网络。内存缓存(一级)本质上是Map集合以key-value对的方式存储图片的url和Bitmap信息,由于内存缓存会造成堆内存泄露, 管理相对复杂一些,可采用第三方组件,对于有经验的可自己编写组件,而文件缓存比较简单通常自己封装一下即可。下面就通过案例看如何实现网络图片加载的优化

二、案例介绍

  案例新闻的列表图片

 Android批量图片加载经典系列——采用二级缓存、异步加载网络图片

三、主要核心组件

  下面先看看实现一级缓存(内存)、二级缓存(磁盘文件)所编写的组件

1、MemoryCache

  在内存中存储图片(一级缓存), 采用了1个map来缓存图片代码如下:

public class MemoryCache {  // 最大的缓存数   private static final int MAX_CACHE_CAPACITY = 30;  //用Map软引用的Bitmap对象, 保证内存空间足够情况下不会被垃圾回收    private HashMap<String, SoftReference<Bitmap>> mCacheMap =       new LinkedHashMap<String, SoftReference<Bitmap>>() {      private static final long serialVersionUID = 1L;//当缓存数量超过规定大小(返回true)会清除最早放入缓存的        protected boolean removeEldestEntry(Map.Entry<String,SoftReference<Bitmap>> eldest){        return size() > MAX_CACHE_CAPACITY;};  };    /**   * 从缓存里取出图片   * @param id   * @return 如果缓存有,并且该图片没被释放,则返回该图片,否则返回null   */  public Bitmap get(String id){    if(!mCacheMap.containsKey(id)) return null;    SoftReference<Bitmap> ref = mCacheMap.get(id);    return ref.get();  }    /**   * 将图片加入缓存   * @param id   * @param bitmap   */  public void put(String id, Bitmap bitmap){    mCacheMap.put(id, new SoftReference<Bitmap>(bitmap));  }  /**   * 清除所有缓存   */  public void clear() {  try {      for(Map.Entry<String,SoftReference<Bitmap>>entry :mCacheMap.entrySet()) {  SoftReference<Bitmap> sr = entry.getValue();      if(null != sr) {        Bitmap bmp = sr.get();        if(null != bmp) bmp.recycle();      }    }    mCacheMap.clear();  } catch (Exception e) {      e.printStackTrace();}  }}


原标题:Android批量图片加载经典系列——采用二级缓存、异步加载网络图片

关键词:Android

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录