Android-->网络图片下载的三级缓存策略

摘要:项目中做了一个关于在线壁纸的App,其中对于网络图片的处理是至关重要的,既要考虑性能,又要考虑图片所占用内存的限制。因此这里就把网络图片下载部分的代码整理处来,这里主要介绍图片三级缓存的策略。

图片的缓存策略主要涉及到内存缓存,和磁盘缓存。这也是主流缓存策略。通过查阅资料,内存的主流缓存策略大致有以下三种:

1.      软引用

2.      LruCache(android-support-v4.jar提供的一个类)

3.      LruCache+软引用


但是在这里不太建议仅仅使用软引用,因为高版本的Android系统中,软引用变的不那么靠谱,就算是内存足够的时候也可能会将其回收,因此命中率会降低。

若单使用LruCache虽然能够满足需求,但是那些替换出来的对象就白白浪费了。

在我的项目中使用的是第三种策略,当被LruCache“遗弃”的对象将其变成软引用对象。这样可以提高命中率。

关于LruCache算法,这里不做介绍了,有兴趣的可以阅读相应源码或者参考http://blog.csdn.net/linghu_java/article/details/8574102

磁盘缓存策略,我采用的是DiskLruCache类,该类不是Android系统提供的,不过开源库上有提供源码,我们只需要将其拷贝进入工程就行。有兴趣的也可以读读其源码,加深认识。

不管LruCache和DiskLruCache其中核心的属性是LinkedHashMap,并将LinkedHashMap设置为按照访问顺序排列。有兴趣的可以参考源码或者参考http://uule.iteye.com/blog/1522291

有了相关知识储备,现在开始编码实现,废话不多说直接上代码。

package com.dighammer.imageloader;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import android.R.mipmap;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.widget.ImageView;

/**
 * @author DigHammer
 * */

public class ImageLoader {

	private static final String TAG = "Dig.ImageLoader";
	// 内存缓存
	private LruMemoryCache mMemoryCache = LruMemoryCache.getInstance();
	// 下载图片所使用的线程池
	private ExecutorService mExecutorService;
	// 文件缓存
	public static DiskLruCache sDiskLruCache;
	// SD卡分配的存储大小
	private static final int DISK_CACHE_SIZE = 1024 * 1024 * 50;// 50MB
	// 单利模式
	private static ImageLoader instance = null;
	// 监听图片下载完成事件
	private OnImageDownloadedListener mListener;

	private
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值