Jamendo 代码Image缓存实现:
package com.teleca.jamendo.util;
import java.util.WeakHashMap;
import android.graphics.Bitmap;
/**
* Caches downloaded images, saves bandwidth and user's
* packets
*
* @author Lukasz Wisniewski
*/
public class ImageCache extends WeakHashMap<String, Bitmap> {
//WeakHashMap....add by gjican...
private static final long serialVersionUID = 1L;
public boolean isCached(String url){
return containsKey(url) && get(url) != null;
}
}
在JamendoApplicatin中定义一个全局的getImageCache()来获得当前应用程序图片缓存 JamendoApplication.getInstance().getImageCache().put(mTaskUrl, bmp);
然后在每次下载图片之前先进行判断,看是否缓存里存在此图片,若有则直接显示,否则调用DownloadTast()去下载
public String doInBackground(String... params) {
mTaskUrl = params[0];
InputStream stream = null;
URL imageUrl;
Bitmap bmp = null;
try {
imageUrl = new URL(mTaskUrl);
try {
stream = imageUrl.openStream();
bmp = BitmapFactory.decodeStream(stream);
try {
if(bmp != null){
JamendoApplication.getInstance().getImageCache().put(mTaskUrl, bmp);
Log.d(JamendoApplication.TAG, "Image cached "+mTaskUrl);
} else {
Log.w(JamendoApplication.TAG, "Failed to cache "+mTaskUrl);
}
} catch (NullPointerException e) {
Log.w(JamendoApplication.TAG, "Failed to cache "+mTaskUrl);
}
} catch (IOException e) {
Log.w(JamendoApplication.TAG, "Couldn't load bitmap from url: " + mTaskUrl);
} finally {
try {
if(stream != null){
stream.close();
}
} catch (IOException e) {}
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
return mTaskUrl;
}