android 使用软引用异步加载图片
android 使用软引用异步加载图片
Java 代码
1234567891011121314151617181920212223242526272829303
132333435363738394041424344454647484950515253545556
575859606162636465666768697071727374757677787980818
283848586878889909192939495969798991001011021031041
0510610710810911011111211311411511611711811912012112
212312412512612712812913013113213313413513613713813
9140141142143package com.kjs.utils;import
java.io.IOException;import java.io.InputStream;import
java.lang.ref.SoftReference;import
.HttpURLConnection;import .URL;import
java.util.HashMap;import com.kjs.utils.CacheSD;import
android.annotation.SuppressLint;import
android.graphics.Bitmap;import
android.graphics.BitmapFactory;import
android.os.Handler;import android.os.Message;import
android.util.Log;@SuppressLint("HandlerLeak")public class
AsyncLoaderImage { private static String TAG = "AsyncLoaderImage"; private static HashMap
SoftReference> bitmapCache;
public
AsyncLoaderImage() {
if (bitmapCache == null)
{
bitmapCache = new HashMap
SoftReference>();
}
}
/**
* 先从软引用中获取图片未取到则从
SDCard 上取
*
* @param url
* @param imageCallback
*
@return
*/
public Bitmap loadBitmap(final String url,
final ImageCallback imageCallback) {
Bitmap bitmap;
/**
*
从软引用中获取图片
*/
if
(bitmapCache.containsKey(url))
{
SoftReference softReference =
bitmapCache.get(url);
bitmap =
softReference.get();
if (bitmap != null)
{
return bitmap;
}
}
/**
*
从 SD 卡中获取图片
*/
bitmap = CacheSD.getBitmap(Convert.getImageName(url));
if (bitmap != null) {
/**
*
取到后
放入软引用中
*/
bitmapCache.put(url, new
SoftReference(bitmap));return
bitmap;
}
final Handler handler = new
Handler() {
@Override
public void
handleMessage(Message msg)
{imageCallback.imageLoaded((Bitmap)
msg.obj, url);
}
};
/**
* 都未取到则开启线程下载图片
Thread() {@Override
run() {try {
bitmap = DownLoadBitmap(url);
*/
new
public void
Bitmap
if
(bitmap != null) {
/**
* 下载完成后入软引用中
*/
bitmapCache.put(url, ne