package com.buaa.shortytall.network; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import com.buaa.shortytall.MyHealth; import com.buaa.shortytall.util.ImageUtil; import android.graphics.Bitmap; import android.os.Environment; import android.os.Handler; import android.os.StatFs; import android.util.Log; //TODO 需要计算缓存文件的大小,定时清理缓存 public class AsyncImageLoaderSDCard { private static final int MB = 1024 * 1024; private static String FILE_FOLDER_PATH = MyHealth.APP_SDCARD_FOLDER + "/MyHealth/.imagcecache/"; /** * 计算sd空间 * @return sd空间大小 M */ public int freeSpaceOnSd(){ StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath()); double sdFreeMB = ((double)stat.getAvailableBlocks()*(double)stat.getBlockSize()) / MB; return (int)sdFreeMB; } private static ExecutorService executorSerivce; private Handler mHandler = new Handler(); public AsyncImageLoaderSDCard(){ executorSerivce = Executors.newFixedThreadPool(5); } public Bitmap loadImage(final String imageUrl, final ImageCallback callback){ Bitmap bitmap = ImageUtil.getBitmap(imageUrl); if(bitmap != null) return bitmap; //缓存中不存在图片,从网络中获取图片 executorSerivce.submit(new Runnable() { public void run() { try { final Bitmap bitmap = ImageUtil.getImageFromUrl(imageUrl); if(bitmap != null){ ImageUtil.saveBitmapToSDCard(bitmap, imageUrl); } mHandler.post(new Runnable() { public void run() { callback.imageLoad(bitmap); } }); } catch (Exception e) { Log.e("Imageloader", imageUrl); throw new RuntimeException(e); } } }); return null; } public void releaseResources(){ executorSerivce.shutdown(); } }