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

本文介绍了Android应用中如何实现网络图片的高效加载,通过二级缓存(内存+文件)和异步加载组件提升加载速度。详细讲解了MemoryCache、FileCache的实现,以及自定义的AsyncImageLoader组件的工作原理,强调了异步任务在Android中的重要性,并提供了工具类ImageUtil的使用。文章还提到了MainActivity和适配器的编写,并鼓励读者查看源码进行实践。
摘要由CSDN通过智能技术生成
一、问题描述

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

二、案例介绍

  案例新闻的列表图片

 

三、主要核心组件

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

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<Bi
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值