我的日常

登录/注册
您现在的位置:论坛 资料库 JAVA开发 > java如何将图片缓存到内存中
总共48087条微博

动态微博

查看: 1707|回复: 0

java如何将图片缓存到内存中

[复制链接]

45

主题

5

听众

117

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-11-22 09:25:43 |只看该作者 |倒序浏览
  1. package tv.ismar.allium.util;

  2. import java.lang.ref.SoftReference;
  3. import java.net.URL;
  4. import java.util.HashMap;
  5. import java.util.Map;
  6. import java.util.concurrent.ExecutorService;
  7. import java.util.concurrent.Executors;

  8. import android.graphics.drawable.Drawable;
  9. import android.os.Handler;

  10. public class AsyncImageLoader {
  11.         // 为了加快速度,在内存中开启缓存(主要应用于重复图片较多时,或者同一个图片要多次被访问,比如在ListView时来回滚动)
  12.         public Map<String, SoftReference<Drawable>> imageCache = new HashMap<String, SoftReference<Drawable>>();
  13.         private ExecutorService executorService = Executors.newFixedThreadPool(5); // 固定五个线程来执行任务
  14.         private final Handler handler = new Handler();

  15.         public Drawable loadDrawable(final String imageUrl,
  16.                         final ImageCallback callback) {
  17.                 // 如果缓存过就从缓存中取出数据
  18.                 if (imageCache.containsKey(imageUrl)) {
  19.                         SoftReference<Drawable> softReference = imageCache.get(imageUrl);
  20.                         if (softReference.get() != null) {
  21.                                 return softReference.get();
  22.                         }
  23.                 }
  24.                 // 缓存中没有图像,则从网络上取出数据,并将取出的数据缓存到内存中
  25.                 executorService.submit(new Runnable() {
  26.                         public void run() {
  27.                                 try {
  28.                                         final Drawable drawable = Drawable.createFromStream(
  29.                                                         new URL(imageUrl).openStream(), "image.png");

  30.                                         imageCache.put(imageUrl, new SoftReference<Drawable>(
  31.                                                         drawable));

  32.                                         handler.post(new Runnable() {
  33.                                                 public void run() {
  34.                                                         callback.imageLoaded(drawable);
  35.                                                 }
  36.                                         });
  37.                                 } catch (Exception e) {
  38.                                         throw new RuntimeException(e);
  39.                                 }
  40.                         }
  41.                 });
  42.                 return null;
  43.         }

  44.         // 从网络上取数据方法
  45.         protected Drawable loadImageFromUrl(String imageUrl) {
  46.                 try {
  47.                         return Drawable.createFromStream(new URL(imageUrl).openStream(),
  48.                                         "image.png");
  49.                 } catch (Exception e) {
  50.                         throw new RuntimeException(e);
  51.                 }
  52.         }

  53.         // 对外界开放的回调接口
  54.         public interface ImageCallback {
  55.                 // 注意 此方法是用来设置目标对象的图像资源
  56.                 public void imageLoaded(Drawable imageDrawable);
  57.         }
  58. }
复制代码



科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、科帮网管理员和版主有权不事先通知发贴者而删除本文


JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

快速回复
您需要登录后才可以回帖 登录 | 立即注册

   

关闭

站长推荐上一条 /1 下一条

发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
快速回复 返回顶部 返回列表