标签:分享 shu .exe 内存缓存 下载图片 executors 默认 pack next
wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改。分享其中关于 保存正在下载的图片URL集合和图片三种获取方式管理者,网络URL获取、内存缓存获取、外部文件缓存获取的代码供技术员学习参考使用。
package com.inuoer.util; import java.lang.ref.SoftReference; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import android.content.Context; import android.graphics.Bitmap; import android.os.Handler; public class AsyncImageLoader { // 保存正在下载的图片URL集合,避免重复下载用 private static HashSet<String> sDownloadingSet; // 软引用内存缓存 private static Map<String, SoftReference<Bitmap>> sImageCache; // 图片三种获取方式管理者,网络URL获取、内存缓存获取、外部文件缓存获取 private static LoaderImpl impl; // 线程池相关 private static ExecutorService sExecutorService; // 通知UI线程图片获取ok时使用 private Handler handler; /** * 异步加载图片完毕的回调接口 */ public interface ImageCallback { /** * 回调函数 * * @param bitmap * : may be null! * @param imageUrl */ public void onImageLoaded(Bitmap bitmap, String imageUrl); } static { sDownloadingSet = new HashSet<String>(); sImageCache = new HashMap<String, SoftReference<Bitmap>>(); impl = new LoaderImpl(sImageCache); } public AsyncImageLoader(Context context) { handler = new Handler(); startThreadPoolIfNecessary(); String defaultDir = context.getCacheDir().getAbsolutePath(); setCachedDir(defaultDir); } /** * 是否缓存图片至/data/data/package/cache/目录 默认不缓存 */ public void setCache2File(boolean flag) { impl.setCache2File(flag); } /** * 设置缓存路径,setCache2File(true)时有效 */ public void setCachedDir(String dir) { impl.setCachedDir(dir); } /** 开启线程池 */ public static void startThreadPoolIfNecessary() { if (sExecutorService == null || sExecutorService.isShutdown() || sExecutorService.isTerminated()) { sExecutorService = Executors.newFixedThreadPool(3); // sExecutorService = Executors.newSingleThreadExecutor(); } } /** * 异步下载图片,并缓存到memory中 * * @param url * @param callback * see ImageCallback interface */ public void downloadImage(final String url, final ImageCallback callback) { downloadImage(url, true, callback); } /** * * @param url * @param cache2Memory * 是否缓存至memory中 * @param callback */ public void downloadImage(final String url, final boolean cache2Memory, final ImageCallback callback) { if (sDownloadingSet.contains(url)) { // Log.i("AsyncImageLoader", "###该图片正在下载,不能重复下载!"); return; } Bitmap bitmap = impl.getBitmapFromMemory(url); if (bitmap != null) { if (callback != null) { callback.onImageLoaded(bitmap, url); } } else { // 从网络端下载图片 sDownloadingSet.add(url); sExecutorService.submit(new Runnable() { @Override public void run() { final Bitmap bitmap = impl.getBitmapFromUrl(url, cache2Memory); handler.post(new Runnable() { @Override public void run() { if (callback != null) callback.onImageLoaded(bitmap, url); sDownloadingSet.remove(url); } }); } }); } } /** * 预加载下一张图片,缓存至memory中 * * @param url */ public void preLoadNextImage(final String url) { // 将callback置为空,只将bitmap缓存到memory即可。 downloadImage(url, null); } }
wemall-mobile详情下载地址:http://www.koahub.com/home/product/56
wemall官网地址:http://www.wemallshop.com
wemall 开源微商城 ,微信商城,商城源码,三级分销,微生鲜,微水果,微外卖,微订餐---专业的o2o系统
标签:分享 shu .exe 内存缓存 下载图片 executors 默认 pack next
原文地址:http://www.cnblogs.com/jycxqe/p/6061201.html