博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从内存缓存图片
阅读量:5113 次
发布时间:2019-06-13

本文共 5173 字,大约阅读时间需要 17 分钟。

从内存缓存图片

MemoryCacheUtils

1 public class MemoryCacheUtils { 2   3     private HashMap
hashlist=new HashMap
(); 4 /** 5 * 6 * 从内存中读 7 * @param url 8 * @return 9 */10 public Bitmap getBitmapFrommemory(String url){11 Bitmap bitmap = hashlist.get(url);12 return bitmap;13 }14 15 16 /**17 * 18 * 写入内存19 * @param url20 * @param bitmap21 */22 public void setBitmapTomemory(String url,Bitmap bitmap){23 hashlist.put(url, bitmap);24 }25 }

2.在NetCacheUtils中调用setBitmapTomemory(String url,Bitmap bitmap)方法获取

1 /**  2  *   3  * 从网络下载图片  4  * @author admin  5  *  6  */  7 public class NetCacheUtils {  8     private LocalCacheUtils mlocalcacheutils;  9     private MemoryCacheUtils mmemorycacheutils; 10  11     public NetCacheUtils(LocalCacheUtils localcacheutils, MemoryCacheUtils memorycacheutils) { 12         mlocalcacheutils=localcacheutils; 13         mmemorycacheutils=memorycacheutils; 14     } 15  16     public void getBitmapFromNet(ImageView iv_photo, String url) { 17         // TODO Auto-generated method stub 18         BitmapTask bitmaptask=new BitmapTask(); 19         bitmaptask.execute(iv_photo,url);//开启AsyncTask,参数在doInBackground获取 20     } 21     /*AsyncTask  异步任务即做一些简单的异步处理  ;是handle与线程池的封装 22      * 第一个泛型:参数类型泛型 23      * 第二个泛型:更新进度泛型 24      * 第三个泛型:onProgressUpdate的返回结果的泛型 25      *  26      */ 27      28     class BitmapTask extends AsyncTask
{ 29 30 private ImageView pic; 31 private String murl; 32 /** 33 * 后台耗时方法在此执行,子线程 34 */ 35 @Override 36 protected Bitmap doInBackground(Object... params) { 37 pic = (ImageView) params[0]; 38 murl = (String) params[1]; 39 40 pic.setTag(murl);//将图片与url绑定 41 return downloadBitmap(murl); 42 } 43 /** 44 * 更新进度,主线程 45 */ 46 @Override 47 protected void onProgressUpdate(Void... values) { 48 // TODO Auto-generated method stub 49 super.onProgressUpdate(values); 50 } 51 /** 52 * 后台耗时方法结束之后,在此执行,主线程 53 */ 54 @Override 55 protected void onPostExecute(Bitmap result) { 56 if(result!=null){ 57 58 String tag = (String) pic.getTag(); 59 if(tag.equals(murl)){ 60 pic.setImageBitmap(result); 61 } 62 63 } 64 mlocalcacheutils.setBitmapTolocal(murl, result); 65 mmemorycacheutils.setBitmapTomemory(murl, result); 66 System.out.println("从网络上加载图片啦"); 67 68 } 69 } 70 71 /** 72 * 73 * 下载图片 74 * @return 75 */ 76 private Bitmap downloadBitmap(String url){ 77 HttpURLConnection conn=null; 78 try { 79 conn=(HttpURLConnection) new URL(url) 80 .openConnection(); 81 82 conn.setConnectTimeout(5000); 83 conn.setReadTimeout(5000); 84 conn.setRequestMethod("GET"); 85 conn.connect(); 86 87 int responseCode = conn.getResponseCode();//响应码 88 89 if(responseCode==200){
//表示成功连接 90 InputStream inputStream = conn.getInputStream(); 91 Bitmap bitmap = BitmapFactory.decodeStream(inputStream); 92 return bitmap; 93 } 94 95 } catch (IOException e) { 96 97 e.printStackTrace(); 98 } 99 finally{100 conn.disconnect();101 }102 return null;103 104 }105 }

3.在中调用Bitmap getBitmapFrommemory(String url)方法

1 /** 2  *  3  *  4  * 子定义图片加载工具 5  * @author admin 6  * 7  */ 8 public class MyBitMaputils { 9     NetCacheUtils netcache;10     LocalCacheUtils localcacheutils;11     MemoryCacheUtils memorycacheutils;12     public MyBitMaputils(){13         memorycacheutils=new MemoryCacheUtils();14         localcacheutils=new LocalCacheUtils();15         netcache=new NetCacheUtils(localcacheutils,memorycacheutils);16         17     }18     Bitmap bitmap =null;19     public void display(ImageView iv_photo, String url) {20         iv_photo.setImageResource(R.drawable.news_pic_default);//默认图片,防止图片的复用21         //内存缓存22         bitmap= memorycacheutils.getBitmapFrommemory(url);23         if(bitmap!=null){24             iv_photo.setImageBitmap(bitmap);25             System.out.println("从内存中读取图片");26             return;27         }28         //本地缓存29         bitmap = localcacheutils.getBitmapFromlocal(url);30         if(bitmap!=null){31             iv_photo.setImageBitmap(bitmap);32             memorycacheutils.setBitmapTomemory(url, bitmap);//若本地中有,则从本地获取33             System.out.println("从本地读取图片");34             return;//从本地读取就不需要从网络读取了35         }36         37         //网络缓存(第一次)38         netcache.getBitmapFromNet(iv_photo,url);39     }40 41     42 }

 

转载于:https://www.cnblogs.com/wangying222/p/5270020.html

你可能感兴趣的文章
UseIIS
查看>>
集合体系
查看>>
vi命令提示:Terminal too wide
查看>>
引用 移植Linux到s3c2410上
查看>>
人与人之间的差距是从大学开始的
查看>>
MySQL5.7开多实例指导
查看>>
[51nod] 1199 Money out of Thin Air #线段树+DFS序
查看>>
poj1201 查分约束系统
查看>>
Red and Black(poj-1979)
查看>>
分布式锁的思路以及实现分析
查看>>
腾讯元对象存储之文件删除
查看>>
jdk环境变量配置
查看>>
安装 Express
查看>>
包含列的索引:SQL Server索引的阶梯级别5
查看>>
myeclipse插件安装
查看>>
浙江省第十二届省赛 Beauty of Array(思维题)
查看>>
NOIP2013 提高组 Day1
查看>>
个人对vue生命周期的理解
查看>>
cocos2dx 3.x simpleAudioEngine 长音效被众多短音效打断问题
查看>>
存储(硬件方面的一些基本术语)
查看>>