public class BitmapImage implements SmartImage {
//定义Bitmap对象
private Bitmap bitmap;
//构造方法
public BitmapImage(Bitmap bitmap) {
this.bitmap = bitmap;
}
//实现getBitmap方法
public Bitmap getBitmap(Context context) {
return bitmap;
}
}
- 【WebImage(根据Url获取图片资源,需要注意的是这里用到了缓存,注意代码注释)】---->
package com.loopj.android.image;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
public class WebImage implements SmartImage {
//超时设置
private static final int CONNECT_TIMEOUT = 5000;
private static final int READ_TIMEOUT = 10000;
//缓存对象
private static WebImageCache webImageCache;
//WebImage的构造方法,获取URL
private String url;
public WebImage(String url) {
this.url = url;
}
//实现方法,处理相应的业务逻辑
public Bitmap getBitmap(Context context) {
// Don’t leak context
if(webImageCache == null) {
webImageCache = new WebImageCache(context);
}
// Try getting bitmap from cache first
//此处做了简单的二级缓存(内存缓存和磁盘缓存)
Bitmap bitmap = null;
if(url != null) {
//先从缓存获取bitmap对象
bitmap = webImageCache.get(url);
if(bitmap == null) {
//未找到则从网络加载
bitmap = getBitmapFromUrl(url);
if(bitmap != null){
//加载后将bitmap对象put到缓存中
webImageCache.put(url, bitmap);
}
}
}
return bitmap;
}
/**
-
根据Url获取网络图片资源
-
@param url
-
@return
*/
private Bitmap getBitmapFromUrl(String url) {
Bitmap bitmap = null;
try {
URLConnection conn = new URL(url).openConnection();
conn.setConnectTimeout(CONNECT_TIMEOUT);
conn.setReadTimeout(READ_TIMEOUT);
bitmap = BitmapFactory.decodeStream((InputStream) conn.getContent());
} catch(Exception e) {
e.printStackTrace();
}
return bitmap;
}
/**
-
提供移除缓存的方法
-
@param url
*/
public static void removeFromCache(String url) {
if(webImageCache != null) {
webImageCache.remove(url);
}
}
}

本文深入分析了Android智能图片加载库SmartImageView的相关类,包括BitmapImage、WebImage和ContactImage的实现。WebImage实现了网络图片的加载,并结合缓存策略提高效率,而ContactImage用于获取系统联系人头像。整个库采用了二级缓存机制,包括内存缓存(使用ConcurrentHashMap和SoftReference)和磁盘缓存,提高了图片加载速度并减少了内存占用。SmartImageTask作为后台图片加载的任务类,负责实际的加载工作。
最低0.47元/天 解锁文章
600

被折叠的 条评论
为什么被折叠?



