您的位置:首页 > 移动开发 > Android开发

Android图片加载(3)

2015-11-03 13:17 513 查看

缓存(LruCache)

为了加快图片加载速度,我们经常需要将已加载好的一定数量的图片存放于内存中,以提高用户体验,这里我们使用LruCache类实现内存缓存。

LruCache类位于android.util包内,可以通过以下代码进行声明:

private android.util.LruCache<String, Bitmap> mMemoryCache;


通过如下函数可以进行LruCache的初始化:

public void initLruCache(){
// 获取应用程序最大可用内存
int maxMemory = (int) Runtime.getRuntime().maxMemory();
int cacheSize = maxMemory / 8;
// 设置图片缓存大小为程序最大可用内存的1/8
mMemoryCache = new android.util.LruCache<String, Bitmap>(cacheSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
return bitmap.getByteCount();
}
};
}


由于缓存区域肯定是固定的,所有我们把LruCache类设计成单例的,详细的LruCache类源码如下所示:

public class LruCache {

private android.util.LruCache<String, Bitmap> mMemoryCache;
private static LruCache mLruCache = null;
private LruCache(){}
//设计成单例模式,保证引用的是惟一的缓存区
public static LruCache getInstance(){
if (mLruCache == null){
mLruCache = new LruCache();
}
return mLruCache;
}

public void initLruCache(){ // 获取应用程序最大可用内存 int maxMemory = (int) Runtime.getRuntime().maxMemory(); int cacheSize = maxMemory / 8; // 设置图片缓存大小为程序最大可用内存的1/8 mMemoryCache = new android.util.LruCache<String, Bitmap>(cacheSize) { @Override protected int sizeOf(String key, Bitmap bitmap) { return bitmap.getByteCount(); } }; }
//设置该函数同步,防止同时有多个线程操作,保护数据的完整,安全。
public synchronized void addBitmapToLruCache(String key,Bitmap bitmap){
if (getBitmapFromMemoryCache(key) == null) {
mMemoryCache.put(key, bitmap);
}
}

public Bitmap getBitmapFromMemoryCache(String key) {
return mMemoryCache.get(key);
}

public void removeBitmapFromLruCache(String key){
mMemoryCache.remove(key);
}
//我没有写清除缓存的代码,大家可以自己写一下很简单的。
}


好了,我们的缓存就讲到这里,这样我们就基本完成了我们工具类的书写,其中第一讲讲的是实体类和MediaProvider,第二讲是PhotoBitmapFactory(生产Bitmap的类),这一讲是缓存工具类,大概可以看出我是从Dao层到Service层讲的,下一讲我们就开始讲具体的异步请求了,把拿到的数据展示出来噻。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: