线程池+缓存+Handler 异步加载网络图片
发布时间:2020-12-15 00:28:21 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 import java.lang.ref.SoftReference;import java.net.URL;import java.util.HashMap;import java.util.Map;import java.util.concurrent.ExecutorSer
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 import java.lang.ref.SoftReference; import java.net.URL; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import android.graphics.drawable.Drawable; import android.os.Handler; import android.util.Log; /** * 线程池+缓存+Handler加载图片 */ public class AsyncLoadImage { //缓存 private Map<String,SoftReference<Drawable>> imageCache = new HashMap<String,SoftReference<Drawable>>(); //线程池 private ExecutorService executorService = Executors.newFixedThreadPool(20);//总共有10个线程循环使用 //Hanlder private Handler mHandler = new Handler(); public interface ImageCallback { void imageLoad(Drawable image,String imageUrl); } /** * * @param imageUrl 图片的地址 * @param imageCallback 回调接口 * @return 返回内存中缓存的图像 第一次返回null */ public Drawable loadDrawable(final String imageUrl,final ImageCallback imageCallback) { Log.i("AsyncLoadImage","loadDrawable()" + imageUrl); //如果缓存中有则从缓存中取出来 if(imageCache.containsKey(imageUrl)) { SoftReference<Drawable> softReference = imageCache.get(imageUrl); if(softReference.get() != null) { //判断是否有drawable return softReference.get(); //有则返回 } } //使用线程池下载图片 executorService.submit(new Runnable() { @Override public void run() { try { // final Drawable drawable = Drawable.createFromStream(new URL(imageUrl).openStream(),"image.jpg"); final Drawable drawable = getDrawableFormUrl(imageUrl); //调用获取数据的方法 imageCache.put(imageUrl,new SoftReference<Drawable>(drawable));//将加载的图片放入到内存中 mHandler.post(new Runnable() { @Override public void run() { imageCallback.imageLoad(drawable,imageUrl); //接口回调 } }); } catch (Exception e) { throw new RuntimeException(); } } }); return null ; } /** * 从网络上获取数据 */ public Drawable getDrawableFormUrl(String imageUrl) { Drawable drawable = null ; try { drawable = Drawable.createFromStream(new URL(imageUrl).openStream(),"image.jpg"); } catch (Exception e) { throw new RuntimeException(); } return drawable ; } } 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |