Android缓存机制:LruCache+AsyncTask缓存和显示网络图片
来源:互联网 发布:相声知乎 编辑:程序博客网 时间:2024/05/21 07:26
学习分享:
一、LruCache+AsyncTask缓存和显示网络图片
1.生成LruCache对象
private final int size = (int)Runtime.getRuntime().maxMemory(); //获取手机RAM
private LruCache<String,Bitmap> lruCache = new LruCache<String,Bitmap>(size/7){
@Override
protected int sizeOf(String key, Bitmap value) {//重写此方法,返回给系统正确的size值(默认返回1)
return value.getByteCount();
}
};
2.LruCache常用方法:put(key,value)存入,get(key)取出对应的值
3.加入异步:
逻辑:先从LruCache(RAM缓存)获取,如果获取到的bitmap是空,则进行异步任务(去网络上解析图片得到对应bitmap,在onPostExecute()方法中将bitmap设置进ImageView)
加载图片工具类:
/** * Created by Administrator on 2016/9/12. * 图片工具类 */public class ImgLoadUtil { private Bitmap bitmap; private final int size = (int)Runtime.getRuntime().maxMemory();//获取手机RAM /** * 生成缓存对象 * 申请RAM空间最大是(手机RAM/7) */ private LruCache<String,Bitmap> lruCache = new LruCache<String,Bitmap>(size/7){ @Override protected int sizeOf(String key, Bitmap value) { return value.getByteCount(); } }; /** * 对外接口(adapter调用—在adapter中生成成员ImageLoadUtil对象,生成设置ImageView的图片时调用) * 获取网络地址对应的图片 * 1.从缓存中获取 * 2.获取失败则去网络中加载 * @param imgUrlString * @return */ public Bitmap getBitmapfromUrl(String imgUrlString,ImageView imageView){ bitmap = lruCache.get(imgUrlString); if(bitmap == null){ //从网络获取 LogTool.e("网络获取"); new ImgAsyncTask(imageView).execute(imgUrlString); }else{ LogTool.e("缓存获取"); } return bitmap;//这里还有问题回去修改 } /** * 将Bitmap添加到缓存 * @param imgUrl (key)图片对应的URL字符串(网址) * @param bitmap (value)要存入的值 */ private void addToLrucache(String imgUrl, Bitmap bitmap){ if(bitmap != null) lruCache.put(imgUrl,bitmap); } /** * 异步任务类(内部类) */ class ImgAsyncTask extends AsyncTask<String,Void,Bitmap>{ private String imgurl = ""; ImageView imageView; /** * 传进来的ImageView,后台任务完成后将获取到bitmap设置进ImageView * @param imageView */ public ImgAsyncTask(ImageView imageView) { this.imageView = imageView; } @Override protected Bitmap doInBackground(String... params) { imgurl = params[0]; return BitmapUtil.getBitmapFromURL(params[0]); } @Override protected void onPostExecute(Bitmap bitmap) { super.onPostExecute(bitmap); ImgLoadUtil.this.bitmap = bitmap; imageView.setImageBitmap(bitmap);//给ImageView设置图片 addToLrucache(imgurl,bitmap); } }}adapter——getView方法中调用
/** * 调用ImgLoadUtil的getBitmapfromUrl方法 * imgLoadUtil 是一个成员变量 */Bitmap bitmap = imgLoadUtil.getBitmapfromUrl(list.get(position).getPicUrl(),myHolder.imageView);if(bitmap == null){ //获取到的bitmap是空则给予一个默认值 bitmap = FragFallow_beautifulGirl.bitmap;}myHolder.imageView.setImageBitmap(bitmap);获取网络地址对应的bitmap
/** * Created by Administrator on 2016/9/12. */public class BitmapUtil { /** * 获取网络图片,转换成Bitmap * @param imgURL * @return */ public static Bitmap getBitmapFromURL(String imgURL){ Bitmap bitmap = null; try { URL url = new URL(imgURL); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setReadTimeout(5000); connection.setDoInput(true); connection.connect(); bitmap = BitmapFactory.decodeStream(connection.getInputStream()); connection.disconnect(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return bitmap; }}
0 0
- Android缓存机制:LruCache+AsyncTask缓存和显示网络图片
- 【LruCache和DiskLruCache结合】图片缓存机制
- 【LruCache和DiskLruCache结合】图片缓存机制
- listview+BaseAdapter + AsyncTask异步请求网络 + LruCache缓存图片
- Android 缓存机制 LRUCache
- Android缓存机制Lrucache内存缓存和DiskLruCache磁盘缓存
- Android LruCache 缓存图片
- android 图片缓存LruCache
- android 缓存机制之 LruCache
- Android使用 LruCache 缓存图片
- Android使用 LruCache 缓存图片
- Android使用 LruCache 缓存图片
- Android使用 LruCache 缓存图片
- Android使用 LruCache 缓存图片
- Android使用 LruCache 缓存图片
- Android使用 LruCache 缓存图片
- Android使用 LruCache 缓存图片
- Android使用 LruCache 缓存图片
- 路由器和交换机的区别
- 合并K个有序数组
- curl 的用法
- java注解
- grub rescue修复方法
- Android缓存机制:LruCache+AsyncTask缓存和显示网络图片
- OpenCV学习笔记(九) 重映射、仿射变换
- 在OS X 系统中快速调出Emoji表情的界面(特殊符号界面)
- Mac系统终端命令行不执行命令 总出现command not found解决方法
- Jtemplate解析Json小引
- 加载图标的使用
- 浅学正则表达式
- Leaks检查内存泄漏,内存清理、监控的Android开发工具
- CSS完美hack方案