为了节省流量,提高应用的流畅性,采用Lru算法

Lru(Least Recently Used)近期最少使用算法

Android提供了LruCache类来实现这个缓存算法,典型的以内存换效率的办法

最终优化完的完整的ImageLoader类的代码为:

public class ImageLoader{private ImageView mImageView;private Handler mHandler = new Handler();private String mUrl;private LruCache<String, Bitmap> mCaches;//创建Cachepublic ImageLoader(){int maxMemory = (int)Runtime.getRuntime().maxMemory();//获取最大的可用内存int cacheSize = maxMemory/4;mCaches = new LruCache<>(cacheSize){protected int sizeOf(String key, Bitmap value){return value.getByteCount();//在每次存入缓存的时候调用}};}public void addBitmapToCache(String url, Bitmap bitmap){//增加到缓存if(getBitmapFromCache(url) == null){mCaches.put(url, bitmap);}}public Bitmap getBitmapFromCache(String url){//从缓存中获取数据return mCaches.get(url);}private Handler handler = new Handler(){public void handleMessage(Message msg){super.handleMessage(msg);if(mImageView.getTag().equals(mUrl))mImageView.setImageBitmap((Bitmap)msg.obj);}}public void showImageByThread(ImageView imageView, String url){mImageView = imageView;mUrl = url;new Thread(){public void run(){super.run();Bitmap bitmao = getBitmapFromURL(url);Message message = Message.obtain();message.obj = bitmap;mHandler.sendMessage(message);}}.start();}public Bitmap getBitmapFromURL(String urlStirng){Bitmap bitmap;InputStream is;try{URL url = new URL(urlStirng);HttpURLConnection connection = (HttpURLConnection)url.openConnection();is = new BufferedInputStream(connection.getInputStream());bitmap = BitmapFactory.decodeStream(is);connection.disconnect();return bitmap;}catch(java.io.IOException e){e.printStackTrace();}finally{is.close();}return null;}
}public void showImageByAsyncTask(ImageView imageView, String url){//从缓存中取出对应的图片,若缓存中没有,则去网络下载Bitmap bitmap = getBitmapFromCache(url);if(bitmap == null){new MyAsyncTask(imageView, url).execute(url);}else{//缓存中有图片,则直接使用imageView.setImageBitmap(bitmap);}}private class MyAsyncTask extends AsyncTask<String, Void, Bitmap>{private ImageView imageView;private String mUrl;public MyAsyncTask(ImageView imageView, String url){mImageView = imageView;mUrl = url;}protected Bitmap doInBackground(String... params){String url = params[0];//从网络获取图片Bitmap bitmap = getBitmapFromURL(url);if(bitmap != null){//将不在缓存的图片加入缓存addBitmapToCache(url,bitmap)}return bitmap;}protected void onPostExecute(Bitmap bitmap){super.onPostExecute(bitmap);if(mImageView.getTag().equals(mUrl))mImageView.setImageBitmap(bitmap);}
}

另外,还需要在MyAdapter类中再初始化一个对象:

public class MyAdapter extends BaseAdapter{private List<MyBean> mList;private LayoutInflater mInflater;private ImageLoader mImageLoader;public MyAdapter(Context context, List<MyBean> data){mList = data;mInflater = LayoutInflater.from(context);mImageLoader = new ImageLoader();}

这样就保证了只有一个LruCache

接上,进一步优化,LruCache缓存相关推荐

  1. android 栏目编辑,通达信手机Android V3.09版(20170406) 进一步优化了指标编辑功能...

    好股票软件下载网(www.goodgupiao.com)提示:您正在下载的是:通达信手机Android V3.09版(20170406) 进一步优化了指标编辑功能 通达信手机版体现了信息全面丰富.运行 ...

  2. Oracle APEX 系列文章5:在阿里云上打造属于你自己的APEX完整开发环境 (进一步优化)

    本文是钢哥的Oracle APEX系列文章中的第五篇,完整 Oracle APEX 系列文章如下: - Oracle APEX 系列文章1:Oracle APEX, 让你秒变全栈开发的黑科技 - Or ...

  3. Oracle APEX 系列文章5:在阿里云上打造属于你自己的APEX完整开发环境 (进一步优化)...

    本文是钢哥的Oracle APEX系列文章中的第五篇,完整 Oracle APEX 系列文章如下: Oracle APEX 系列文章1:Oracle APEX, 让你秒变全栈开发的黑科技 Oracle ...

  4. GPU上如何优化卷积

    GPU上如何优化卷积 本文将演示如何在TVM中编写高性能卷积实现.我们以平方大小的输入张量和滤波器为例,假设卷积的输入是大批量的.在本例中,使用不同的布局来存储数据,以实现更好的数据局部性.缓冲区布局 ...

  5. 如何优化WebAPP性能:从五个层面上彻底优化前端项目性能

    如何优化WebAPP性能:从五个层面上彻底优化前端项目性能 资源层面上的优化 该项措施可以帮助我们优化 FP.FCP.LCP 指标. 压缩文件.使用 Tree-shaking 删除无用代码 服务端配置 ...

  6. 如何优化WebAPP性能:从四个层面上彻底优化前端项目性能

    如何优化WebAPP性能:从四个层面上彻底优化前端项目性能 资源层面上的优化 该项措施可以帮助我们优化 FP.FCP.LCP 指标. 压缩文件.使用 Tree-shaking 删除无用代码 服务端配置 ...

  7. 想知道深度学习卷积在GPU上如何优化吗?“大神”赵开勇带你深入浅出

    想知道深度学习卷积在GPU上如何优化吗?"大神"赵开勇带你深入浅出 2016-08-19 11:54 转载 陈杨英杰 0条评论 雷锋网(搜索"雷锋网"公众号关注 ...

  8. 机器学习:SVM代码实现,朴素实现基础上的优化

    SVM代码实现,朴素实现基础上的优化: 因为二次凸优化已经把解析结果明白表现出来了,所以优化只能体现在两个变量的选择上,或者说是两个样本的选择上: 1.第一个变量的选择:这次实现也并不是选择最不满足K ...

  9. 梯度下降法算法比较和进一步优化

    梯度下降法算法比较和进一步优化 常见的梯度下降算法有: 全梯度下降算法(Full gradient descent), 随机梯度下降算法(Stochastic gradient descent), 小 ...

  10. APP开发流程实例讲解-儒释道网络电台八天开发全程-百度云深度兼容测试并进一步优化排错

    APP开发流程实例讲解-儒释道网络电台八天开发全程之 百度云深度兼容测试并进一步优化排错 APP开发流程实例讲解-儒释道网络电台八天开发全程 项目发起 功能和界面初步设定 在Android Studi ...

最新文章

  1. 7个值得推荐的优质软件,让人忍不住体验!
  2. access下如何配置两个vlan_【新华三】网络工程师 H3C如何配置VLAN-trunk 二层隔离技术...
  3. go mod依赖离线安装_go mod 无法自动下载依赖包的问题
  4. 收藏本站html,加入收藏代码_加入收藏代码 -收藏本站的代码
  5. 7-2 页面置换算法--LRU (50 分)
  6. java二分查找算法字符串数组_Java 算法——二分查找数组集合关键元素
  7. 工程思想——关于串口通讯协议帧数据的一些想法
  8. paip.PHP zend解密—以SHOPEX4.8.4为例
  9. Postgresql基础操作2-导入数据
  10. 2010年中考英语写作高分指导
  11. 详解高级前端面试常问的EventLoop
  12. 相机变换AND正交投影AND透视投影
  13. fir高通滤波器matlab程序,FIR数字滤波器的Matlab实现[高等教育]
  14. acm会议什么档次_国际顶级会议期刊级别介绍
  15. 钉钉群机器人通知中的图片,突然不显示了
  16. ESXi Arm Edition version 1.11更新,及安装Win11 Arm版
  17. PNAS | 南农张瑞福组揭示了微生物肥料功能菌根际趋化的信号识别新机制
  18. Person Re-Identification(ReID行人重识别)
  19. [uni-app] 微信小程序 如何修改替换头像
  20. php 大量数导出表格 打包成zip

热门文章

  1. Sql Server XML
  2. 利用CSS实现文本省略效果
  3. (转)在Eclipse中创建Maven多模块工程
  4. mdf与ldf文件如何还原到SQLserver数据库
  5. Java虚拟机详解02----JVM内存结构
  6. matplotlib安装
  7. XMLJavaXMLBeans结合应用的价值
  8. mysql 连接器配置_配置连接器 - 金融分布式架构 SOFAStack - 阿里云
  9. 怎么通过media foundation将图像数据写入虚拟摄像头_不知道怎么挑手机?性价比神机绝对适合你...
  10. CRI-O将如何把Kubernetes推上容器生态系统的中心位置